From 44a4a521d03a0033fca696b5fa4725a436018ae6 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 19 Nov 2024 18:26:19 -0500 Subject: [PATCH 01/90] Compare collations before merging UNION operations. In the dim past we figured it was okay to ignore collations when combining UNION set-operation nodes into a single N-way UNION operation. I believe that was fine at the time, but it stopped being fine when we added nondeterministic collations: the semantics of distinct-ness are affected by those. v17 made it even less fine by allowing per-child sorting operations to be merged via MergeAppend, although I think we accidentally avoided any live bug from that. Add a check that collations match before deciding that two UNION nodes are equivalent. I also failed to resist the temptation to comment plan_union_children() a little better. Back-patch to all supported branches (v13 now), since they all have nondeterministic collations. Discussion: https://postgr.es/m/3605568.1731970579@sss.pgh.pa.us --- src/backend/optimizer/prep/prepunion.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/backend/optimizer/prep/prepunion.c b/src/backend/optimizer/prep/prepunion.c index e9256a2d4d2..78f582ba2e8 100644 --- a/src/backend/optimizer/prep/prepunion.c +++ b/src/backend/optimizer/prep/prepunion.c @@ -570,9 +570,9 @@ generate_union_paths(SetOperationStmt *op, PlannerInfo *root, /* * If any of my children are identical UNION nodes (same op, all-flag, and - * colTypes) then they can be merged into this node so that we generate - * only one Append and unique-ification for the lot. Recurse to find such - * nodes and compute their children's paths. + * colTypes/colCollations) then they can be merged into this node so that + * we generate only one Append and unique-ification for the lot. Recurse + * to find such nodes and compute their children's paths. */ rellist = plan_union_children(root, op, refnames_tlist, &tlist_list); @@ -861,17 +861,15 @@ generate_nonunion_paths(SetOperationStmt *op, PlannerInfo *root, } /* - * Pull up children of a UNION node that are identically-propertied UNIONs. + * Pull up children of a UNION node that are identically-propertied UNIONs, + * and perform planning of the queries underneath the N-way UNION. + * + * The result is a list of RelOptInfos containing Paths for sub-nodes, with + * one entry for each descendant that is a leaf query or non-identical setop. + * We also return a parallel list of the childrens' targetlists. * * NOTE: we can also pull a UNION ALL up into a UNION, since the distinct * output rows will be lost anyway. - * - * NOTE: currently, we ignore collations while determining if a child has - * the same properties. This is semantically sound only so long as all - * collations have the same notion of equality. It is valid from an - * implementation standpoint because we don't care about the ordering of - * a UNION child's result: UNION ALL results are always unordered, and - * generate_union_paths will force a fresh sort if the top level is a UNION. */ static List * plan_union_children(PlannerInfo *root, @@ -897,7 +895,8 @@ plan_union_children(PlannerInfo *root, if (op->op == top_union->op && (op->all == top_union->all || op->all) && - equal(op->colTypes, top_union->colTypes)) + equal(op->colTypes, top_union->colTypes) && + equal(op->colCollations, top_union->colCollations)) { /* Same UNION, so fold children into parent */ pending_rels = lcons(op->rarg, pending_rels); From 3eb26524ca35f03faa5560debce253d3c8db5624 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 20 Nov 2024 12:03:47 -0500 Subject: [PATCH 02/90] Avoid assertion failure if a setop leaf query contains setops. Ordinarily transformSetOperationTree will collect all UNION/ INTERSECT/EXCEPT steps into the setOperations tree of the topmost Query, so that leaf queries do not contain any setOperations. However, it cannot thus flatten a subquery that also contains WITH, ORDER BY, FOR UPDATE, or LIMIT. I (tgl) forgot that in commit 07b4c48b6 and wrote an assertion in rule deparsing that a leaf's setOperations would always be empty. If it were nonempty then we would want to parenthesize the subquery to ensure that the output represents the setop nesting correctly (e.g. UNION below INTERSECT had better get parenthesized). So rather than just removing the faulty Assert, let's change it into an additional case to check to decide whether to add parens. We don't expect that the additional case will ever fire, but it's cheap insurance. Man Zeng and Tom Lane Discussion: https://postgr.es/m/tencent_7ABF9B1F23B0C77606FC5FE3@qq.com --- src/backend/utils/adt/ruleutils.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 99d9bb5d6fe..993e28a273c 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -6091,13 +6091,19 @@ get_setop_query(Node *setOp, Query *query, deparse_context *context, Query *subquery = rte->subquery; Assert(subquery != NULL); - Assert(subquery->setOperations == NULL); - /* Need parens if WITH, ORDER BY, FOR UPDATE, or LIMIT; see gram.y */ + + /* + * We need parens if WITH, ORDER BY, FOR UPDATE, or LIMIT; see gram.y. + * Also add parens if the leaf query contains its own set operations. + * (That shouldn't happen unless one of the other clauses is also + * present, see transformSetOperationTree; but let's be safe.) + */ need_paren = (subquery->cteList || subquery->sortClause || subquery->rowMarks || subquery->limitOffset || - subquery->limitCount); + subquery->limitCount || + subquery->setOperations); if (need_paren) appendStringInfoChar(buf, '('); get_query_def(subquery, buf, context->namespaces, resultDesc, From 4a20c83798edc09f4de3a2f833f97ea70f3905d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Herrera?= Date: Thu, 21 Nov 2024 16:54:36 +0100 Subject: [PATCH 03/90] Fix outdated bit in README.tuplock Apparently this information has been outdated since first committed, because we adopted a different implementation during development per reviews and this detail was not updated in the README. This has been wrong since commit 0ac5ad5134f2 introduced the file in 2013. Backpatch to all live branches. Reported-by: Will Mortensen Discussion: https://postgr.es/m/CAMpnoC6yEQ=c0Rdq-J7uRedrP7Zo9UMp6VZyP23QMT68n06cvA@mail.gmail.com --- src/backend/access/heap/README.tuplock | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/backend/access/heap/README.tuplock b/src/backend/access/heap/README.tuplock index 818cd7f9806..750684d3398 100644 --- a/src/backend/access/heap/README.tuplock +++ b/src/backend/access/heap/README.tuplock @@ -70,13 +70,8 @@ KEY SHARE conflict When there is a single locker in a tuple, we can just store the locking info in the tuple itself. We do this by storing the locker's Xid in XMAX, and -setting infomask bits specifying the locking strength. There is one exception -here: since infomask space is limited, we do not provide a separate bit -for SELECT FOR SHARE, so we have to use the extended info in a MultiXact in -that case. (The other cases, SELECT FOR UPDATE and SELECT FOR KEY SHARE, are -presumably more commonly used due to being the standards-mandated locking -mechanism, or heavily used by the RI code, so we want to provide fast paths -for those.) +setting infomask bits specifying the locking strength. See "Infomask Bits" +below for details on the bit patterns we use. MultiXacts ---------- From 1c5fe56bc25926b9504532797c3b4fde816dfba5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Herrera?= Date: Thu, 21 Nov 2024 17:04:26 +0100 Subject: [PATCH 04/90] Fix newly introduced 010_keep_recycled_wals.pl It failed to set the archive_command as it desired because of a syntax problem. Oversight in commit 90bcc7c2db1d. This bug doesn't cause the test to fail, because the test only checks pg_rewind's output messages, not the actual outcome (and the outcome in both cases is that the file is kept, not deleted). But in either case the message about the file being kept is there, so it's hard to get excited about doing much more. Reported-by: Antonin Houska Author: Alexander Kukushkin Discussion: https://postgr.es/m/7822.1732167825@antos --- src/bin/pg_rewind/t/010_keep_recycled_wals.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bin/pg_rewind/t/010_keep_recycled_wals.pl b/src/bin/pg_rewind/t/010_keep_recycled_wals.pl index e6dfce2a54a..bf0084d3bc3 100644 --- a/src/bin/pg_rewind/t/010_keep_recycled_wals.pl +++ b/src/bin/pg_rewind/t/010_keep_recycled_wals.pl @@ -23,9 +23,9 @@ RewindTest::primary_psql("CHECKPOINT"); # last common checkpoint -# We use "perl -e 'exit(1)'" as an alternative to "false", because the latter +# We use `perl -e "exit(1)"` as an alternative to "false", because the latter # might not be available on Windows. -my $false = "$^X -e 'exit(1)'"; +my $false = "$^X -e \"exit(1)\""; $node_primary->append_conf( 'postgresql.conf', qq( archive_command = '$false' From 7ca388fd0decece896518f61fb5e4c0648690deb Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Fri, 22 Nov 2024 14:53:21 +1300 Subject: [PATCH 05/90] jit: Use -mno-outline-atomics for bitcode on ARM. If the executable's .o files were produced by a compiler (probably gcc) not using -moutline-atomics, and the corresponding .bc files were produced by clang using -moutline-atomics (probably by default), then the generated bitcode functions would have the target attribute "+outline-atomics", and could fail at runtime when inlined. If the target ISA at bitcode generation time was armv8-a (the most conservative aarch64 target, no LSE), then LLVM IR atomic instructions would generate calls to functions in libgcc.a or libclang_rt.*.a that switch between LL/SC and faster LSE instructions depending on a runtime AT_HWCAP check. Since the corresponding .o files didn't need those functions, they wouldn't have been included in the executable, and resolution would fail. At least Debian and Ubuntu are known to ship gcc and clang compilers that target armv8-a but differ on the use of outline atomics by default. Fix, by suppressing the outline atomics attribute in bitcode explicitly. Inline LL/SC instructions will be generated for atomic operations in bitcode built for armv8-a. Only configure scripts are adjusted for now, because the meson build system doesn't generate bitcode yet. This doesn't seem to be a new phenomenon, so real cases of functions using atomics that are inlined by JIT must be rare in the wild given how long it took for a bug report to arrive. The reported case could be reduced to: postgres=# set jit_inline_above_cost = 0; SET postgres=# set jit_above_cost = 0; SET postgres=# select pg_last_wal_receive_lsn(); WARNING: failed to resolve name __aarch64_swp4_acq_rel FATAL: fatal llvm error: Program used external function '__aarch64_swp4_acq_rel' which could not be resolved! The change doesn't affect non-ARM systems or later target ISAs. Back-patch to all supported releases. Reported-by: Alexander Kozhemyakin Discussion: https://postgr.es/m/18610-37bf303f904fede3%40postgresql.org --- configure | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 7 ++++ 2 files changed, 112 insertions(+) diff --git a/configure b/configure index 7e6030e9e18..e4f1fc92ab3 100755 --- a/configure +++ b/configure @@ -7394,6 +7394,111 @@ if test x"$pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" = x"yes"; fi + # Ideally bitcode should perhaps match $CC's use, or not, of outline atomic + # functions, but for now we err on the side of suppressing them in bitcode, + # because we can't assume they're available at runtime. This affects aarch64 + # builds using the basic armv8-a ISA without LSE support. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -mno-outline-atomics, for BITCODE_CFLAGS" >&5 +$as_echo_n "checking whether ${CLANG} supports -mno-outline-atomics, for BITCODE_CFLAGS... " >&6; } +if ${pgac_cv_prog_CLANG_cxxflags__mno_outline_atomics+:} false; then : + $as_echo_n "(cached) " >&6 +else + pgac_save_CXXFLAGS=$CXXFLAGS +pgac_save_CXX=$CXX +CXX=${CLANG} +CXXFLAGS="${BITCODE_CFLAGS} -mno-outline-atomics" +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_CLANG_cxxflags__mno_outline_atomics=yes +else + pgac_cv_prog_CLANG_cxxflags__mno_outline_atomics=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_CLANG_cxxflags__mno_outline_atomics" >&5 +$as_echo "$pgac_cv_prog_CLANG_cxxflags__mno_outline_atomics" >&6; } +if test x"$pgac_cv_prog_CLANG_cxxflags__mno_outline_atomics" = x"yes"; then + BITCODE_CFLAGS="${BITCODE_CFLAGS} -mno-outline-atomics" +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -mno-outline-atomics, for BITCODE_CXXFLAGS" >&5 +$as_echo_n "checking whether ${CLANG} supports -mno-outline-atomics, for BITCODE_CXXFLAGS... " >&6; } +if ${pgac_cv_prog_CLANG_cxxflags__mno_outline_atomics+:} false; then : + $as_echo_n "(cached) " >&6 +else + pgac_save_CXXFLAGS=$CXXFLAGS +pgac_save_CXX=$CXX +CXX=${CLANG} +CXXFLAGS="${BITCODE_CXXFLAGS} -mno-outline-atomics" +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_CLANG_cxxflags__mno_outline_atomics=yes +else + pgac_cv_prog_CLANG_cxxflags__mno_outline_atomics=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_CLANG_cxxflags__mno_outline_atomics" >&5 +$as_echo "$pgac_cv_prog_CLANG_cxxflags__mno_outline_atomics" >&6; } +if test x"$pgac_cv_prog_CLANG_cxxflags__mno_outline_atomics" = x"yes"; then + BITCODE_CXXFLAGS="${BITCODE_CXXFLAGS} -mno-outline-atomics" +fi + + NOT_THE_CFLAGS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -Wunused-command-line-argument, for NOT_THE_CFLAGS" >&5 $as_echo_n "checking whether ${CLANG} supports -Wunused-command-line-argument, for NOT_THE_CFLAGS... " >&6; } diff --git a/configure.ac b/configure.ac index 7a75d6e37c3..d6563a194e5 100644 --- a/configure.ac +++ b/configure.ac @@ -609,6 +609,13 @@ if test "$with_llvm" = yes ; then PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-Xclang -no-opaque-pointers]) PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-Xclang -no-opaque-pointers]) + # Ideally bitcode should perhaps match $CC's use, or not, of outline atomic + # functions, but for now we err on the side of suppressing them in bitcode, + # because we can't assume they're available at runtime. This affects aarch64 + # builds using the basic armv8-a ISA without LSE support. + PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-mno-outline-atomics]) + PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANG, BITCODE_CXXFLAGS, [-mno-outline-atomics]) + NOT_THE_CFLAGS="" PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, NOT_THE_CFLAGS, [-Wunused-command-line-argument]) if test -n "$NOT_THE_CFLAGS"; then From e0874080c472bc9b5994d0b9fad9351136578975 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Mon, 25 Nov 2024 13:11:28 +1300 Subject: [PATCH 06/90] Assume that conforms to the C standard. Previously we checked "for that conforms to C99" using autoconf's AC_HEADER_STDBOOL macro. We've required C99 since PostgreSQL 12, so the test was redundant, and under C23 it was broken: autoconf 2.69's implementation doesn't understand C23's new empty header (the macros it's looking for went away, replaced by language keywords). Later autoconf versions fixed that, but let's just remove the anachronistic test. HAVE_STDBOOL_H and HAVE__BOOL will no longer be defined, but they weren't directly tested in core or likely extensions (except in 11, see below). PG_USE_STDBOOL (or USE_STDBOOL in 11 and 12) is still defined when sizeof(bool) is 1, which should be true on all modern systems. Otherwise we define our own bool type and values of size 1, which would fail to compile under C23 as revealed by the broken test. (We'll probably clean that dead code up in master, but here we want a minimal back-patchable change.) This came to our attention when GCC 15 recently started using using C23 by default and failed to compile the replacement code, as reported by Sam James and build farm animal alligator. Back-patch to all supported releases, and then two older versions that also know about , per the recently-out-of-support policy[1]. 12 requires C99 so it's much like the supported releases, but 11 only assumes C89 so it now uses AC_CHECK_HEADERS instead of the overly picky AC_HEADER_STDBOOL. (I could find no discussion of which historical systems had but failed the conformance test; if they ever existed, they surely aren't relevant to that policy's goals.) [1] https://wiki.postgresql.org/wiki/Committing_checklist#Policies Reported-by: Sam James Reviewed-by: Peter Eisentraut (master version) Reviewed-by: Tom Lane (approach) Discussion: https://www.postgresql.org/message-id/flat/87o72eo9iu.fsf%40gentoo.org --- configure | 182 +++++++++---------------------------- configure.ac | 13 +-- src/include/c.h | 2 +- src/include/pg_config.h.in | 6 -- src/tools/msvc/Solution.pm | 2 - 5 files changed, 48 insertions(+), 157 deletions(-) diff --git a/configure b/configure index e4f1fc92ab3..1202fc80792 100755 --- a/configure +++ b/configure @@ -2085,116 +2085,116 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_func -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () +# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES +# ---------------------------------------------------- +# Tries to find if the field MEMBER exists in type AGGR, after including +# INCLUDES, setting cache variable VAR accordingly. +ac_fn_c_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +$as_echo_n "checking for $2.$3... " >&6; } +if eval \${$4+:} false; then : $as_echo_n "(cached) " >&6 else - eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$4 +$5 int main () { -if (sizeof ($2)) - return 0; +static $2 ac_aggr; +if (ac_aggr.$3) +return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$4 +$5 int main () { -if (sizeof (($2))) - return 0; +static $2 ac_aggr; +if (sizeof ac_aggr.$3) +return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - + eval "$4=yes" else - eval "$3=yes" + eval "$4=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -eval ac_res=\$$3 +eval ac_res=\$$4 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_c_check_type +} # ac_fn_c_check_member -# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES -# ---------------------------------------------------- -# Tries to find if the field MEMBER exists in type AGGR, after including -# INCLUDES, setting cache variable VAR accordingly. -ac_fn_c_check_member () +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 -$as_echo_n "checking for $2.$3... " >&6; } -if eval \${$4+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else + eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$5 +$4 int main () { -static $2 ac_aggr; -if (ac_aggr.$3) -return 0; +if (sizeof ($2)) + return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - eval "$4=yes" -else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$5 +$4 int main () { -static $2 ac_aggr; -if (sizeof ac_aggr.$3) -return 0; +if (sizeof (($2))) + return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - eval "$4=yes" + else - eval "$4=no" + eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -eval ac_res=\$$4 +eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_c_check_member +} # ac_fn_c_check_type # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- @@ -13851,100 +13851,6 @@ fi ## Header files ## -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 -$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } -if ${ac_cv_header_stdbool_h+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #ifndef bool - "error: bool is not defined" - #endif - #ifndef false - "error: false is not defined" - #endif - #if false - "error: false is not 0" - #endif - #ifndef true - "error: true is not defined" - #endif - #if true != 1 - "error: true is not 1" - #endif - #ifndef __bool_true_false_are_defined - "error: __bool_true_false_are_defined is not defined" - #endif - - struct s { _Bool s: 1; _Bool t; } s; - - char a[true == 1 ? 1 : -1]; - char b[false == 0 ? 1 : -1]; - char c[__bool_true_false_are_defined == 1 ? 1 : -1]; - char d[(bool) 0.5 == true ? 1 : -1]; - /* See body of main program for 'e'. */ - char f[(_Bool) 0.0 == false ? 1 : -1]; - char g[true]; - char h[sizeof (_Bool)]; - char i[sizeof s.t]; - enum { j = false, k = true, l = false * true, m = true * 256 }; - /* The following fails for - HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ - _Bool n[m]; - char o[sizeof n == m * sizeof n[0] ? 1 : -1]; - char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; - /* Catch a bug in an HP-UX C compiler. See - http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html - */ - _Bool q = true; - _Bool *pq = &q; - -int -main () -{ - - bool e = &s; - *pq |= q; - *pq |= ! q; - /* Refer to every declared value, to avoid compiler optimizations. */ - return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l - + !m + !n + !o + !p + !q + !pq); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdbool_h=yes -else - ac_cv_header_stdbool_h=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 -$as_echo "$ac_cv_header_stdbool_h" >&6; } - ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" -if test "x$ac_cv_type__Bool" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE__BOOL 1 -_ACEOF - - -fi - - -if test $ac_cv_header_stdbool_h = yes; then - -$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h - -fi - - for ac_header in atomic.h copyfile.h execinfo.h getopt.h ifaddrs.h langinfo.h mbarrier.h poll.h sys/epoll.h sys/event.h sys/ipc.h sys/personality.h sys/prctl.h sys/procctl.h sys/pstat.h sys/resource.h sys/select.h sys/sem.h sys/shm.h sys/signalfd.h sys/sockio.h sys/tas.h sys/uio.h sys/un.h termios.h ucred.h wctype.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` @@ -15816,9 +15722,7 @@ $as_echo_n "checking size of bool... " >&6; } if ${ac_cv_sizeof_bool+:} false; then : $as_echo_n "(cached) " >&6 else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (bool))" "ac_cv_sizeof_bool" "#ifdef HAVE_STDBOOL_H -#include -#endif + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (bool))" "ac_cv_sizeof_bool" "#include "; then : else @@ -15844,7 +15748,7 @@ _ACEOF -if test "$ac_cv_header_stdbool_h" = yes -a "$ac_cv_sizeof_bool" = 1; then +if test "$ac_cv_sizeof_bool" = 1; then $as_echo "#define PG_USE_STDBOOL 1" >>confdefs.h diff --git a/configure.ac b/configure.ac index d6563a194e5..d5def1c2df2 100644 --- a/configure.ac +++ b/configure.ac @@ -1425,8 +1425,6 @@ AC_SUBST(UUID_LIBS) ## Header files ## -AC_HEADER_STDBOOL - AC_CHECK_HEADERS(m4_normalize([ atomic.h copyfile.h @@ -1741,14 +1739,11 @@ if test "$ac_cv_sizeof_off_t" -lt 8 -a "$segsize" != "1"; then AC_MSG_ERROR([Large file support is not enabled. Segment size cannot be larger than 1GB.]) fi -AC_CHECK_SIZEOF([bool], [], -[#ifdef HAVE_STDBOOL_H -#include -#endif]) +AC_CHECK_SIZEOF([bool], [], [#include ]) -dnl We use if we have it and it declares type bool as having -dnl size 1. Otherwise, c.h will fall back to declaring bool as unsigned char. -if test "$ac_cv_header_stdbool_h" = yes -a "$ac_cv_sizeof_bool" = 1; then +dnl We use if bool has size 1 after including it. Otherwise, c.h +dnl will fall back to declaring bool as unsigned char. +if test "$ac_cv_sizeof_bool" = 1; then AC_DEFINE([PG_USE_STDBOOL], 1, [Define to 1 to use to define type bool.]) fi diff --git a/src/include/c.h b/src/include/c.h index dd2e3b0f3e1..cc19c23fb67 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -398,7 +398,7 @@ typedef void (*pg_funcptr_t) (void); * bool * Boolean value, either true or false. * - * We use stdbool.h if available and its bool has size 1. That's useful for + * We use stdbool.h if bool has size 1 after including it. That's useful for * better compiler and debugger output and for compatibility with third-party * libraries. But PostgreSQL currently cannot deal with bool of other sizes; * there are static assertions around the code to prevent that. diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index 99e37318138..d9ef9a41bf2 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -517,9 +517,6 @@ /* Define to 1 if you have the `SSL_CTX_set_num_tickets' function. */ #undef HAVE_SSL_CTX_SET_NUM_TICKETS -/* Define to 1 if stdbool.h conforms to C99. */ -#undef HAVE_STDBOOL_H - /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H @@ -730,9 +727,6 @@ /* Define to 1 if the assembler supports X86_64's POPCNTQ instruction. */ #undef HAVE_X86_64_POPCNTQ -/* Define to 1 if the system has the type `_Bool'. */ -#undef HAVE__BOOL - /* Define to 1 if your compiler understands __builtin_bswap16. */ #undef HAVE__BUILTIN_BSWAP16 diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index 07cc7b7ba2a..f0ce2ac8040 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -365,7 +365,6 @@ sub GenerateFiles HAVE_SPINLOCKS => 1, HAVE_SSL_CTX_SET_NUM_TICKETS => undef, HAVE_SRANDOM => undef, - HAVE_STDBOOL_H => 1, HAVE_STDINT_H => 1, HAVE_STDLIB_H => 1, HAVE_STRCHRNUL => undef, @@ -436,7 +435,6 @@ sub GenerateFiles HAVE_X509_GET_SIGNATURE_NID => 1, HAVE_X509_GET_SIGNATURE_INFO => undef, HAVE_X86_64_POPCNTQ => undef, - HAVE__BOOL => undef, HAVE__BUILTIN_BSWAP16 => undef, HAVE__BUILTIN_BSWAP32 => undef, HAVE__BUILTIN_BSWAP64 => undef, From 17d081a6f9e3d5cbdc53e42ca2ec449d4722d0e2 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 25 Nov 2024 08:03:16 +0100 Subject: [PATCH 07/90] Add support for Tcl 9 Tcl 9 changed several API functions to take Tcl_Size, which is ptrdiff_t, instead of int, for 64-bit enablement. We have to change a few local variables to be compatible with that. We also provide a fallback typedef of Tcl_Size for older Tcl versions. The affected variables are used for quantities that will not approach values beyond the range of int, so this doesn't change any functionality. Reviewed-by: Tristan Partin Discussion: https://www.postgresql.org/message-id/flat/bce0fe54-75b4-438e-b42b-8e84bc7c0e9c%40eisentraut.org --- src/pl/tcl/pltcl.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c index c64448415d9..c4f9c7f840f 100644 --- a/src/pl/tcl/pltcl.c +++ b/src/pl/tcl/pltcl.c @@ -56,6 +56,10 @@ PG_MODULE_MAGIC; #define CONST86 #endif +#if !HAVE_TCL_VERSION(8,7) +typedef int Tcl_Size; +#endif + /* define our text domain for translations */ #undef TEXTDOMAIN #define TEXTDOMAIN PG_TEXTDOMAIN("pltcl") @@ -981,7 +985,7 @@ pltcl_func_handler(PG_FUNCTION_ARGS, pltcl_call_state *call_state, HeapTuple tup; Tcl_Obj *resultObj; Tcl_Obj **resultObjv; - int resultObjc; + Tcl_Size resultObjc; /* * Set up data about result type. XXX it's tempting to consider @@ -1057,7 +1061,7 @@ pltcl_trigger_handler(PG_FUNCTION_ARGS, pltcl_call_state *call_state, int tcl_rc; int i; const char *result; - int result_Objc; + Tcl_Size result_Objc; Tcl_Obj **result_Objv; int rc PG_USED_FOR_ASSERTS_ONLY; @@ -2006,7 +2010,7 @@ pltcl_quote(ClientData cdata, Tcl_Interp *interp, char *tmp; const char *cp1; char *cp2; - int length; + Tcl_Size length; /************************************************************ * Check call syntax @@ -2200,7 +2204,7 @@ pltcl_returnnext(ClientData cdata, Tcl_Interp *interp, if (prodesc->fn_retistuple) { Tcl_Obj **rowObjv; - int rowObjc; + Tcl_Size rowObjc; /* result should be a list, so break it down */ if (Tcl_ListObjGetElements(interp, objv[1], &rowObjc, &rowObjv) == TCL_ERROR) @@ -2540,7 +2544,7 @@ pltcl_SPI_prepare(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { volatile MemoryContext plan_cxt = NULL; - int nargs; + Tcl_Size nargs; Tcl_Obj **argsObj; pltcl_query_desc *qdesc; int i; @@ -2677,7 +2681,7 @@ pltcl_SPI_execute_plan(ClientData cdata, Tcl_Interp *interp, const char *arrayname = NULL; Tcl_Obj *loop_body = NULL; int count = 0; - int callObjc; + Tcl_Size callObjc; Tcl_Obj **callObjv = NULL; Datum *argvalues; MemoryContext oldcontext = CurrentMemoryContext; From 2fc0199a5015b520da75dddb76a169f6a568ef12 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 25 Nov 2024 12:50:17 -0500 Subject: [PATCH 08/90] Update configure probes for CFLAGS needed for ARM CRC instructions. On ARM platforms where the baseline CPU target lacks CRC instructions, we need to supply a -march flag to persuade the compiler to compile such instructions. It turns out that our existing choice of "-march=armv8-a+crc" has not worked for some time, because recent gcc will interpret that as selecting software floating point, and then will spit up if the platform requires hard-float ABI, as most do nowadays. The end result was to silently fall back to software CRC, which isn't very desirable since in practice almost all currently produced ARM chips do have hardware CRC. We can fix this by using "-march=armv8-a+crc+simd" to enable the correct ABI choice. (This has no impact on the code actually generated, since neither of the files we compile with this flag does any floating-point stuff, let alone SIMD.) Keep the test for "-march=armv8-a+crc" since that's required for soft-float ABI, but try that second since most platforms we're likely to build on use hard-float. Since this isn't working as-intended on the last several years' worth of gcc releases, back-patch to all supported branches. Discussion: https://postgr.es/m/4496616.iHFcN1HehY@portable-bastien --- configure | 47 +++++++++++++++++++++++++++++++++++++++++++++-- configure.ac | 8 ++++++-- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/configure b/configure index 1202fc80792..606e3170a71 100755 --- a/configure +++ b/configure @@ -18651,7 +18651,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Check for ARMv8 CRC Extension intrinsics to do CRC calculations. # # First check if __crc32c* intrinsics can be used with the default compiler -# flags. If not, check if adding -march=armv8-a+crc flag helps. +# flags. If not, check if adding "-march=armv8-a+crc+simd" flag helps. +# On systems using soft-float ABI, "-march=armv8-a+crc" is required instead. # CFLAGS_ARMV8_CRC32C is set if the extra flag is required. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __crc32cb, __crc32ch, __crc32cw, and __crc32cd with CFLAGS=" >&5 $as_echo_n "checking for __crc32cb, __crc32ch, __crc32cw, and __crc32cd with CFLAGS=... " >&6; } @@ -18694,7 +18695,48 @@ if test x"$pgac_cv_armv8_crc32c_intrinsics_" = x"yes"; then fi if test x"$pgac_armv8_crc32c_intrinsics" != x"yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __crc32cb, __crc32ch, __crc32cw, and __crc32cd with CFLAGS=-march=armv8-a+crc" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __crc32cb, __crc32ch, __crc32cw, and __crc32cd with CFLAGS=-march=armv8-a+crc+simd" >&5 +$as_echo_n "checking for __crc32cb, __crc32ch, __crc32cw, and __crc32cd with CFLAGS=-march=armv8-a+crc+simd... " >&6; } +if ${pgac_cv_armv8_crc32c_intrinsics__march_armv8_apcrcpsimd+:} false; then : + $as_echo_n "(cached) " >&6 +else + pgac_save_CFLAGS=$CFLAGS +CFLAGS="$pgac_save_CFLAGS -march=armv8-a+crc+simd" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +unsigned int crc = 0; + crc = __crc32cb(crc, 0); + crc = __crc32ch(crc, 0); + crc = __crc32cw(crc, 0); + crc = __crc32cd(crc, 0); + /* return computed value, to prevent the above being optimized away */ + return crc == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + pgac_cv_armv8_crc32c_intrinsics__march_armv8_apcrcpsimd=yes +else + pgac_cv_armv8_crc32c_intrinsics__march_armv8_apcrcpsimd=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +CFLAGS="$pgac_save_CFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_armv8_crc32c_intrinsics__march_armv8_apcrcpsimd" >&5 +$as_echo "$pgac_cv_armv8_crc32c_intrinsics__march_armv8_apcrcpsimd" >&6; } +if test x"$pgac_cv_armv8_crc32c_intrinsics__march_armv8_apcrcpsimd" = x"yes"; then + CFLAGS_ARMV8_CRC32C="-march=armv8-a+crc+simd" + pgac_armv8_crc32c_intrinsics=yes +fi + + if test x"$pgac_armv8_crc32c_intrinsics" != x"yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __crc32cb, __crc32ch, __crc32cw, and __crc32cd with CFLAGS=-march=armv8-a+crc" >&5 $as_echo_n "checking for __crc32cb, __crc32ch, __crc32cw, and __crc32cd with CFLAGS=-march=armv8-a+crc... " >&6; } if ${pgac_cv_armv8_crc32c_intrinsics__march_armv8_apcrc+:} false; then : $as_echo_n "(cached) " >&6 @@ -18734,6 +18776,7 @@ if test x"$pgac_cv_armv8_crc32c_intrinsics__march_armv8_apcrc" = x"yes"; then pgac_armv8_crc32c_intrinsics=yes fi + fi fi diff --git a/configure.ac b/configure.ac index d5def1c2df2..e35d52e9845 100644 --- a/configure.ac +++ b/configure.ac @@ -2166,11 +2166,15 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [ # Check for ARMv8 CRC Extension intrinsics to do CRC calculations. # # First check if __crc32c* intrinsics can be used with the default compiler -# flags. If not, check if adding -march=armv8-a+crc flag helps. +# flags. If not, check if adding "-march=armv8-a+crc+simd" flag helps. +# On systems using soft-float ABI, "-march=armv8-a+crc" is required instead. # CFLAGS_ARMV8_CRC32C is set if the extra flag is required. PGAC_ARMV8_CRC32C_INTRINSICS([]) if test x"$pgac_armv8_crc32c_intrinsics" != x"yes"; then - PGAC_ARMV8_CRC32C_INTRINSICS([-march=armv8-a+crc]) + PGAC_ARMV8_CRC32C_INTRINSICS([-march=armv8-a+crc+simd]) + if test x"$pgac_armv8_crc32c_intrinsics" != x"yes"; then + PGAC_ARMV8_CRC32C_INTRINSICS([-march=armv8-a+crc]) + fi fi AC_SUBST(CFLAGS_ARMV8_CRC32C) From 2690a4f5ddf2974c322f48588ff6877ec2caade2 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Mon, 25 Nov 2024 14:42:35 -0800 Subject: [PATCH 09/90] Avoid "you don't own a lock of type ExclusiveLock" in GRANT TABLESPACE. This WARNING appeared because SearchSysCacheLocked1() read cc_relisshared before catcache initialization, when the field is false unconditionally. On the basis of reading false there, it constructed a locktag as though pg_tablespace weren't relisshared. Only shared catalogs could be affected, and only GRANT TABLESPACE was affected in practice. SearchSysCacheLocked1() callers use one other shared-relation syscache, DATABASEOID. DATABASEOID is initialized by the end of CheckMyDatabase(), making the problem unreachable for pg_database. Back-patch to v13 (all supported versions). This has no known impact before v16, where ExecGrant_common() first appeared. Earlier branches avoid trouble by having a separate ExecGrant_Tablespace() that doesn't use LOCKTAG_TUPLE. However, leaving this unfixed in v15 could ensnare a future back-patch of a SearchSysCacheLocked1() call. Reported by Aya Iwata. Discussion: https://postgr.es/m/OS7PR01MB11964507B5548245A7EE54E70EA212@OS7PR01MB11964.jpnprd01.prod.outlook.com --- src/backend/utils/cache/syscache.c | 15 ++++++++++----- src/test/regress/input/tablespace.source | 6 ++++++ src/test/regress/output/tablespace.source | 5 +++++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/backend/utils/cache/syscache.c b/src/backend/utils/cache/syscache.c index 7d573b6e0ef..b4f45cf4f2d 100644 --- a/src/backend/utils/cache/syscache.c +++ b/src/backend/utils/cache/syscache.c @@ -1196,11 +1196,9 @@ HeapTuple SearchSysCacheLocked1(int cacheId, Datum key1) { + CatCache *cache = SysCache[cacheId]; ItemPointerData tid; LOCKTAG tag; - Oid dboid = - SysCache[cacheId]->cc_relisshared ? InvalidOid : MyDatabaseId; - Oid reloid = cacheinfo[cacheId].reloid; /*---------- * Since inplace updates may happen just before our LockTuple(), we must @@ -1252,8 +1250,15 @@ SearchSysCacheLocked1(int cacheId, tid = tuple->t_self; ReleaseSysCache(tuple); - /* like: LockTuple(rel, &tid, lockmode) */ - SET_LOCKTAG_TUPLE(tag, dboid, reloid, + + /* + * Do like LockTuple(rel, &tid, lockmode). While cc_relisshared won't + * change from one iteration to another, it may have been a temporary + * "false" until our first SearchSysCache1(). + */ + SET_LOCKTAG_TUPLE(tag, + cache->cc_relisshared ? InvalidOid : MyDatabaseId, + cache->cc_reloid, ItemPointerGetBlockNumber(&tid), ItemPointerGetOffsetNumber(&tid)); (void) LockAcquire(&tag, lockmode, false, false); diff --git a/src/test/regress/input/tablespace.source b/src/test/regress/input/tablespace.source index c133e73499f..fd003d805e7 100644 --- a/src/test/regress/input/tablespace.source +++ b/src/test/regress/input/tablespace.source @@ -376,6 +376,12 @@ ALTER INDEX testschema.part_a_idx SET TABLESPACE pg_default; -- Fail, not empty DROP TABLESPACE regress_tblspace; +-- Adequate cache initialization before GRANT +\c - +BEGIN; +GRANT ALL ON TABLESPACE regress_tblspace TO PUBLIC; +ROLLBACK; + CREATE ROLE regress_tablespace_user1 login; CREATE ROLE regress_tablespace_user2 login; GRANT USAGE ON SCHEMA testschema TO regress_tablespace_user2; diff --git a/src/test/regress/output/tablespace.source b/src/test/regress/output/tablespace.source index 1bbe7e03236..1b60b99ff3e 100644 --- a/src/test/regress/output/tablespace.source +++ b/src/test/regress/output/tablespace.source @@ -899,6 +899,11 @@ ALTER INDEX testschema.part_a_idx SET TABLESPACE pg_default; -- Fail, not empty DROP TABLESPACE regress_tblspace; ERROR: tablespace "regress_tblspace" is not empty +-- Adequate cache initialization before GRANT +\c - +BEGIN; +GRANT ALL ON TABLESPACE regress_tblspace TO PUBLIC; +ROLLBACK; CREATE ROLE regress_tablespace_user1 login; CREATE ROLE regress_tablespace_user2 login; GRANT USAGE ON SCHEMA testschema TO regress_tablespace_user2; From a1168855e0df9aabb997ffc26dc8ef6afae2429b Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 25 Nov 2024 18:08:58 -0500 Subject: [PATCH 10/90] Fix NULLIF()'s handling of read-write expanded objects. If passed a read-write expanded object pointer, the EEOP_NULLIF code would hand that same pointer to the equality function and then (unless equality was reported) also return the same pointer as its value. This is no good, because a function that receives a read-write expanded object pointer is fully entitled to scribble on or even delete the object, thus corrupting the NULLIF output. (This problem is likely unobservable with the equality functions provided in core Postgres, but it's easy to demonstrate with one coded in plpgsql.) To fix, make sure the pointer passed to the equality function is read-only. We can still return the original read-write pointer as the NULLIF result, allowing optimization of later operations. Per bug #18722 from Alexander Lakhin. This has been wrong since we invented expanded objects, so back-patch to all supported branches. Discussion: https://postgr.es/m/18722-fd9e645448cc78b4@postgresql.org --- src/backend/executor/execExpr.c | 8 +++++++ src/backend/executor/execExprInterp.c | 14 +++++++++++- src/backend/jit/llvm/llvmjit_expr.c | 33 +++++++++++++++++++++++---- src/include/executor/execExpr.h | 1 + src/test/regress/expected/case.out | 8 +++++++ src/test/regress/sql/case.sql | 5 ++++ 6 files changed, 64 insertions(+), 5 deletions(-) diff --git a/src/backend/executor/execExpr.c b/src/backend/executor/execExpr.c index e6053482834..47f28156d60 100644 --- a/src/backend/executor/execExpr.c +++ b/src/backend/executor/execExpr.c @@ -1169,6 +1169,14 @@ ExecInitExprRec(Expr *node, ExprState *state, op->args, op->opfuncid, op->inputcollid, state); + /* + * If first argument is of varlena type, we'll need to ensure + * that the value passed to the comparison function is a + * read-only pointer. + */ + scratch.d.func.make_ro = + (get_typlen(exprType((Node *) linitial(op->args))) == -1); + /* * Change opcode of call instruction to EEOP_NULLIF. * diff --git a/src/backend/executor/execExprInterp.c b/src/backend/executor/execExprInterp.c index 4b2c48ba602..4b31a85a24d 100644 --- a/src/backend/executor/execExprInterp.c +++ b/src/backend/executor/execExprInterp.c @@ -1271,12 +1271,24 @@ ExecInterpExpr(ExprState *state, ExprContext *econtext, bool *isnull) * The arguments are already evaluated into fcinfo->args. */ FunctionCallInfo fcinfo = op->d.func.fcinfo_data; + Datum save_arg0 = fcinfo->args[0].value; /* if either argument is NULL they can't be equal */ if (!fcinfo->args[0].isnull && !fcinfo->args[1].isnull) { Datum result; + /* + * If first argument is of varlena type, it might be an + * expanded datum. We need to ensure that the value passed to + * the comparison function is a read-only pointer. However, + * if we end by returning the first argument, that will be the + * original read-write pointer if it was read-write. + */ + if (op->d.func.make_ro) + fcinfo->args[0].value = + MakeExpandedObjectReadOnlyInternal(save_arg0); + fcinfo->isnull = false; result = op->d.func.fn_addr(fcinfo); @@ -1291,7 +1303,7 @@ ExecInterpExpr(ExprState *state, ExprContext *econtext, bool *isnull) } /* Arguments aren't equal, so return the first one */ - *op->resvalue = fcinfo->args[0].value; + *op->resvalue = save_arg0; *op->resnull = fcinfo->args[0].isnull; EEO_NEXT(); diff --git a/src/backend/jit/llvm/llvmjit_expr.c b/src/backend/jit/llvm/llvmjit_expr.c index da5f4a205f6..025bdee10c1 100644 --- a/src/backend/jit/llvm/llvmjit_expr.c +++ b/src/backend/jit/llvm/llvmjit_expr.c @@ -1550,6 +1550,9 @@ llvm_compile_expr(ExprState *state) v_fcinfo = l_ptr_const(fcinfo, l_ptr(StructFunctionCallInfoData)); + /* save original arg[0] */ + v_arg0 = l_funcvalue(b, v_fcinfo, 0); + /* if either argument is NULL they can't be equal */ v_argnull0 = l_funcnull(b, v_fcinfo, 0); v_argnull1 = l_funcnull(b, v_fcinfo, 1); @@ -1566,7 +1569,6 @@ llvm_compile_expr(ExprState *state) /* one (or both) of the arguments are null, return arg[0] */ LLVMPositionBuilderAtEnd(b, b_hasnull); - v_arg0 = l_funcvalue(b, v_fcinfo, 0); LLVMBuildStore(b, v_argnull0, v_resnullp); LLVMBuildStore(b, v_arg0, v_resvaluep); LLVMBuildBr(b, opblocks[opno + 1]); @@ -1574,12 +1576,35 @@ llvm_compile_expr(ExprState *state) /* build block to invoke function and check result */ LLVMPositionBuilderAtEnd(b, b_nonull); + /* + * If first argument is of varlena type, it might be an + * expanded datum. We need to ensure that the value + * passed to the comparison function is a read-only + * pointer. However, if we end by returning the first + * argument, that will be the original read-write pointer + * if it was read-write. + */ + if (op->d.func.make_ro) + { + LLVMValueRef v_params[1]; + LLVMValueRef v_arg0_ro; + + v_params[0] = v_arg0; + v_arg0_ro = + l_call(b, + llvm_pg_var_func_type("MakeExpandedObjectReadOnlyInternal"), + llvm_pg_func(mod, "MakeExpandedObjectReadOnlyInternal"), + v_params, lengthof(v_params), ""); + LLVMBuildStore(b, v_arg0_ro, + l_funcvaluep(b, v_fcinfo, 0)); + } + v_retval = BuildV1Call(context, b, mod, fcinfo, &v_fcinfo_isnull); /* - * If result not null, and arguments are equal return null - * (same result as if there'd been NULLs, hence reuse - * b_hasnull). + * If result not null and arguments are equal return null, + * else return arg[0] (same result as if there'd been + * NULLs, hence reuse b_hasnull). */ v_argsequal = LLVMBuildAnd(b, LLVMBuildICmp(b, LLVMIntEQ, diff --git a/src/include/executor/execExpr.h b/src/include/executor/execExpr.h index 785600d04d0..e39b2cbf9e8 100644 --- a/src/include/executor/execExpr.h +++ b/src/include/executor/execExpr.h @@ -345,6 +345,7 @@ typedef struct ExprEvalStep /* faster to access without additional indirection: */ PGFunction fn_addr; /* actual call address */ int nargs; /* number of arguments */ + bool make_ro; /* make arg0 R/O (used only for NULLIF) */ } func; /* for EEOP_BOOL_*_STEP */ diff --git a/src/test/regress/expected/case.out b/src/test/regress/expected/case.out index f5136c17abb..efee7fc4317 100644 --- a/src/test/regress/expected/case.out +++ b/src/test/regress/expected/case.out @@ -397,6 +397,14 @@ SELECT CASE make_ad(1,2) right (1 row) +-- While we're here, also test handling of a NULLIF arg that is a read/write +-- object (bug #18722) +SELECT NULLIF(make_ad(1,2), array[2,3]::arrdomain); + nullif +-------- + {1,2} +(1 row) + ROLLBACK; -- Test interaction of CASE with ArrayCoerceExpr (bug #15471) BEGIN; diff --git a/src/test/regress/sql/case.sql b/src/test/regress/sql/case.sql index 83fe43be6b8..388d4c6f528 100644 --- a/src/test/regress/sql/case.sql +++ b/src/test/regress/sql/case.sql @@ -242,6 +242,11 @@ SELECT CASE make_ad(1,2) WHEN array[1,2]::arrdomain THEN 'right' END; +-- While we're here, also test handling of a NULLIF arg that is a read/write +-- object (bug #18722) + +SELECT NULLIF(make_ad(1,2), array[2,3]::arrdomain); + ROLLBACK; -- Test interaction of CASE with ArrayCoerceExpr (bug #15471) From 2366211949a0122ccadd56a34085478ebcfb2f5e Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 27 Nov 2024 09:31:42 +0900 Subject: [PATCH 11/90] Handle better implicit transaction state of pipeline mode When using a pipeline, a transaction starts from the first command and is committed with a Sync message or when the pipeline ends. Functions like IsInTransactionBlock() or PreventInTransactionBlock() were already able to understand a pipeline as being in a transaction block, but it was not the case of CheckTransactionBlock(). This function is called for example to generate a WARNING for SET LOCAL, complaining that it is used outside of a transaction block. The current state of the code caused multiple problems, like: - SET LOCAL executed at any stage of a pipeline issued a WARNING, even if the command was at least second in line where the pipeline is in a transaction state. - LOCK TABLE failed when invoked at any step of a pipeline, even if it should be able to work within a transaction block. The pipeline protocol assumes that the first command of a pipeline is not part of a transaction block, and that any follow-up commands is considered as within a transaction block. This commit changes the backend so as an implicit transaction block is started each time the first Execute message of a pipeline has finished processing, with this implicit transaction block ended once a sync is processed. The checks based on XACT_FLAGS_PIPELINING in the routines checking if we are in a transaction block are not necessary: it is enough to rely on the existing ones. Some tests are added to pgbench, that can be backpatched down to v17 when \syncpipeline is involved and down to v14 where \startpipeline and \endpipeline are available. This is unfortunately limited regarding the error patterns that can be checked, but it provides coverage for various pipeline combinations to check if these succeed or fail. These tests are able to capture the case of SET LOCAL's WARNING. The author has proposed a different feature to improve the coverage by adding similar meta-commands to psql where error messages could be checked, something more useful for the cases where commands cannot be used in transaction blocks, like REINDEX CONCURRENTLY or VACUUM. This is considered as future work for v18~. Author: Anthonin Bonnefoy Reviewed-by: Jelte Fennema-Nio, Michael Paquier Discussion: https://postgr.es/m/CAO6_XqrWO8uNBQrSu5r6jh+vTGi5Oiyk4y8yXDORdE2jbzw8xw@mail.gmail.com Backpatch-through: 13 --- doc/src/sgml/protocol.sgml | 21 +-- src/backend/access/transam/xact.c | 13 -- src/backend/tcop/postgres.c | 18 +++ src/bin/pgbench/t/001_pgbench_with_server.pl | 155 +++++++++++++++++++ 4 files changed, 184 insertions(+), 23 deletions(-) diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml index eacbd696cdb..c821e28aa54 100644 --- a/doc/src/sgml/protocol.sgml +++ b/doc/src/sgml/protocol.sgml @@ -1088,16 +1088,17 @@ SELCT 1/0; If the client has not issued an explicit BEGIN, - then each Sync ordinarily causes an implicit COMMIT - if the preceding step(s) succeeded, or an - implicit ROLLBACK if they failed. However, there - are a few DDL commands (such as CREATE DATABASE) - that cannot be executed inside a transaction block. If one of - these is executed in a pipeline, it will fail unless it is the first - command in the pipeline. Furthermore, upon success it will force an - immediate commit to preserve database consistency. Thus a Sync - immediately following one of these commands has no effect except to - respond with ReadyForQuery. + then an implicit transaction block is started and each Sync ordinarily + causes an implicit COMMIT if the preceding step(s) + succeeded, or an implicit ROLLBACK if they failed. + This implicit transaction block will only be detected by the server + when the first command ends without a sync. There are a few DDL + commands (such as CREATE DATABASE) that cannot be + executed inside a transaction block. If one of these is executed in a + pipeline, it will fail unless it is the first command after a Sync. + Furthermore, upon success it will force an immediate commit to preserve + database consistency. Thus a Sync immediately following one of these + commands has no effect except to respond with ReadyForQuery. diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index 3f0f711307d..173314897c9 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -3426,16 +3426,6 @@ PreventInTransactionBlock(bool isTopLevel, const char *stmtType) errmsg("%s cannot run inside a subtransaction", stmtType))); - /* - * inside a pipeline that has started an implicit transaction? - */ - if (MyXactFlags & XACT_FLAGS_PIPELINING) - ereport(ERROR, - (errcode(ERRCODE_ACTIVE_SQL_TRANSACTION), - /* translator: %s represents an SQL statement name */ - errmsg("%s cannot be executed within a pipeline", - stmtType))); - /* * inside a function call? */ @@ -3547,9 +3537,6 @@ IsInTransactionBlock(bool isTopLevel) if (IsSubTransaction()) return true; - if (MyXactFlags & XACT_FLAGS_PIPELINING) - return true; - if (!isTopLevel) return true; diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index bd8ad11421a..b7b23a7f1a4 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -2732,6 +2732,17 @@ start_xact_command(void) xact_started = true; } + else if (MyXactFlags & XACT_FLAGS_PIPELINING) + { + /* + * When the first Execute message is completed, following commands + * will be done in an implicit transaction block created via + * pipelining. The transaction state needs to be updated to an + * implicit block if we're not already in a transaction block (like + * one started by an explicit BEGIN). + */ + BeginImplicitTransactionBlock(); + } /* * Start statement timeout if necessary. Note that this'll intentionally @@ -4780,6 +4791,13 @@ PostgresMain(int argc, char *argv[], case 'S': /* sync */ pq_getmsgend(&input_message); + + /* + * If pipelining was used, we may be in an implicit + * transaction block. Close it before calling + * finish_xact_command. + */ + EndImplicitTransactionBlock(); finish_xact_command(); send_ready_for_query = true; break; diff --git a/src/bin/pgbench/t/001_pgbench_with_server.pl b/src/bin/pgbench/t/001_pgbench_with_server.pl index 4f716c6c073..289dc05297a 100644 --- a/src/bin/pgbench/t/001_pgbench_with_server.pl +++ b/src/bin/pgbench/t/001_pgbench_with_server.pl @@ -884,6 +884,161 @@ } }); +# Try SET LOCAL as first pipeline command. This succeeds and the first +# command is not executed inside an implicit transaction block, causing +# a WARNING. +$node->pgbench( + '-t 1 -n -M extended', + 0, + [], + [qr{WARNING: SET LOCAL can only be used in transaction blocks}], + 'SET LOCAL outside implicit transaction block of pipeline', + { + '001_pgbench_pipeline_set_local_1' => q{ +\startpipeline +SET LOCAL statement_timeout='1h'; +\endpipeline +} + }); + +# Try SET LOCAL as second pipeline command. This succeeds and the second +# command does not cause a WARNING to be generated. +$node->pgbench( + '-t 1 -n -M extended', + 0, + [], + [qr{^$}], + 'SET LOCAL inside implicit transaction block of pipeline', + { + '001_pgbench_pipeline_set_local_2' => q{ +\startpipeline +SELECT 1; +SET LOCAL statement_timeout='1h'; +\endpipeline +} + }); + +# Try REINDEX CONCURRENTLY as first pipeline command. This succeeds +# as the first command is outside the implicit transaction block of +# a pipeline. +$node->pgbench( + '-t 1 -n -M extended', + 0, + [], + [], + 'REINDEX CONCURRENTLY outside implicit transaction block of pipeline', + { + '001_pgbench_pipeline_reindex_1' => q{ +\startpipeline +REINDEX TABLE CONCURRENTLY pgbench_accounts; +SELECT 1; +\endpipeline +} + }); + +# Try REINDEX CONCURRENTLY as second pipeline command. This fails +# as the second command is inside an implicit transaction block. +$node->pgbench( + '-t 1 -n -M extended', + 2, + [], + [], + 'error: REINDEX CONCURRENTLY inside implicit transaction block of pipeline', + { + '001_pgbench_pipeline_reindex_2' => q{ +\startpipeline +SELECT 1; +REINDEX TABLE CONCURRENTLY pgbench_accounts; +\endpipeline +} + }); + +# Try VACUUM as first pipeline command. Like REINDEX CONCURRENTLY, this +# succeeds as this is outside the implicit transaction block of a pipeline. +$node->pgbench( + '-t 1 -n -M extended', + 0, + [], + [], + 'VACUUM outside implicit transaction block of pipeline', + { + '001_pgbench_pipeline_vacuum_1' => q{ +\startpipeline +VACUUM pgbench_accounts; +\endpipeline +} + }); + +# Try VACUUM as second pipeline command. This fails, as the second command +# of a pipeline is inside an implicit transaction block. +$node->pgbench( + '-t 1 -n -M extended', + 2, + [], + [], + 'error: VACUUM inside implicit transaction block of pipeline', + { + '001_pgbench_pipeline_vacuum_2' => q{ +\startpipeline +SELECT 1; +VACUUM pgbench_accounts; +\endpipeline +} + }); + +# Try subtransactions in a pipeline. These are forbidden in implicit +# transaction blocks. +$node->pgbench( + '-t 1 -n -M extended', + 2, + [], + [], + 'error: subtransactions not allowed in pipeline', + { + '001_pgbench_pipeline_subtrans' => q{ +\startpipeline +SAVEPOINT a; +SELECT 1; +ROLLBACK TO SAVEPOINT a; +SELECT 2; +\endpipeline +} + }); + +# Try LOCK TABLE as first pipeline command. This fails as LOCK is outside +# an implicit transaction block. +$node->pgbench( + '-t 1 -n -M extended', + 2, + [], + [], + 'error: LOCK TABLE outside implicit transaction block of pipeline', + { + '001_pgbench_pipeline_lock_1' => q{ +\startpipeline +LOCK pgbench_accounts; +SELECT 1; +\endpipeline +} + }); + +# Try LOCK TABLE as second pipeline command. This succeeds as LOCK is inside +# an implicit transaction block. +$node->pgbench( + '-t 1 -n -M extended', + 0, + [], + [], + 'LOCK TABLE inside implicit transaction block of pipeline', + { + '001_pgbench_pipeline_lock_2' => q{ +\startpipeline +SELECT 1; +LOCK pgbench_accounts; +\endpipeline +} + }); + # Working \startpipeline in prepared query mode with serializable $node->pgbench( '-c4 -t 10 -n -M prepared', From 1fd57e5bbf87d1229cf2725f0230755c1d886178 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Wed, 27 Nov 2024 15:43:18 +1300 Subject: [PATCH 12/90] If a C23 compiler is detected, try asking for C17. Branches before 16 can't be compiled with a C23 compiler (see deprecation warnings silenced by commit f9a56e72, and non-back-patchable changes made in 16 by commit 1c27d16e). Test __STDC_VERSION__, and if it's above C17 then try appending -std=gnu17. The test is done with the user's CFLAGS, so an acceptable language version can also be configured manually that way. This is done in branches 15 and older, back to 9.2, per policy of keeping them buildable with modern tools. Discussion: https://postgr.es/m/87o72eo9iu.fsf%40gentoo.org --- configure | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 20 ++++++++++++++ 2 files changed, 97 insertions(+) diff --git a/configure b/configure index 606e3170a71..296abe4deb1 100755 --- a/configure +++ b/configure @@ -5269,6 +5269,83 @@ else BITCODE_CXXFLAGS="-O2 $BITCODE_CXXFLAGS" fi +# We use C constructs that became invalid in C23. Check if the compiler +# reports a standard higher than C17, with the flags selected above (so the +# user can control the language level explicitly to avoid the gcc/clang-only +# fallback logic below if preferred). +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC reports a C standard higher than ISO C17" >&5 +$as_echo_n "checking whether $CC reports a C standard higher than ISO C17... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#if __STDC_VERSION__ > 201710L +choke me +#endif + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + POSTC17=no +else + POSTC17=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${POSTC17}" >&5 +$as_echo "${POSTC17}" >&6; } + +# If a too recent standard was detected with the user's CFLAGS, try asking for +# C17 with GNU extensions explicitly. +if test "$POSTC17" = yes; then + old_CFLAGS="$CFLAGS" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CC} supports -std=gnu17, for CFLAGS" >&5 +$as_echo_n "checking whether ${CC} supports -std=gnu17, for CFLAGS... " >&6; } +if ${pgac_cv_prog_CC_cflags__std_gnu17+:} false; then : + $as_echo_n "(cached) " >&6 +else + pgac_save_CFLAGS=$CFLAGS +pgac_save_CC=$CC +CC=${CC} +CFLAGS="${CFLAGS} -std=gnu17" +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__std_gnu17=yes +else + pgac_cv_prog_CC_cflags__std_gnu17=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__std_gnu17" >&5 +$as_echo "$pgac_cv_prog_CC_cflags__std_gnu17" >&6; } +if test x"$pgac_cv_prog_CC_cflags__std_gnu17" = x"yes"; then + CFLAGS="${CFLAGS} -std=gnu17" +fi + + + if test "$CFLAGS" = "$old_CFLAGS"; then + as_fn_error $? "cannot proceed" "$LINENO" 5 + fi +fi + # C[XX]FLAGS we determined above will be added back at the end user_CFLAGS=$CFLAGS CFLAGS="" diff --git a/configure.ac b/configure.ac index e35d52e9845..cf19f128acc 100644 --- a/configure.ac +++ b/configure.ac @@ -456,6 +456,26 @@ else BITCODE_CXXFLAGS="-O2 $BITCODE_CXXFLAGS" fi +# We use C constructs that became invalid in C23. Check if the compiler +# reports a standard higher than C17, with the flags selected above (so the +# user can control the language level explicitly to avoid the gcc/clang-only +# fallback logic below if preferred). +AC_MSG_CHECKING([whether $CC reports a C standard higher than ISO C17]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [@%:@if __STDC_VERSION__ > 201710L +choke me +@%:@endif])], [POSTC17=no], [POSTC17=yes]) +AC_MSG_RESULT(${POSTC17}) + +# If a too recent standard was detected with the user's CFLAGS, try asking for +# C17 with GNU extensions explicitly. +if test "$POSTC17" = yes; then + old_CFLAGS="$CFLAGS" + PGAC_PROG_CC_CFLAGS_OPT([-std=gnu17]) + if test "$CFLAGS" = "$old_CFLAGS"; then + AC_MSG_ERROR([cannot proceed]) + fi +fi + # C[XX]FLAGS we determined above will be added back at the end user_CFLAGS=$CFLAGS CFLAGS="" From 64c625ccc12d145bc6c638b9a00a88e3adc7900e Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 27 Nov 2024 11:08:12 +0100 Subject: [PATCH 13/90] Exclude LLVM files from whitespace checks Commit 9044fc1d45a added some files from upstream LLVM. These files have different whitespace rules, which make the git whitespace checks powered by gitattributes fail. To fix, add those files to the exclude list. --- .gitattributes | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitattributes b/.gitattributes index f9868677fa2..151a641461a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -26,9 +26,12 @@ src/interfaces/libpq/test/expected.out whitespace=-blank-at-eof # These files are maintained or generated elsewhere. We take them as is. configure -whitespace ppport.h -whitespace +src/backend/jit/llvm/SectionMemoryManager.cpp -whitespace +src/backend/jit/llvm/SectionMemoryManager.LICENSE -whitespace src/backend/regex/COPYRIGHT -whitespace src/backend/regex/re_syntax.n -whitespace src/backend/snowball/libstemmer/*.c -whitespace src/backend/utils/mb/Unicode/*-std.txt -whitespace +src/include/jit/SectionMemoryManager.h -whitespace src/include/snowball/libstemmer/* -whitespace src/timezone/data/* -whitespace From 4c0e70fc30e4800beb89af5dff44ab5f37fe6720 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 27 Nov 2024 11:12:09 +0100 Subject: [PATCH 14/90] Fix typo from commit 9044fc1d45a --- src/tools/pgindent/exclude_file_patterns | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/pgindent/exclude_file_patterns b/src/tools/pgindent/exclude_file_patterns index c6a61be1738..a45110ed805 100644 --- a/src/tools/pgindent/exclude_file_patterns +++ b/src/tools/pgindent/exclude_file_patterns @@ -4,7 +4,7 @@ src/include/storage/s_lock\.h$ src/include/port/atomics/ # -# These contains C++ constructs that confuse pgindent. +# These contain C++ constructs that confuse pgindent. src/include/jit/llvmjit\.h$ src/include/jit/SectionMemoryManager\.h$ # From 0f13e1a78b145935e5a128a44cb828ea24bac72d Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Wed, 27 Nov 2024 23:04:55 +0900 Subject: [PATCH 15/90] pgbench: Ensure previous progress message is fully cleared when updating. During pgbench's table initialization, progress updates could display leftover characters from the previous message if the new message was shorter. This commit resolves the issue by appending spaces to the current message to fully overwrite any remaining characters from the previous line. Back-patch to all the supported versions. Author: Yushi Ogiwara, Tatsuo Ishii, Fujii Masao Reviewed-by: Tatsuo Ishii, Fujii Masao Discussion: https://postgr.es/m/9a9b8b95b6a709877ae48ad5b0c59bb9@oss.nttdata.com --- src/bin/pgbench/pgbench.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index c1d577a959f..c7f8431841a 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -4222,6 +4222,8 @@ initGenerateDataClientSide(PGconn *con) PGresult *res; int i; int64 k; + int chars = 0; + int prev_chars = 0; /* used to track elapsed time and estimate of the remaining time */ pg_time_usec_t start; @@ -4304,10 +4306,10 @@ initGenerateDataClientSide(PGconn *con) double elapsed_sec = PG_TIME_GET_DOUBLE(pg_time_now() - start); double remaining_sec = ((double) scale * naccounts - j) * elapsed_sec / j; - fprintf(stderr, INT64_FORMAT " of " INT64_FORMAT " tuples (%d%%) done (elapsed %.2f s, remaining %.2f s)%c", - j, (int64) naccounts * scale, - (int) (((int64) j * 100) / (naccounts * (int64) scale)), - elapsed_sec, remaining_sec, eol); + chars = fprintf(stderr, INT64_FORMAT " of " INT64_FORMAT " tuples (%d%%) done (elapsed %.2f s, remaining %.2f s)", + j, (int64) naccounts * scale, + (int) (((int64) j * 100) / (naccounts * (int64) scale)), + elapsed_sec, remaining_sec); } /* let's not call the timing for each row, but only each 100 rows */ else if (use_quiet && (j % 100 == 0)) @@ -4318,14 +4320,24 @@ initGenerateDataClientSide(PGconn *con) /* have we reached the next interval (or end)? */ if ((j == scale * naccounts) || (elapsed_sec >= log_interval * LOG_STEP_SECONDS)) { - fprintf(stderr, INT64_FORMAT " of " INT64_FORMAT " tuples (%d%%) done (elapsed %.2f s, remaining %.2f s)%c", - j, (int64) naccounts * scale, - (int) (((int64) j * 100) / (naccounts * (int64) scale)), elapsed_sec, remaining_sec, eol); + chars = fprintf(stderr, INT64_FORMAT " of " INT64_FORMAT " tuples (%d%%) done (elapsed %.2f s, remaining %.2f s)", + j, (int64) naccounts * scale, + (int) (((int64) j * 100) / (naccounts * (int64) scale)), elapsed_sec, remaining_sec); /* skip to the next interval */ log_interval = (int) ceil(elapsed_sec / LOG_STEP_SECONDS); } } + + /* + * If the previous progress message is longer than the current one, + * add spaces to the current line to fully overwrite any remaining + * characters from the previous message. + */ + if (prev_chars > chars) + fprintf(stderr, "%*c", prev_chars - chars, ' '); + fputc(eol, stderr); + prev_chars = chars; } if (eol != '\n') From 3aae60c851badb601df47f46ee459f047c998f59 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 28 Nov 2024 09:43:26 +0900 Subject: [PATCH 16/90] Revert "Handle better implicit transaction state of pipeline mode" This reverts commit d77f91214fb7 on all stable branches, due to concerns regarding the compatility side effects this could create in a minor release. The change still exists on HEAD. Discussion: https://postgr.es/m/CA+TgmoZqRgeFTg4+Yf_CMRRXiHuNz1u6ZC4FvVk+rxw0RmOPnw@mail.gmail.com Backpatch-through: 13 --- doc/src/sgml/protocol.sgml | 21 ++- src/backend/access/transam/xact.c | 13 ++ src/backend/tcop/postgres.c | 18 --- src/bin/pgbench/t/001_pgbench_with_server.pl | 155 ------------------- 4 files changed, 23 insertions(+), 184 deletions(-) diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml index c821e28aa54..eacbd696cdb 100644 --- a/doc/src/sgml/protocol.sgml +++ b/doc/src/sgml/protocol.sgml @@ -1088,17 +1088,16 @@ SELCT 1/0; If the client has not issued an explicit BEGIN, - then an implicit transaction block is started and each Sync ordinarily - causes an implicit COMMIT if the preceding step(s) - succeeded, or an implicit ROLLBACK if they failed. - This implicit transaction block will only be detected by the server - when the first command ends without a sync. There are a few DDL - commands (such as CREATE DATABASE) that cannot be - executed inside a transaction block. If one of these is executed in a - pipeline, it will fail unless it is the first command after a Sync. - Furthermore, upon success it will force an immediate commit to preserve - database consistency. Thus a Sync immediately following one of these - commands has no effect except to respond with ReadyForQuery. + then each Sync ordinarily causes an implicit COMMIT + if the preceding step(s) succeeded, or an + implicit ROLLBACK if they failed. However, there + are a few DDL commands (such as CREATE DATABASE) + that cannot be executed inside a transaction block. If one of + these is executed in a pipeline, it will fail unless it is the first + command in the pipeline. Furthermore, upon success it will force an + immediate commit to preserve database consistency. Thus a Sync + immediately following one of these commands has no effect except to + respond with ReadyForQuery. diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index 173314897c9..3f0f711307d 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -3426,6 +3426,16 @@ PreventInTransactionBlock(bool isTopLevel, const char *stmtType) errmsg("%s cannot run inside a subtransaction", stmtType))); + /* + * inside a pipeline that has started an implicit transaction? + */ + if (MyXactFlags & XACT_FLAGS_PIPELINING) + ereport(ERROR, + (errcode(ERRCODE_ACTIVE_SQL_TRANSACTION), + /* translator: %s represents an SQL statement name */ + errmsg("%s cannot be executed within a pipeline", + stmtType))); + /* * inside a function call? */ @@ -3537,6 +3547,9 @@ IsInTransactionBlock(bool isTopLevel) if (IsSubTransaction()) return true; + if (MyXactFlags & XACT_FLAGS_PIPELINING) + return true; + if (!isTopLevel) return true; diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index b7b23a7f1a4..bd8ad11421a 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -2732,17 +2732,6 @@ start_xact_command(void) xact_started = true; } - else if (MyXactFlags & XACT_FLAGS_PIPELINING) - { - /* - * When the first Execute message is completed, following commands - * will be done in an implicit transaction block created via - * pipelining. The transaction state needs to be updated to an - * implicit block if we're not already in a transaction block (like - * one started by an explicit BEGIN). - */ - BeginImplicitTransactionBlock(); - } /* * Start statement timeout if necessary. Note that this'll intentionally @@ -4791,13 +4780,6 @@ PostgresMain(int argc, char *argv[], case 'S': /* sync */ pq_getmsgend(&input_message); - - /* - * If pipelining was used, we may be in an implicit - * transaction block. Close it before calling - * finish_xact_command. - */ - EndImplicitTransactionBlock(); finish_xact_command(); send_ready_for_query = true; break; diff --git a/src/bin/pgbench/t/001_pgbench_with_server.pl b/src/bin/pgbench/t/001_pgbench_with_server.pl index 289dc05297a..4f716c6c073 100644 --- a/src/bin/pgbench/t/001_pgbench_with_server.pl +++ b/src/bin/pgbench/t/001_pgbench_with_server.pl @@ -884,161 +884,6 @@ } }); -# Try SET LOCAL as first pipeline command. This succeeds and the first -# command is not executed inside an implicit transaction block, causing -# a WARNING. -$node->pgbench( - '-t 1 -n -M extended', - 0, - [], - [qr{WARNING: SET LOCAL can only be used in transaction blocks}], - 'SET LOCAL outside implicit transaction block of pipeline', - { - '001_pgbench_pipeline_set_local_1' => q{ -\startpipeline -SET LOCAL statement_timeout='1h'; -\endpipeline -} - }); - -# Try SET LOCAL as second pipeline command. This succeeds and the second -# command does not cause a WARNING to be generated. -$node->pgbench( - '-t 1 -n -M extended', - 0, - [], - [qr{^$}], - 'SET LOCAL inside implicit transaction block of pipeline', - { - '001_pgbench_pipeline_set_local_2' => q{ -\startpipeline -SELECT 1; -SET LOCAL statement_timeout='1h'; -\endpipeline -} - }); - -# Try REINDEX CONCURRENTLY as first pipeline command. This succeeds -# as the first command is outside the implicit transaction block of -# a pipeline. -$node->pgbench( - '-t 1 -n -M extended', - 0, - [], - [], - 'REINDEX CONCURRENTLY outside implicit transaction block of pipeline', - { - '001_pgbench_pipeline_reindex_1' => q{ -\startpipeline -REINDEX TABLE CONCURRENTLY pgbench_accounts; -SELECT 1; -\endpipeline -} - }); - -# Try REINDEX CONCURRENTLY as second pipeline command. This fails -# as the second command is inside an implicit transaction block. -$node->pgbench( - '-t 1 -n -M extended', - 2, - [], - [], - 'error: REINDEX CONCURRENTLY inside implicit transaction block of pipeline', - { - '001_pgbench_pipeline_reindex_2' => q{ -\startpipeline -SELECT 1; -REINDEX TABLE CONCURRENTLY pgbench_accounts; -\endpipeline -} - }); - -# Try VACUUM as first pipeline command. Like REINDEX CONCURRENTLY, this -# succeeds as this is outside the implicit transaction block of a pipeline. -$node->pgbench( - '-t 1 -n -M extended', - 0, - [], - [], - 'VACUUM outside implicit transaction block of pipeline', - { - '001_pgbench_pipeline_vacuum_1' => q{ -\startpipeline -VACUUM pgbench_accounts; -\endpipeline -} - }); - -# Try VACUUM as second pipeline command. This fails, as the second command -# of a pipeline is inside an implicit transaction block. -$node->pgbench( - '-t 1 -n -M extended', - 2, - [], - [], - 'error: VACUUM inside implicit transaction block of pipeline', - { - '001_pgbench_pipeline_vacuum_2' => q{ -\startpipeline -SELECT 1; -VACUUM pgbench_accounts; -\endpipeline -} - }); - -# Try subtransactions in a pipeline. These are forbidden in implicit -# transaction blocks. -$node->pgbench( - '-t 1 -n -M extended', - 2, - [], - [], - 'error: subtransactions not allowed in pipeline', - { - '001_pgbench_pipeline_subtrans' => q{ -\startpipeline -SAVEPOINT a; -SELECT 1; -ROLLBACK TO SAVEPOINT a; -SELECT 2; -\endpipeline -} - }); - -# Try LOCK TABLE as first pipeline command. This fails as LOCK is outside -# an implicit transaction block. -$node->pgbench( - '-t 1 -n -M extended', - 2, - [], - [], - 'error: LOCK TABLE outside implicit transaction block of pipeline', - { - '001_pgbench_pipeline_lock_1' => q{ -\startpipeline -LOCK pgbench_accounts; -SELECT 1; -\endpipeline -} - }); - -# Try LOCK TABLE as second pipeline command. This succeeds as LOCK is inside -# an implicit transaction block. -$node->pgbench( - '-t 1 -n -M extended', - 0, - [], - [], - 'LOCK TABLE inside implicit transaction block of pipeline', - { - '001_pgbench_pipeline_lock_2' => q{ -\startpipeline -SELECT 1; -LOCK pgbench_accounts; -\endpipeline -} - }); - # Working \startpipeline in prepared query mode with serializable $node->pgbench( '-c4 -t 10 -n -M prepared', From 4112a259021598d1bf5c39456cc6d6238baab065 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Thu, 28 Nov 2024 15:32:57 +1300 Subject: [PATCH 17/90] Skip SectionMemoryManager.h in cpluspluscheck. Commit 9044fc1d45a0 skipped SectionMemoryManager.h in headerscheck, and by extension also cpluspluscheck, because it's C++ and would fail both tests. That worked in master and REL_17_STABLE due to 7b8e2ae2fd3b, but older branches have a separate cpluspluscheck script. We need to copy the filtering rule into there too. This problem was being reported by CI's CompilerWarnings task in the 15 and 16 branches, but was a victim of alert fatigue syndrome (unrelated problems in the back-branches). Fix 16, and back-patch to 13, as those are the live branches that have a separate cpluspluscheck script. --- src/tools/pginclude/cpluspluscheck | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/tools/pginclude/cpluspluscheck b/src/tools/pginclude/cpluspluscheck index f75909d6dc6..a7d5dc48ec3 100755 --- a/src/tools/pginclude/cpluspluscheck +++ b/src/tools/pginclude/cpluspluscheck @@ -124,6 +124,9 @@ do test "$f" = src/pl/plpgsql/src/pl_gram.h && continue test "$f" = src/interfaces/ecpg/preproc/preproc.h && continue + # SectionMemoryManager.h is C++ + test "$f" = src/include/jit/SectionMemoryManager.h && continue + # ppport.h is not under our control, so we can't make it standalone. test "$f" = src/pl/plperl/ppport.h && continue From fa92c18efe24041240eea8045bb5b714f4ee2134 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Fri, 29 Nov 2024 10:58:01 +1300 Subject: [PATCH 18/90] Fix MinGW %d vs %lu warnings in back branches. Commit 352f6f2d used %d instead of %lu to format DWORD (unsigned long) with psprintf(). The _WIN32_WINNT value recently changed for MinGW in REL_15_STABLE (commit d700e8d7), so the code was suddenly being compiled, with warnings from gcc. The warnings were already fixed in 16+ by commits 495ed0ef and a9bc04b2 after the _WIN32_WINNT value was increase there. 14 and 13 didn't warn because they still use a lower value for MinGW, and supported versions of Visual Studio should compile the code in all live branches but don't check our format string. The change doesn't affect the result: sizeof(int) == sizeof(long) on this platform, and the values are computed with expressions that cannot exceed INT_MAX so were never interpreted as negative. Back-patch the formatting change from those commits into 13-15. This should turn CI's 15 branch green again and stop fairywren from warning about that on 15. Reported-by: Andres Freund Reported-by: Peter Eisentraut Discussion: https://postgr.es/m/t2vjrcb3bloxf5qqvxjst6r7lvrefqyecxgt2koy5ho5b5glr2%40yuupmm6whgob --- src/backend/utils/adt/pg_locale.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c index b81b9442d85..bf523c18249 100644 --- a/src/backend/utils/adt/pg_locale.c +++ b/src/backend/utils/adt/pg_locale.c @@ -1718,7 +1718,7 @@ get_collation_actual_version(char collprovider, const char *collcollate) collcollate, GetLastError()))); } - collversion = psprintf("%d.%d,%d.%d", + collversion = psprintf("%lu.%lu,%lu.%lu", (version.dwNLSVersion >> 8) & 0xFFFF, version.dwNLSVersion & 0xFF, (version.dwDefinedVersion >> 8) & 0xFFFF, From 52c7a44e9518b3bbb930184526e0ae4eac412a7b Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 1 Dec 2024 14:15:37 -0500 Subject: [PATCH 19/90] Fix broken list-munging in ecpg's remove_variables(). The loops over cursor argument variables neglected to ever advance "prevvar". The code would accidentally do the right thing anyway when removing the first or second list entry, but if it had to remove the third or later entry then it would also remove all entries between there and the first entry. AFAICS this would only matter for cursors that reference out-of-scope variables, which is a weird Informix compatibility hack; between that and the lack of impact for short lists, it's not so surprising that nobody has complained. Nonetheless it's a pretty obvious bug. It would have been more obvious if these loops used a more standard coding style for chasing the linked lists --- this business with the "prev" pointer sometimes pointing at the current list entry is confusing and overcomplicated. So rather than just add a minimal band-aid, I chose to rewrite the loops in the same style we use elsewhere, where the "prev" pointer is NULL until we are dealing with a non-first entry and we save the "next" pointer at the top of the loop. (Two of the four loops touched here are not actually buggy, but it seems better to make them all look alike.) Coverity discovered this problem, but not until 2b41de4a5 added code to free no-longer-needed arguments structs. With that, the incorrect link updates are possibly touching freed memory, and it complained about that. Nonetheless the list corruption hazard is ancient, so back-patch to all supported branches. --- src/interfaces/ecpg/preproc/variable.c | 67 +++++++++++++------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/src/interfaces/ecpg/preproc/variable.c b/src/interfaces/ecpg/preproc/variable.c index 8926676ab71..510c3ef1b06 100644 --- a/src/interfaces/ecpg/preproc/variable.c +++ b/src/interfaces/ecpg/preproc/variable.c @@ -260,33 +260,28 @@ void remove_typedefs(int brace_level) { struct typedefs *p, - *prev; + *prev, + *next; - for (p = prev = types; p;) + for (p = types, prev = NULL; p; p = next) { + next = p->next; if (p->brace_level >= brace_level) { /* remove it */ - if (p == types) - prev = types = p->next; + if (prev) + prev->next = next; else - prev->next = p->next; + types = next; if (p->type->type_enum == ECPGt_struct || p->type->type_enum == ECPGt_union) free(p->struct_member_list); free(p->type); free(p->name); free(p); - if (prev == types) - p = types; - else - p = prev ? prev->next : NULL; } else - { prev = p; - p = prev->next; - } } } @@ -294,63 +289,67 @@ void remove_variables(int brace_level) { struct variable *p, - *prev; + *prev, + *next; - for (p = prev = allvariables; p;) + for (p = allvariables, prev = NULL; p; p = next) { + next = p->next; if (p->brace_level >= brace_level) { - /* is it still referenced by a cursor? */ + /* remove it, but first remove any references from cursors */ struct cursor *ptr; for (ptr = cur; ptr != NULL; ptr = ptr->next) { struct arguments *varptr, - *prevvar; + *prevvar, + *nextvar; - for (varptr = prevvar = ptr->argsinsert; varptr != NULL; varptr = varptr->next) + for (varptr = ptr->argsinsert, prevvar = NULL; + varptr != NULL; varptr = nextvar) { + nextvar = varptr->next; if (p == varptr->variable) { /* remove from list */ - if (varptr == ptr->argsinsert) - ptr->argsinsert = varptr->next; + if (prevvar) + prevvar->next = nextvar; else - prevvar->next = varptr->next; + ptr->argsinsert = nextvar; } + else + prevvar = varptr; } - for (varptr = prevvar = ptr->argsresult; varptr != NULL; varptr = varptr->next) + for (varptr = ptr->argsresult, prevvar = NULL; + varptr != NULL; varptr = nextvar) { + nextvar = varptr->next; if (p == varptr->variable) { /* remove from list */ - if (varptr == ptr->argsresult) - ptr->argsresult = varptr->next; + if (prevvar) + prevvar->next = nextvar; else - prevvar->next = varptr->next; + ptr->argsresult = nextvar; } + else + prevvar = varptr; } } /* remove it */ - if (p == allvariables) - prev = allvariables = p->next; + if (prev) + prev->next = next; else - prev->next = p->next; + allvariables = next; ECPGfree_type(p->type); free(p->name); free(p); - if (prev == allvariables) - p = allvariables; - else - p = prev ? prev->next : NULL; } else - { prev = p; - p = prev->next; - } } } From 7d0b91a28421a7928fb45e10b31e7f1f81842ba7 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Tue, 3 Dec 2024 09:27:05 +1300 Subject: [PATCH 20/90] RelationTruncate() must set DELAY_CHKPT_START. Previously, it set only DELAY_CHKPT_COMPLETE. That was important, because it meant that if the XLOG_SMGR_TRUNCATE record preceded a XLOG_CHECKPOINT_ONLINE record in the WAL, then the truncation would also happen on disk before the XLOG_CHECKPOINT_ONLINE record was written. However, it didn't guarantee that the sync request for the truncation was processed before the XLOG_CHECKPOINT_ONLINE record was written. By setting DELAY_CHKPT_START, we guarantee that if an XLOG_SMGR_TRUNCATE record is written to WAL before the redo pointer of a concurrent checkpoint, the sync request queued by that operation must be processed by that checkpoint, rather than being left for the following one. This is a refinement of commit 412ad7a5563. Back-patch to all supported releases, like that commit. Author: Robert Haas Reported-by: Thomas Munro Discussion: https://postgr.es/m/CA%2BhUKG%2B-2rjGZC2kwqr2NMLBcEBp4uf59QT1advbWYF_uc%2B0Aw%40mail.gmail.com --- src/backend/catalog/storage.c | 36 +++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/src/backend/catalog/storage.c b/src/backend/catalog/storage.c index 8f74a3efdeb..b8baa3b822d 100644 --- a/src/backend/catalog/storage.c +++ b/src/backend/catalog/storage.c @@ -326,20 +326,35 @@ RelationTruncate(Relation rel, BlockNumber nblocks) RelationPreTruncate(rel); /* - * Make sure that a concurrent checkpoint can't complete while truncation - * is in progress. + * The code which follows can interact with concurrent checkpoints in two + * separate ways. * - * The truncation operation might drop buffers that the checkpoint - * otherwise would have flushed. If it does, then it's essential that - * the files actually get truncated on disk before the checkpoint record - * is written. Otherwise, if reply begins from that checkpoint, the + * First, the truncation operation might drop buffers that the checkpoint + * otherwise would have flushed. If it does, then it's essential that the + * files actually get truncated on disk before the checkpoint record is + * written. Otherwise, if reply begins from that checkpoint, the * to-be-truncated blocks might still exist on disk but have older - * contents than expected, which can cause replay to fail. It's OK for - * the blocks to not exist on disk at all, but not for them to have the - * wrong contents. + * contents than expected, which can cause replay to fail. It's OK for the + * blocks to not exist on disk at all, but not for them to have the wrong + * contents. For this reason, we need to set DELAY_CHKPT_COMPLETE while + * this code executes. + * + * Second, the call to smgrtruncate() below will in turn call + * RegisterSyncRequest(). We need the sync request created by that call to + * be processed before the checkpoint completes. CheckPointGuts() will + * call ProcessSyncRequests(), but if we register our sync request after + * that happens, then the WAL record for the truncation could end up + * preceding the checkpoint record, while the actual sync doesn't happen + * until the next checkpoint. To prevent that, we need to set + * DELAY_CHKPT_START here. That way, if the XLOG_SMGR_TRUNCATE precedes + * the redo pointer of a concurrent checkpoint, we're guaranteed that the + * corresponding sync request will be processed before the checkpoint + * completes. */ + Assert(!MyProc->delayChkpt); + MyProc->delayChkpt = true; /* DELAY_CHKPT_START */ Assert(!MyProc->delayChkptEnd); - MyProc->delayChkptEnd = true; + MyProc->delayChkptEnd = true; /* DELAY_CHKPT_COMPLETE */ /* * We WAL-log the truncation before actually truncating, which means @@ -387,6 +402,7 @@ RelationTruncate(Relation rel, BlockNumber nblocks) smgrtruncate(RelationGetSmgr(rel), forks, nforks, blocks); /* We've done all the critical work, so checkpoints are OK now. */ + MyProc->delayChkpt = false; MyProc->delayChkptEnd = false; /* From d24eb0e91f3f7fc54ed4e56d93b26e2f8d52c1ce Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 5 Dec 2024 12:54:41 -0500 Subject: [PATCH 21/90] Avoid low-probability crash on out-of-memory. check_restrict_nonsystem_relation_kind() correctly uses guc_malloc() in v16 and later. But in older branches it must use malloc() directly, and it forgot to check for failure return. Faulty backpatching of 66e94448a. Karina Litskevich Discussion: https://postgr.es/m/CACiT8iZ=atkguKVbpN4HmJFMb4+T9yEowF5JuPZG8W+kkZ9L6w@mail.gmail.com --- src/backend/tcop/postgres.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index bd8ad11421a..5d699f7ff7c 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -3649,6 +3649,11 @@ check_restrict_nonsystem_relation_kind(char **newval, void **extra, GucSource so /* Save the flags in *extra, for use by the assign function */ *extra = malloc(sizeof(int)); + if (*extra == NULL) + ereport(ERROR, + (errcode(ERRCODE_OUT_OF_MEMORY), + errmsg("out of memory"))); + *((int *) *extra) = flags; return true; From 5882a4ba0917c056d9ca78d61af44708b3e93b4c Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 7 Dec 2024 13:12:32 -0500 Subject: [PATCH 22/90] Fix is_digit labeling of to_timestamp's FFn format codes. These format codes produce or consume strings of digits, so they should be labeled with is_digit = true, but they were not. This has effect in only one place, where is_next_separator() is checked to see if the preceding format code should slurp up all the available digits. Thus, with a format such as '...SSFF3' with remaining input '12345', the 'SS' code would consume all five digits (and then complain about seconds being out of range) when it should eat only two digits. Per report from Nick Davies. This bug goes back to d589f9446 where the FFn codes were introduced, so back-patch to v13. Discussion: https://postgr.es/m/AM8PR08MB6356AC979252CFEA78B56678B6312@AM8PR08MB6356.eurprd08.prod.outlook.com --- src/backend/utils/adt/formatting.c | 26 +++++++++++++------------- src/test/regress/expected/horology.out | 11 +++++++++++ src/test/regress/sql/horology.sql | 1 + 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c index 5bd4d1967b9..9169539b76d 100644 --- a/src/backend/utils/adt/formatting.c +++ b/src/backend/utils/adt/formatting.c @@ -624,7 +624,7 @@ typedef enum DCH_Day, DCH_Dy, DCH_D, - DCH_FF1, + DCH_FF1, /* FFn codes must be consecutive */ DCH_FF2, DCH_FF3, DCH_FF4, @@ -787,12 +787,12 @@ static const KeyWord DCH_keywords[] = { {"Day", 3, DCH_Day, false, FROM_CHAR_DATE_NONE}, {"Dy", 2, DCH_Dy, false, FROM_CHAR_DATE_NONE}, {"D", 1, DCH_D, true, FROM_CHAR_DATE_GREGORIAN}, - {"FF1", 3, DCH_FF1, false, FROM_CHAR_DATE_NONE}, /* F */ - {"FF2", 3, DCH_FF2, false, FROM_CHAR_DATE_NONE}, - {"FF3", 3, DCH_FF3, false, FROM_CHAR_DATE_NONE}, - {"FF4", 3, DCH_FF4, false, FROM_CHAR_DATE_NONE}, - {"FF5", 3, DCH_FF5, false, FROM_CHAR_DATE_NONE}, - {"FF6", 3, DCH_FF6, false, FROM_CHAR_DATE_NONE}, + {"FF1", 3, DCH_FF1, true, FROM_CHAR_DATE_NONE}, /* F */ + {"FF2", 3, DCH_FF2, true, FROM_CHAR_DATE_NONE}, + {"FF3", 3, DCH_FF3, true, FROM_CHAR_DATE_NONE}, + {"FF4", 3, DCH_FF4, true, FROM_CHAR_DATE_NONE}, + {"FF5", 3, DCH_FF5, true, FROM_CHAR_DATE_NONE}, + {"FF6", 3, DCH_FF6, true, FROM_CHAR_DATE_NONE}, {"FX", 2, DCH_FX, false, FROM_CHAR_DATE_NONE}, {"HH24", 4, DCH_HH24, true, FROM_CHAR_DATE_NONE}, /* H */ {"HH12", 4, DCH_HH12, true, FROM_CHAR_DATE_NONE}, @@ -843,12 +843,12 @@ static const KeyWord DCH_keywords[] = { {"dd", 2, DCH_DD, true, FROM_CHAR_DATE_GREGORIAN}, {"dy", 2, DCH_dy, false, FROM_CHAR_DATE_NONE}, {"d", 1, DCH_D, true, FROM_CHAR_DATE_GREGORIAN}, - {"ff1", 3, DCH_FF1, false, FROM_CHAR_DATE_NONE}, /* f */ - {"ff2", 3, DCH_FF2, false, FROM_CHAR_DATE_NONE}, - {"ff3", 3, DCH_FF3, false, FROM_CHAR_DATE_NONE}, - {"ff4", 3, DCH_FF4, false, FROM_CHAR_DATE_NONE}, - {"ff5", 3, DCH_FF5, false, FROM_CHAR_DATE_NONE}, - {"ff6", 3, DCH_FF6, false, FROM_CHAR_DATE_NONE}, + {"ff1", 3, DCH_FF1, true, FROM_CHAR_DATE_NONE}, /* f */ + {"ff2", 3, DCH_FF2, true, FROM_CHAR_DATE_NONE}, + {"ff3", 3, DCH_FF3, true, FROM_CHAR_DATE_NONE}, + {"ff4", 3, DCH_FF4, true, FROM_CHAR_DATE_NONE}, + {"ff5", 3, DCH_FF5, true, FROM_CHAR_DATE_NONE}, + {"ff6", 3, DCH_FF6, true, FROM_CHAR_DATE_NONE}, {"fx", 2, DCH_FX, false, FROM_CHAR_DATE_NONE}, {"hh24", 4, DCH_HH24, true, FROM_CHAR_DATE_NONE}, /* h */ {"hh12", 4, DCH_HH12, true, FROM_CHAR_DATE_NONE}, diff --git a/src/test/regress/expected/horology.out b/src/test/regress/expected/horology.out index e4b57f62159..bbd7e282343 100644 --- a/src/test/regress/expected/horology.out +++ b/src/test/regress/expected/horology.out @@ -2979,6 +2979,17 @@ SELECT i, to_timestamp('2018-11-02 12:34:56.123456', 'YYYY-MM-DD HH24:MI:SS.FF' SELECT i, to_timestamp('2018-11-02 12:34:56.123456789', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i; ERROR: date/time field value out of range: "2018-11-02 12:34:56.123456789" +SELECT i, to_timestamp('20181102123456123456', 'YYYYMMDDHH24MISSFF' || i) FROM generate_series(1, 6) i; + i | to_timestamp +---+------------------------------------- + 1 | Fri Nov 02 12:34:56.1 2018 PDT + 2 | Fri Nov 02 12:34:56.12 2018 PDT + 3 | Fri Nov 02 12:34:56.123 2018 PDT + 4 | Fri Nov 02 12:34:56.1235 2018 PDT + 5 | Fri Nov 02 12:34:56.12346 2018 PDT + 6 | Fri Nov 02 12:34:56.123456 2018 PDT +(6 rows) + SELECT to_date('1 4 1902', 'Q MM YYYY'); -- Q is ignored to_date ------------ diff --git a/src/test/regress/sql/horology.sql b/src/test/regress/sql/horology.sql index 13f86ce8fc0..d3b9f1628a4 100644 --- a/src/test/regress/sql/horology.sql +++ b/src/test/regress/sql/horology.sql @@ -450,6 +450,7 @@ SELECT i, to_timestamp('2018-11-02 12:34:56.1234', 'YYYY-MM-DD HH24:MI:SS.FF' || SELECT i, to_timestamp('2018-11-02 12:34:56.12345', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i; SELECT i, to_timestamp('2018-11-02 12:34:56.123456', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i; SELECT i, to_timestamp('2018-11-02 12:34:56.123456789', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i; +SELECT i, to_timestamp('20181102123456123456', 'YYYYMMDDHH24MISSFF' || i) FROM generate_series(1, 6) i; SELECT to_date('1 4 1902', 'Q MM YYYY'); -- Q is ignored SELECT to_date('3 4 21 01', 'W MM CC YY'); From d9d5e1b48e0db25961e108a13acb616a4911ee29 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 7 Dec 2024 14:28:16 -0500 Subject: [PATCH 23/90] Make getObjectDescription robust against dangling amproc type links. Yoran Heling reported a case where a data type could be dropped while references to its OID remain behind in pg_amproc. This causes getObjectDescription to fail, which blocks dropping the operator family (since our DROP code likes to construct descriptions of everything it's dropping). The proper fix for this requires adding more pg_depend entries. But to allow DROP to go through with already-corrupt catalogs, tweak getObjectDescription to print "???" for the type instead of failing when it processes such an entry. I changed the logic for pg_amop similarly, for consistency, although it is not known that the problem can manifest in pg_amop. Per report from Yoran Heling. Back-patch to all supported branches (although the problem may be unreachable in v13). Discussion: https://postgr.es/m/Z1MVCOh1hprjK5Sf@gmai021 --- src/backend/catalog/objectaddress.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c index deaabaeae9a..3a4e12592ff 100644 --- a/src/backend/catalog/objectaddress.c +++ b/src/backend/catalog/objectaddress.c @@ -3237,6 +3237,12 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok) initStringInfo(&opfam); getOpFamilyDescription(&opfam, amopForm->amopfamily, false); + /* + * We use FORMAT_TYPE_ALLOW_INVALID here so as not to fail + * completely if the type links are dangling, which is a form + * of catalog corruption that could occur due to old bugs. + */ + /*------ translator: %d is the operator strategy (a number), the first two %s's are data type names, the third %s is the @@ -3244,8 +3250,10 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok) textual form of the operator with arguments. */ appendStringInfo(&buffer, _("operator %d (%s, %s) of %s: %s"), amopForm->amopstrategy, - format_type_be(amopForm->amoplefttype), - format_type_be(amopForm->amoprighttype), + format_type_extended(amopForm->amoplefttype, + -1, FORMAT_TYPE_ALLOW_INVALID), + format_type_extended(amopForm->amoprighttype, + -1, FORMAT_TYPE_ALLOW_INVALID), opfam.data, format_operator(amopForm->amopopr)); @@ -3294,6 +3302,12 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok) initStringInfo(&opfam); getOpFamilyDescription(&opfam, amprocForm->amprocfamily, false); + /* + * We use FORMAT_TYPE_ALLOW_INVALID here so as not to fail + * completely if the type links are dangling, which is a form + * of catalog corruption that could occur due to old bugs. + */ + /*------ translator: %d is the function number, the first two %s's are data type names, the third %s is the description of the @@ -3301,8 +3315,10 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok) function with arguments. */ appendStringInfo(&buffer, _("function %d (%s, %s) of %s: %s"), amprocForm->amprocnum, - format_type_be(amprocForm->amproclefttype), - format_type_be(amprocForm->amprocrighttype), + format_type_extended(amprocForm->amproclefttype, + -1, FORMAT_TYPE_ALLOW_INVALID), + format_type_extended(amprocForm->amprocrighttype, + -1, FORMAT_TYPE_ALLOW_INVALID), opfam.data, format_procedure(amprocForm->amproc)); From 1a34cf0f485bcf2d2989a8bf6c7fdf86c6dca1fb Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 7 Dec 2024 15:56:28 -0500 Subject: [PATCH 24/90] Ensure that pg_amop/amproc entries depend on their lefttype/righttype. Usually an entry in pg_amop or pg_amproc does not need a dependency on its amoplefttype/amoprighttype/amproclefttype/amprocrighttype types, because there is an indirect dependency via the argument types of its referenced operator or procedure, or via the opclass it belongs to. However, for some support procedures in some index AMs, the argument types of the support procedure might not mention the column data type at all. Also, the amop/amproc entry might be treated as "loose" in the opfamily, in which case it lacks a dependency on any particular opclass; or it might be a cross-type entry having a reference to a datatype that is not its opclass' opcintype. The upshot of all this is that there are cases where a datatype can be dropped while leaving behind amop/amproc entries that mention it, because there is no path in pg_depend showing that those entries depend on that type. Such entries are harmless in normal activity, because they won't get used, but they cause problems for maintenance actions such as dropping the operator family. They also cause pg_dump to produce bogus output. The previous commit put a band-aid on the DROP OPERATOR FAMILY failure, but a real fix is needed. To fix, add pg_depend entries showing that a pg_amop/pg_amproc entry depends on its lefttype/righttype. To avoid bloating pg_depend too much, skip this if the referenced operator or function has that type as an input type. (I did not bother with considering the possible indirect dependency via the opclass' opcintype; at least in the reported case, that wouldn't help anyway.) Probably, the reason this has escaped notice for so long is that add-on datatypes and relevant opclasses/opfamilies are usually packaged as extensions nowadays, so that there's no way to drop a type without dropping the referencing opclasses/opfamilies too. Still, in the absence of pg_depend entries there's nothing that constrains DROP EXTENSION to drop the opfamily entries before the datatype, so it seems possible for a DROP failure to occur anyway. The specific case that was reported doesn't fail in v13, because v13 prefers to attach the support procedure to the opclass not the opfamily. But it's surely possible to construct other edge cases that do fail in v13, so patch that too. Per report from Yoran Heling. Back-patch to all supported branches. Discussion: https://postgr.es/m/Z1MVCOh1hprjK5Sf@gmai021 --- src/backend/commands/opclasscmds.c | 88 ++++++++++++++++++++++++++++++ src/include/access/amapi.h | 4 ++ 2 files changed, 92 insertions(+) diff --git a/src/backend/commands/opclasscmds.c b/src/backend/commands/opclasscmds.c index 11d152fa3c1..d6baf4cc759 100644 --- a/src/backend/commands/opclasscmds.c +++ b/src/backend/commands/opclasscmds.c @@ -66,6 +66,7 @@ static void storeOperators(List *opfamilyname, Oid amoid, Oid opfamilyoid, List *operators, bool isAdd); static void storeProcedures(List *opfamilyname, Oid amoid, Oid opfamilyoid, List *procedures, bool isAdd); +static bool typeDepNeeded(Oid typid, OpFamilyMember *member); static void dropOperators(List *opfamilyname, Oid amoid, Oid opfamilyoid, List *operators); static void dropProcedures(List *opfamilyname, Oid amoid, Oid opfamilyoid, @@ -1508,6 +1509,29 @@ storeOperators(List *opfamilyname, Oid amoid, Oid opfamilyoid, recordDependencyOn(&myself, &referenced, op->ref_is_hard ? DEPENDENCY_INTERNAL : DEPENDENCY_AUTO); + if (typeDepNeeded(op->lefttype, op)) + { + referenced.classId = TypeRelationId; + referenced.objectId = op->lefttype; + referenced.objectSubId = 0; + + /* see comments in amapi.h about dependency strength */ + recordDependencyOn(&myself, &referenced, + op->ref_is_hard ? DEPENDENCY_NORMAL : DEPENDENCY_AUTO); + } + + if (op->lefttype != op->righttype && + typeDepNeeded(op->righttype, op)) + { + referenced.classId = TypeRelationId; + referenced.objectId = op->righttype; + referenced.objectSubId = 0; + + /* see comments in amapi.h about dependency strength */ + recordDependencyOn(&myself, &referenced, + op->ref_is_hard ? DEPENDENCY_NORMAL : DEPENDENCY_AUTO); + } + /* A search operator also needs a dep on the referenced opfamily */ if (OidIsValid(op->sortfamily)) { @@ -1609,6 +1633,29 @@ storeProcedures(List *opfamilyname, Oid amoid, Oid opfamilyoid, recordDependencyOn(&myself, &referenced, proc->ref_is_hard ? DEPENDENCY_INTERNAL : DEPENDENCY_AUTO); + if (typeDepNeeded(proc->lefttype, proc)) + { + referenced.classId = TypeRelationId; + referenced.objectId = proc->lefttype; + referenced.objectSubId = 0; + + /* see comments in amapi.h about dependency strength */ + recordDependencyOn(&myself, &referenced, + proc->ref_is_hard ? DEPENDENCY_NORMAL : DEPENDENCY_AUTO); + } + + if (proc->lefttype != proc->righttype && + typeDepNeeded(proc->righttype, proc)) + { + referenced.classId = TypeRelationId; + referenced.objectId = proc->righttype; + referenced.objectSubId = 0; + + /* see comments in amapi.h about dependency strength */ + recordDependencyOn(&myself, &referenced, + proc->ref_is_hard ? DEPENDENCY_NORMAL : DEPENDENCY_AUTO); + } + /* Post create hook of access method procedure */ InvokeObjectPostCreateHook(AccessMethodProcedureRelationId, entryoid, 0); @@ -1617,6 +1664,47 @@ storeProcedures(List *opfamilyname, Oid amoid, Oid opfamilyoid, table_close(rel, RowExclusiveLock); } +/* + * Detect whether a pg_amop or pg_amproc entry needs an explicit dependency + * on its lefttype or righttype. + * + * We make such a dependency unless the entry has an indirect dependency + * via its referenced operator or function. That's nearly always true + * for operators, but might well not be true for support functions. + */ +static bool +typeDepNeeded(Oid typid, OpFamilyMember *member) +{ + bool result = true; + + if (member->is_func) + { + Oid *argtypes; + int nargs; + + (void) get_func_signature(member->object, &argtypes, &nargs); + for (int i = 0; i < nargs; i++) + { + if (typid == argtypes[i]) + { + result = false; /* match, no dependency needed */ + break; + } + } + pfree(argtypes); + } + else + { + Oid lefttype, + righttype; + + op_input_types(member->object, &lefttype, &righttype); + if (typid == lefttype || typid == righttype) + result = false; /* match, no dependency needed */ + } + return result; +} + /* * Remove operator entries from an opfamily. diff --git a/src/include/access/amapi.h b/src/include/access/amapi.h index d357ebb5598..0845a7f87f9 100644 --- a/src/include/access/amapi.h +++ b/src/include/access/amapi.h @@ -76,6 +76,10 @@ typedef enum IndexAMProperty * opfamily. This allows ALTER OPERATOR FAMILY DROP, and causes that to * happen automatically if the operator or support func is dropped. This * is the right behavior for inessential ("loose") objects. + * + * We also make dependencies on lefttype/righttype, of the same strength as + * the dependency on the operator or support func, unless these dependencies + * are redundant with the dependency on the operator or support func. */ typedef struct OpFamilyMember { From 8a95ad3b205cfce4441bdb6cae0475e1304cc3a9 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 9 Dec 2024 14:38:19 -0500 Subject: [PATCH 25/90] Simplify executor's determination of whether to use parallelism. Our parallel-mode code only works when we are executing a query in full, so ExecutePlan must disable parallel mode when it is asked to do partial execution. The previous logic for this involved passing down a flag (variously named execute_once or run_once) from callers of ExecutorRun or PortalRun. This is overcomplicated, and unsurprisingly some of the callers didn't get it right, since it requires keeping state that not all of them have handy; not to mention that the requirements for it were undocumented. That led to assertion failures in some corner cases. The only state we really need for this is the existing QueryDesc.already_executed flag, so let's just put all the responsibility in ExecutePlan. (It could have been done in ExecutorRun too, leading to a slightly shorter patch -- but if there's ever more than one caller of ExecutePlan, it seems better to have this logic in the subroutine than the callers.) This makes those ExecutorRun/PortalRun parameters unnecessary. In master it seems okay to just remove them, returning the API for those functions to what it was before parallelism. Such an API break is clearly not okay in stable branches, but for them we can just leave the parameters in place after documenting that they do nothing. Per report from Yugo Nagata, who also reviewed and tested this patch. Back-patch to all supported branches. Discussion: https://postgr.es/m/20241206062549.710dc01cf91224809dd6c0e1@sraoss.co.jp --- src/backend/executor/execMain.c | 47 +++++++++++++++------------------ src/backend/tcop/postgres.c | 4 +-- src/backend/tcop/pquery.c | 13 +++------ src/include/executor/execdesc.h | 2 +- src/include/utils/portal.h | 2 +- 5 files changed, 29 insertions(+), 39 deletions(-) diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index 150d369d055..85d3f05f2b6 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -82,14 +82,12 @@ static void InitPlan(QueryDesc *queryDesc, int eflags); static void CheckValidRowMarkRel(Relation rel, RowMarkType markType); static void ExecPostprocessPlan(EState *estate); static void ExecEndPlan(PlanState *planstate, EState *estate); -static void ExecutePlan(EState *estate, PlanState *planstate, - bool use_parallel_mode, +static void ExecutePlan(QueryDesc *queryDesc, CmdType operation, bool sendTuples, uint64 numberTuples, ScanDirection direction, - DestReceiver *dest, - bool execute_once); + DestReceiver *dest); static bool ExecCheckRTEPerms(RangeTblEntry *rte); static bool ExecCheckRTEPermsModified(Oid relOid, Oid userid, Bitmapset *modifiedCols, @@ -286,6 +284,9 @@ standard_ExecutorStart(QueryDesc *queryDesc, int eflags) * retrieved tuples, not for instance to those inserted/updated/deleted * by a ModifyTable plan node. * + * execute_once is ignored, and is present only to avoid an API break + * in stable branches. + * * There is no return value, but output tuples (if any) are sent to * the destination receiver specified in the QueryDesc; and the number * of tuples processed at the top level can be found in @@ -356,21 +357,12 @@ standard_ExecutorRun(QueryDesc *queryDesc, * run plan */ if (!ScanDirectionIsNoMovement(direction)) - { - if (execute_once && queryDesc->already_executed) - elog(ERROR, "can't re-execute query flagged for single execution"); - queryDesc->already_executed = true; - - ExecutePlan(estate, - queryDesc->planstate, - queryDesc->plannedstmt->parallelModeNeeded, + ExecutePlan(queryDesc, operation, sendTuples, count, direction, - dest, - execute_once); - } + dest); /* * shutdown tuple receiver, if we started it @@ -1506,22 +1498,19 @@ ExecCloseRangeTableRelations(EState *estate) * moving in the specified direction. * * Runs to completion if numberTuples is 0 - * - * Note: the ctid attribute is a 'junk' attribute that is removed before the - * user can see it * ---------------------------------------------------------------- */ static void -ExecutePlan(EState *estate, - PlanState *planstate, - bool use_parallel_mode, +ExecutePlan(QueryDesc *queryDesc, CmdType operation, bool sendTuples, uint64 numberTuples, ScanDirection direction, - DestReceiver *dest, - bool execute_once) + DestReceiver *dest) { + EState *estate = queryDesc->estate; + PlanState *planstate = queryDesc->planstate; + bool use_parallel_mode; TupleTableSlot *slot; uint64 current_tuple_count; @@ -1536,11 +1525,17 @@ ExecutePlan(EState *estate, estate->es_direction = direction; /* - * If the plan might potentially be executed multiple times, we must force - * it to run without parallelism, because we might exit early. + * Set up parallel mode if appropriate. + * + * Parallel mode only supports complete execution of a plan. If we've + * already partially executed it, or if the caller asks us to exit early, + * we must force the plan to run without parallelism. */ - if (!execute_once) + if (queryDesc->already_executed || numberTuples != 0) use_parallel_mode = false; + else + use_parallel_mode = queryDesc->plannedstmt->parallelModeNeeded; + queryDesc->already_executed = true; estate->es_use_parallel_mode = use_parallel_mode; if (use_parallel_mode) diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 5d699f7ff7c..52e6cb638eb 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -1217,7 +1217,7 @@ exec_simple_query(const char *query_string) (void) PortalRun(portal, FETCH_ALL, true, /* always top level */ - true, + true, /* ignored */ receiver, receiver, &qc); @@ -2215,7 +2215,7 @@ exec_execute_message(const char *portal_name, long max_rows) completed = PortalRun(portal, max_rows, true, /* always top level */ - !execute_is_fetch && max_rows == FETCH_ALL, + true, /* ignored */ receiver, receiver, &qc); diff --git a/src/backend/tcop/pquery.c b/src/backend/tcop/pquery.c index 61e18926a5b..500620a22e4 100644 --- a/src/backend/tcop/pquery.c +++ b/src/backend/tcop/pquery.c @@ -667,6 +667,8 @@ PortalSetResultFormat(Portal portal, int nFormats, int16 *formats) * isTopLevel: true if query is being executed at backend "top level" * (that is, directly from a client command message) * + * run_once: ignored, present only to avoid an API break in stable branches. + * * dest: where to send output of primary (canSetTag) query * * altdest: where to send output of non-primary queries @@ -711,10 +713,6 @@ PortalRun(Portal portal, long count, bool isTopLevel, bool run_once, */ MarkPortalActive(portal); - /* Set run_once flag. Shouldn't be clear if previously set. */ - Assert(!portal->run_once || run_once); - portal->run_once = run_once; - /* * Set up global portal context pointers. * @@ -919,7 +917,7 @@ PortalRunSelect(Portal portal, { PushActiveSnapshot(queryDesc->snapshot); ExecutorRun(queryDesc, direction, (uint64) count, - portal->run_once); + false); nprocessed = queryDesc->estate->es_processed; PopActiveSnapshot(); } @@ -959,7 +957,7 @@ PortalRunSelect(Portal portal, { PushActiveSnapshot(queryDesc->snapshot); ExecutorRun(queryDesc, direction, (uint64) count, - portal->run_once); + false); nprocessed = queryDesc->estate->es_processed; PopActiveSnapshot(); } @@ -1403,9 +1401,6 @@ PortalRunFetch(Portal portal, */ MarkPortalActive(portal); - /* If supporting FETCH, portal can't be run-once. */ - Assert(!portal->run_once); - /* * Set up global portal context pointers. */ diff --git a/src/include/executor/execdesc.h b/src/include/executor/execdesc.h index 017ad871175..5d91f97ef79 100644 --- a/src/include/executor/execdesc.h +++ b/src/include/executor/execdesc.h @@ -48,7 +48,7 @@ typedef struct QueryDesc EState *estate; /* executor's query-wide state */ PlanState *planstate; /* tree of per-plan-node state */ - /* This field is set by ExecutorRun */ + /* This field is set by ExecutePlan */ bool already_executed; /* true if previously executed */ /* This is always set NULL by the core system, but plugins can change it */ diff --git a/src/include/utils/portal.h b/src/include/utils/portal.h index 5516084afaa..77e0dc84f91 100644 --- a/src/include/utils/portal.h +++ b/src/include/utils/portal.h @@ -144,7 +144,7 @@ typedef struct PortalData /* Features/options */ PortalStrategy strategy; /* see above */ int cursorOptions; /* DECLARE CURSOR option bits */ - bool run_once; /* portal will only be run once */ + bool run_once; /* unused */ /* Status data */ PortalStatus status; /* see above */ From 4922ede979947bc2404e8675435184e61a57a530 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Tue, 10 Dec 2024 09:26:34 +1300 Subject: [PATCH 26/90] Doc: fix incorrect EXPLAIN ANALYZE output for bloom indexes It looks like the example case was once modified to increase the number of rows but the EXPLAIN ANALYZE output wasn't updated to reflect that. Also adjust the text which discusses the index sizes. With the example table size, the bloom index isn't quite 8 times more space efficient than the btree indexes. Discussion: https://postgr.es/m/CAApHDvovx8kQ0=HTt85gFDAwmTJHpCgiSvRmQZ_6u_g-vQYM_w@mail.gmail.com Backpatch-through: 13, all supported versions --- doc/src/sgml/bloom.sgml | 50 ++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/doc/src/sgml/bloom.sgml b/doc/src/sgml/bloom.sgml index d1cf9ac24a7..8a8bd45b060 100644 --- a/doc/src/sgml/bloom.sgml +++ b/doc/src/sgml/bloom.sgml @@ -116,13 +116,13 @@ SELECT 10000000 A sequential scan over this large table takes a long time: =# EXPLAIN ANALYZE SELECT * FROM tbloom WHERE i2 = 898732 AND i5 = 123451; - QUERY PLAN + QUERY PLAN -------------------------------------------------------------------&zwsp;----------------------------------- - Seq Scan on tbloom (cost=0.00..2137.14 rows=3 width=24) (actual time=16.971..16.971 rows=0 loops=1) + Seq Scan on tbloom (cost=0.00..213744.00 rows=250 width=24) (actual time=357.059..357.059 rows=0 loops=1) Filter: ((i2 = 898732) AND (i5 = 123451)) - Rows Removed by Filter: 100000 + Rows Removed by Filter: 10000000 Planning Time: 0.346 ms - Execution Time: 16.988 ms + Execution Time: 357.076 ms (5 rows) @@ -136,16 +136,16 @@ CREATE INDEX =# SELECT pg_size_pretty(pg_relation_size('btreeidx')); pg_size_pretty ---------------- - 3976 kB + 386 MB (1 row) =# EXPLAIN ANALYZE SELECT * FROM tbloom WHERE i2 = 898732 AND i5 = 123451; - QUERY PLAN + QUERY PLAN -------------------------------------------------------------------&zwsp;----------------------------------- - Seq Scan on tbloom (cost=0.00..2137.00 rows=2 width=24) (actual time=12.805..12.805 rows=0 loops=1) + Seq Scan on tbloom (cost=0.00..213744.00 rows=2 width=24) (actual time=351.016..351.017 rows=0 loops=1) Filter: ((i2 = 898732) AND (i5 = 123451)) - Rows Removed by Filter: 100000 + Rows Removed by Filter: 10000000 Planning Time: 0.138 ms - Execution Time: 12.817 ms + Execution Time: 351.035 ms (5 rows) @@ -159,19 +159,19 @@ CREATE INDEX =# SELECT pg_size_pretty(pg_relation_size('bloomidx')); pg_size_pretty ---------------- - 1584 kB + 153 MB (1 row) =# EXPLAIN ANALYZE SELECT * FROM tbloom WHERE i2 = 898732 AND i5 = 123451; - QUERY PLAN + QUERY PLAN -------------------------------------------------------------------&zwsp;-------------------------------------------------- - Bitmap Heap Scan on tbloom (cost=1792.00..1799.69 rows=2 width=24) (actual time=0.388..0.388 rows=0 loops=1) + Bitmap Heap Scan on tbloom (cost=1792.00..1799.69 rows=2 width=24) (actual time=22.605..22.606 rows=0 loops=1) Recheck Cond: ((i2 = 898732) AND (i5 = 123451)) - Rows Removed by Index Recheck: 29 - Heap Blocks: exact=28 - -> Bitmap Index Scan on bloomidx (cost=0.00..1792.00 rows=2 width=0) (actual time=0.356..0.356 rows=29 loops=1) + Rows Removed by Index Recheck: 2300 + Heap Blocks: exact=2256 + -> Bitmap Index Scan on bloomidx (cost=0.00..178436.00 rows=1 width=0) (actual time=20.005..20.005 rows=2300 loops=1) Index Cond: ((i2 = 898732) AND (i5 = 123451)) Planning Time: 0.099 ms - Execution Time: 0.408 ms + Execution Time: 22.632 ms (8 rows) @@ -195,23 +195,23 @@ CREATE INDEX =# CREATE INDEX btreeidx6 ON tbloom (i6); CREATE INDEX =# EXPLAIN ANALYZE SELECT * FROM tbloom WHERE i2 = 898732 AND i5 = 123451; - QUERY PLAN + QUERY PLAN -------------------------------------------------------------------&zwsp;-------------------------------------------------------- - Bitmap Heap Scan on tbloom (cost=24.34..32.03 rows=2 width=24) (actual time=0.028..0.029 rows=0 loops=1) + Bitmap Heap Scan on tbloom (cost=9.29..13.30 rows=1 width=24) (actual time=0.032..0.033 rows=0 loops=1) Recheck Cond: ((i5 = 123451) AND (i2 = 898732)) - -> BitmapAnd (cost=24.34..24.34 rows=2 width=0) (actual time=0.027..0.027 rows=0 loops=1) - -> Bitmap Index Scan on btreeidx5 (cost=0.00..12.04 rows=500 width=0) (actual time=0.026..0.026 rows=0 loops=1) + -> BitmapAnd (cost=9.29..9.29 rows=1 width=0) (actual time=0.047..0.047 rows=0 loops=1) + -> Bitmap Index Scan on btreeidx5 (cost=0.00..4.52 rows=11 width=0) (actual time=0.026..0.026 rows=7 loops=1) Index Cond: (i5 = 123451) - -> Bitmap Index Scan on btreeidx2 (cost=0.00..12.04 rows=500 width=0) (never executed) + -> Bitmap Index Scan on btreeidx2 (cost=0.00..4.52 rows=11 width=0) (actual time=0.007..0.007 rows=8 loops=1) Index Cond: (i2 = 898732) - Planning Time: 0.491 ms - Execution Time: 0.055 ms + Planning Time: 0.264 ms + Execution Time: 0.047 ms (9 rows) Although this query runs much faster than with either of the single indexes, we pay a penalty in index size. Each of the single-column - btree indexes occupies 2 MB, so the total space needed is 12 MB, - eight times the space used by the bloom index. + btree indexes occupies 88.5 MB, so the total space needed is 531 MB, + over three times the space used by the bloom index. From 315264d70128445fd53de199e16bb8aa562cf36f Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Tue, 10 Dec 2024 13:51:59 -0800 Subject: [PATCH 27/90] Fix elog(FATAL) before PostmasterMain() or just after fork(). Since commit 97550c0711972a9856b5db751539bbaf2f88884c, these failed with "PANIC: proc_exit() called in child process" due to uninitialized or stale MyProcPid. That was reachable if close() failed in ClosePostmasterPorts() or setlocale(category, "C") failed, both unlikely. Back-patch to v13 (all supported versions). Discussion: https://postgr.es/m/20241208034614.45.nmisch@google.com --- src/backend/main/main.c | 2 ++ src/backend/postmaster/fork_process.c | 2 ++ src/backend/postmaster/postmaster.c | 3 +-- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/backend/main/main.c b/src/backend/main/main.c index 350ef5b7d95..54fbb8492e0 100644 --- a/src/backend/main/main.c +++ b/src/backend/main/main.c @@ -33,6 +33,7 @@ #include "bootstrap/bootstrap.h" #include "common/username.h" +#include "miscadmin.h" #include "port/atomics.h" #include "postmaster/postmaster.h" #include "storage/spin.h" @@ -95,6 +96,7 @@ main(int argc, char *argv[]) * localization of messages may not work right away, and messages won't go * anywhere but stderr until GUC settings get loaded. */ + MyProcPid = getpid(); MemoryContextInit(); /* diff --git a/src/backend/postmaster/fork_process.c b/src/backend/postmaster/fork_process.c index 62d068bc1e2..e4b938ca1f7 100644 --- a/src/backend/postmaster/fork_process.c +++ b/src/backend/postmaster/fork_process.c @@ -17,6 +17,7 @@ #include #include +#include "miscadmin.h" #include "postmaster/fork_process.h" #ifndef WIN32 @@ -60,6 +61,7 @@ fork_process(void) if (result == 0) { /* fork succeeded, in child */ + MyProcPid = getpid(); #ifdef LINUX_PROFILE setitimer(ITIMER_PROF, &prof_itimer, NULL); #endif diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 0a4533251ba..82a8d4a6c39 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -2646,7 +2646,7 @@ ClosePostmasterPorts(bool am_syslogger) /* - * InitProcessGlobals -- set MyProcPid, MyStartTime[stamp], random seeds + * InitProcessGlobals -- set MyStartTime[stamp], random seeds * * Called early in the postmaster and every backend. */ @@ -2655,7 +2655,6 @@ InitProcessGlobals(void) { unsigned int rseed; - MyProcPid = getpid(); MyStartTimestamp = GetCurrentTimestamp(); MyStartTime = timestamptz_to_time_t(MyStartTimestamp); From 4abf615cc8a8ca80430b5a0bfa18be6efcea96b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Herrera?= Date: Thu, 12 Dec 2024 16:21:18 +0100 Subject: [PATCH 28/90] Backpatch critical performance fixes to pgarch.c This backpatches commits beb4e9ba1652 and 1fb17b190341 (originally appearing in previously in REL_15_STABLE) to REL_14_STABLE. Performance of the WAL archiver can become pretty critical at times, and reports exist of users getting in serious trouble (hours of downtime, loss of replicas) because of lack of this optimization. We'd like to backpatch these to REL_13_STABLE too, but because of the very invasive changes made by commit d75288fb27b8 in the 14 timeframe, we deem it too risky :-( Original commit messages appear below. Discussion: https://postgr.es/m/202411131605.m66syq5i5ucl@alvherre.pgsql commit beb4e9ba1652a04f66ff20261444d06f678c0b2d Author: Robert Haas AuthorDate: Thu Nov 11 15:02:53 2021 -0500 Improve performance of pgarch_readyXlog() with many status files. Presently, the archive_status directory was scanned for each file to archive. When there are many status files, say because archive_command has been failing for a long time, these directory scans can get very slow. With this change, the archiver remembers several files to archive during each directory scan, speeding things up. To ensure timeline history files are archived as quickly as possible, XLogArchiveNotify() forces the archiver to do a new directory scan as soon as the .ready file for one is created. Nathan Bossart, per a long discussion involving many people. It is not clear to me exactly who out of all those people reviewed this particular patch. Discussion: http://postgr.es/m/CA+TgmobhAbs2yabTuTRkJTq_kkC80-+jw=pfpypdOJ7+gAbQbw@mail.gmail.com Discussion: http://postgr.es/m/620F3CE1-0255-4D66-9D87-0EADE866985A@amazon.com commit 1fb17b1903414676bd371068739549cd2966fe87 Author: Tom Lane AuthorDate: Wed Dec 29 17:02:50 2021 -0500 Fix issues in pgarch's new directory-scanning logic. The arch_filenames[] array elements were one byte too small, so that a maximum-length filename would get corrupted if another entry were made after it. (Noted by Thomas Munro, fix by Nathan Bossart.) Move these arrays into a palloc'd struct, so that we aren't wasting a few kilobytes of static data in each non-archiver process. Add a binaryheap_reset() call to make it plain that we start the directory scan with an empty heap. I don't think there's any live bug of that sort, but it seems fragile, and this is very cheap insurance. Cleanup for commit beb4e9ba1, so no back-patch needed. Discussion: https://postgr.es/m/CA+hUKGLHAjHuKuwtzsW7uMJF4BVPcQRL-UMZG_HM-g0y7yLkUg@mail.gmail.com --- src/backend/access/transam/xlogarchive.c | 14 ++ src/backend/postmaster/pgarch.c | 208 ++++++++++++++++++++--- src/include/postmaster/pgarch.h | 1 + 3 files changed, 197 insertions(+), 26 deletions(-) diff --git a/src/backend/access/transam/xlogarchive.c b/src/backend/access/transam/xlogarchive.c index 26b023e754b..99ee995c214 100644 --- a/src/backend/access/transam/xlogarchive.c +++ b/src/backend/access/transam/xlogarchive.c @@ -489,6 +489,20 @@ XLogArchiveNotify(const char *xlog) return; } + /* + * Timeline history files are given the highest archival priority to lower + * the chance that a promoted standby will choose a timeline that is + * already in use. However, the archiver ordinarily tries to gather + * multiple files to archive from each scan of the archive_status + * directory, which means that newly created timeline history files could + * be left unarchived for a while. To ensure that the archiver picks up + * timeline history files as soon as possible, we force the archiver to + * scan the archive_status directory the next time it looks for a file to + * archive. + */ + if (IsTLHistoryFileName(xlog)) + PgArchForceDirScan(); + /* Notify archiver that it's got something to do */ if (IsUnderPostmaster) PgArchWakeup(); diff --git a/src/backend/postmaster/pgarch.c b/src/backend/postmaster/pgarch.c index 74a7d7c4d0a..6b99be85a96 100644 --- a/src/backend/postmaster/pgarch.c +++ b/src/backend/postmaster/pgarch.c @@ -35,6 +35,7 @@ #include "access/xlog.h" #include "access/xlog_internal.h" +#include "lib/binaryheap.h" #include "libpq/pqsignal.h" #include "miscadmin.h" #include "pgstat.h" @@ -47,6 +48,7 @@ #include "storage/proc.h" #include "storage/procsignal.h" #include "storage/shmem.h" +#include "storage/spin.h" #include "utils/guc.h" #include "utils/ps_status.h" @@ -72,10 +74,22 @@ */ #define NUM_ORPHAN_CLEANUP_RETRIES 3 +/* + * Maximum number of .ready files to gather per directory scan. + */ +#define NUM_FILES_PER_DIRECTORY_SCAN 64 + /* Shared memory area for archiver process */ typedef struct PgArchData { int pgprocno; /* pgprocno of archiver process */ + + /* + * Forces a directory scan in pgarch_readyXlog(). Protected by arch_lck. + */ + bool force_dir_scan; + + slock_t arch_lck; } PgArchData; @@ -86,6 +100,31 @@ typedef struct PgArchData static time_t last_sigterm_time = 0; static PgArchData *PgArch = NULL; +/* + * Stuff for tracking multiple files to archive from each scan of + * archive_status. Minimizing the number of directory scans when there are + * many files to archive can significantly improve archival rate. + * + * arch_heap is a max-heap that is used during the directory scan to track + * the highest-priority files to archive. After the directory scan + * completes, the file names are stored in ascending order of priority in + * arch_files. pgarch_readyXlog() returns files from arch_files until it + * is empty, at which point another directory scan must be performed. + * + * We only need this data in the archiver process, so make it a palloc'd + * struct rather than a bunch of static arrays. + */ +struct arch_files_state +{ + binaryheap *arch_heap; + int arch_files_size; /* number of live entries in arch_files[] */ + char *arch_files[NUM_FILES_PER_DIRECTORY_SCAN]; + /* buffers underlying heap, and later arch_files[], entries: */ + char arch_filenames[NUM_FILES_PER_DIRECTORY_SCAN][MAX_XFN_CHARS + 1]; +}; + +static struct arch_files_state *arch_files = NULL; + /* * Flags set by interrupt handlers for later service in the main loop. */ @@ -103,6 +142,7 @@ static bool pgarch_readyXlog(char *xlog); static void pgarch_archiveDone(char *xlog); static void pgarch_die(int code, Datum arg); static void HandlePgArchInterrupts(void); +static int ready_file_comparator(Datum a, Datum b, void *arg); /* Report shared memory space needed by PgArchShmemInit */ Size @@ -129,6 +169,7 @@ PgArchShmemInit(void) /* First time through, so initialize */ MemSet(PgArch, 0, PgArchShmemSize()); PgArch->pgprocno = INVALID_PGPROCNO; + SpinLockInit(&PgArch->arch_lck); } } @@ -198,6 +239,14 @@ PgArchiverMain(void) */ PgArch->pgprocno = MyProc->pgprocno; + /* Create workspace for pgarch_readyXlog() */ + arch_files = palloc(sizeof(struct arch_files_state)); + arch_files->arch_files_size = 0; + + /* Initialize our max-heap for prioritizing files to archive. */ + arch_files->arch_heap = binaryheap_allocate(NUM_FILES_PER_DIRECTORY_SCAN, + ready_file_comparator, NULL); + pgarch_MainLoop(); proc_exit(0); @@ -325,6 +374,9 @@ pgarch_ArchiverCopyLoop(void) { char xlog[MAX_XFN_CHARS + 1]; + /* force directory scan in the first call to pgarch_readyXlog() */ + arch_files->arch_files_size = 0; + /* * loop through all xlogs with archive_status of .ready and archive * them...mostly we expect this to be a single file, though it is possible @@ -600,18 +652,57 @@ pgarch_archiveXlog(char *xlog) static bool pgarch_readyXlog(char *xlog) { - /* - * open xlog status directory and read through list of xlogs that have the - * .ready suffix, looking for earliest file. It is possible to optimise - * this code, though only a single file is expected on the vast majority - * of calls, so.... - */ char XLogArchiveStatusDir[MAXPGPATH]; DIR *rldir; struct dirent *rlde; - bool found = false; - bool historyFound = false; + bool force_dir_scan; + + /* + * If a directory scan was requested, clear the stored file names and + * proceed. + */ + SpinLockAcquire(&PgArch->arch_lck); + force_dir_scan = PgArch->force_dir_scan; + PgArch->force_dir_scan = false; + SpinLockRelease(&PgArch->arch_lck); + + if (force_dir_scan) + arch_files->arch_files_size = 0; + + /* + * If we still have stored file names from the previous directory scan, + * try to return one of those. We check to make sure the status file is + * still present, as the archive_command for a previous file may have + * already marked it done. + */ + while (arch_files->arch_files_size > 0) + { + struct stat st; + char status_file[MAXPGPATH]; + char *arch_file; + + arch_files->arch_files_size--; + arch_file = arch_files->arch_files[arch_files->arch_files_size]; + StatusFilePath(status_file, arch_file, ".ready"); + + if (stat(status_file, &st) == 0) + { + strcpy(xlog, arch_file); + return true; + } + else if (errno != ENOENT) + ereport(ERROR, + (errcode_for_file_access(), + errmsg("could not stat file \"%s\": %m", status_file))); + } + /* arch_heap is probably empty, but let's make sure */ + binaryheap_reset(arch_files->arch_heap); + + /* + * Open the archive status directory and read through the list of files + * with the .ready suffix, looking for the earliest files. + */ snprintf(XLogArchiveStatusDir, MAXPGPATH, XLOGDIR "/archive_status"); rldir = AllocateDir(XLogArchiveStatusDir); @@ -619,7 +710,7 @@ pgarch_readyXlog(char *xlog) { int basenamelen = (int) strlen(rlde->d_name) - 6; char basename[MAX_XFN_CHARS + 1]; - bool ishistory; + char *arch_file; /* Ignore entries with unexpected number of characters */ if (basenamelen < MIN_XFN_CHARS || @@ -638,32 +729,97 @@ pgarch_readyXlog(char *xlog) memcpy(basename, rlde->d_name, basenamelen); basename[basenamelen] = '\0'; - /* Is this a history file? */ - ishistory = IsTLHistoryFileName(basename); - /* - * Consume the file to archive. History files have the highest - * priority. If this is the first file or the first history file - * ever, copy it. In the presence of a history file already chosen as - * target, ignore all other files except history files which have been - * generated for an older timeline than what is already chosen as - * target to archive. + * Store the file in our max-heap if it has a high enough priority. */ - if (!found || (ishistory && !historyFound)) + if (arch_files->arch_heap->bh_size < NUM_FILES_PER_DIRECTORY_SCAN) { - strcpy(xlog, basename); - found = true; - historyFound = ishistory; + /* If the heap isn't full yet, quickly add it. */ + arch_file = arch_files->arch_filenames[arch_files->arch_heap->bh_size]; + strcpy(arch_file, basename); + binaryheap_add_unordered(arch_files->arch_heap, CStringGetDatum(arch_file)); + + /* If we just filled the heap, make it a valid one. */ + if (arch_files->arch_heap->bh_size == NUM_FILES_PER_DIRECTORY_SCAN) + binaryheap_build(arch_files->arch_heap); } - else if (ishistory || !historyFound) + else if (ready_file_comparator(binaryheap_first(arch_files->arch_heap), + CStringGetDatum(basename), NULL) > 0) { - if (strcmp(basename, xlog) < 0) - strcpy(xlog, basename); + /* + * Remove the lowest priority file and add the current one to the + * heap. + */ + arch_file = DatumGetCString(binaryheap_remove_first(arch_files->arch_heap)); + strcpy(arch_file, basename); + binaryheap_add(arch_files->arch_heap, CStringGetDatum(arch_file)); } } FreeDir(rldir); - return found; + /* If no files were found, simply return. */ + if (arch_files->arch_heap->bh_size == 0) + return false; + + /* + * If we didn't fill the heap, we didn't make it a valid one. Do that + * now. + */ + if (arch_files->arch_heap->bh_size < NUM_FILES_PER_DIRECTORY_SCAN) + binaryheap_build(arch_files->arch_heap); + + /* + * Fill arch_files array with the files to archive in ascending order of + * priority. + */ + arch_files->arch_files_size = arch_files->arch_heap->bh_size; + for (int i = 0; i < arch_files->arch_files_size; i++) + arch_files->arch_files[i] = DatumGetCString(binaryheap_remove_first(arch_files->arch_heap)); + + /* Return the highest priority file. */ + arch_files->arch_files_size--; + strcpy(xlog, arch_files->arch_files[arch_files->arch_files_size]); + + return true; +} + +/* + * ready_file_comparator + * + * Compares the archival priority of the given files to archive. If "a" + * has a higher priority than "b", a negative value will be returned. If + * "b" has a higher priority than "a", a positive value will be returned. + * If "a" and "b" have equivalent values, 0 will be returned. + */ +static int +ready_file_comparator(Datum a, Datum b, void *arg) +{ + char *a_str = DatumGetCString(a); + char *b_str = DatumGetCString(b); + bool a_history = IsTLHistoryFileName(a_str); + bool b_history = IsTLHistoryFileName(b_str); + + /* Timeline history files always have the highest priority. */ + if (a_history != b_history) + return a_history ? -1 : 1; + + /* Priority is given to older files. */ + return strcmp(a_str, b_str); +} + +/* + * PgArchForceDirScan + * + * When called, the next call to pgarch_readyXlog() will perform a + * directory scan. This is useful for ensuring that important files such + * as timeline history files are archived as quickly as possible. + */ +void +PgArchForceDirScan(void) +{ + SpinLockAcquire(&PgArch->arch_lck); + PgArch->force_dir_scan = true; + SpinLockRelease(&PgArch->arch_lck); } /* diff --git a/src/include/postmaster/pgarch.h b/src/include/postmaster/pgarch.h index 1e47a143e13..732615be570 100644 --- a/src/include/postmaster/pgarch.h +++ b/src/include/postmaster/pgarch.h @@ -31,5 +31,6 @@ extern void PgArchShmemInit(void); extern bool PgArchCanRestart(void); extern void PgArchiverMain(void) pg_attribute_noreturn(); extern void PgArchWakeup(void); +extern void PgArchForceDirScan(void); #endif /* _PGARCH_H */ From c7f3c414fdedbb9a48d597a309c53fdf1ac3652a Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 13 Dec 2024 14:21:36 -0500 Subject: [PATCH 29/90] Fix possible crash in pg_dump with identity sequences. If an owned sequence is considered interesting, force its owning table to be marked interesting too. This ensures, in particular, that we'll fetch the owning table's column names so we have the data needed for ALTER TABLE ... ADD GENERATED. Previously there were edge cases where pg_dump could get SIGSEGV due to not having filled in the column names. (The known case is where the owning table has been made part of an extension while its identity sequence is not a member; but there may be others.) Also, if it's an identity sequence, force its dumped-components mask to exactly match the owning table: dump definition only if we're dumping the table's definition, dump data only if we're dumping the table's data, etc. This generalizes the code introduced in commit b965f2617 that set the sequence's dump mask to NONE if the owning table's mask is NONE. That's insufficient to prevent failures, because for example the table's mask might only request dumping ACLs, which would lead us to still emit ALTER TABLE ADD GENERATED even though we didn't create the table. It seems better to treat an identity sequence as though it were an inseparable aspect of the table, matching the treatment used in the backend's dependency logic. Perhaps this policy needs additional refinement, but let's wait to see some field use-cases before changing it further. While here, add a comment in pg_dump.h warning against writing tests like "if (dobj->dump == DUMP_COMPONENT_NONE)", which was a bug in this case. There is one other example in getPublicationNamespaces, which if it's not a bug is at least remarkably unclear and under-documented. Changing that requires a separate discussion, however. Per report from Artur Zakirov. Back-patch to all supported branches. Discussion: https://postgr.es/m/CAKNkYnwXFBf136=u9UqUxFUVagevLQJ=zGd5BsLhCsatDvQsKQ@mail.gmail.com --- src/bin/pg_dump/pg_dump.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 001daf936df..5a45819e67a 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -7227,20 +7227,15 @@ getOwnedSeqs(Archive *fout, TableInfo tblinfo[], int numTables) seqinfo->owning_tab, seqinfo->dobj.catId.oid); /* - * Only dump identity sequences if we're going to dump the table that - * it belongs to. - */ - if (owning_tab->dobj.dump == DUMP_COMPONENT_NONE && - seqinfo->is_identity_sequence) - { - seqinfo->dobj.dump = DUMP_COMPONENT_NONE; - continue; - } - - /* - * Otherwise we need to dump the components that are being dumped for - * the table and any components which the sequence is explicitly - * marked with. + * For an identity sequence, dump exactly the same components for the + * sequence as for the owning table. This is important because we + * treat the identity sequence as an integral part of the table. For + * example, there is not any DDL command that allows creation of such + * a sequence independently of the table. + * + * For other owned sequences such as serial sequences, we need to dump + * the components that are being dumped for the table and any + * components that the sequence is explicitly marked with. * * We can't simply use the set of components which are being dumped * for the table as the table might be in an extension (and only the @@ -7253,10 +7248,17 @@ getOwnedSeqs(Archive *fout, TableInfo tblinfo[], int numTables) * marked by checkExtensionMembership() and this will be a no-op as * the table will be equivalently marked. */ - seqinfo->dobj.dump = seqinfo->dobj.dump | owning_tab->dobj.dump; + if (seqinfo->is_identity_sequence) + seqinfo->dobj.dump = owning_tab->dobj.dump; + else + seqinfo->dobj.dump |= owning_tab->dobj.dump; + /* Make sure that necessary data is available if we're dumping it */ if (seqinfo->dobj.dump != DUMP_COMPONENT_NONE) + { seqinfo->interesting = true; + owning_tab->interesting = true; + } } } From 2a23dbcf35946b844699c65fdf2ee440251eab12 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 15 Dec 2024 14:14:15 -0500 Subject: [PATCH 30/90] pgbench: fix misprocessing of some nested \if constructs. An \if command appearing within a false (not-to-be-executed) \if branch was incorrectly treated the same as \elif. This could allow statements within the inner \if to be executed when they should not be. Also the missing inner \if stack entry would result in an assertion failure (in assert-enabled builds) when the final \endif is reached. Report and patch by Michail Nikolaev. Back-patch to all supported branches. Discussion: https://postgr.es/m/CANtu0oiA1ke=SP6tauhNqkUdv5QFsJtS1p=aOOf_iU+EhyKkjQ@mail.gmail.com --- src/bin/pgbench/pgbench.c | 16 ++++--- src/bin/pgbench/t/001_pgbench_with_server.pl | 50 ++++++++++++++++++++ 2 files changed, 59 insertions(+), 7 deletions(-) diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index c7f8431841a..1f6cb0e6038 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -3446,8 +3446,14 @@ advanceConnectionState(TState *thread, CState *st, StatsData *agg) switch (conditional_stack_peek(st->cstack)) { case IFSTATE_FALSE: - if (command->meta == META_IF || - command->meta == META_ELIF) + if (command->meta == META_IF) + { + /* nested if in skipped branch - ignore */ + conditional_stack_push(st->cstack, + IFSTATE_IGNORED); + st->command++; + } + else if (command->meta == META_ELIF) { /* we must evaluate the condition */ st->state = CSTATE_START_COMMAND; @@ -3466,11 +3472,7 @@ advanceConnectionState(TState *thread, CState *st, StatsData *agg) conditional_stack_pop(st->cstack); if (conditional_active(st->cstack)) st->state = CSTATE_START_COMMAND; - - /* - * else state remains in - * CSTATE_SKIP_COMMAND - */ + /* else state remains CSTATE_SKIP_COMMAND */ st->command++; } break; diff --git a/src/bin/pgbench/t/001_pgbench_with_server.pl b/src/bin/pgbench/t/001_pgbench_with_server.pl index 4f716c6c073..fbd45c766cc 100644 --- a/src/bin/pgbench/t/001_pgbench_with_server.pl +++ b/src/bin/pgbench/t/001_pgbench_with_server.pl @@ -622,6 +622,56 @@ } }); +# test nested \if constructs +$node->pgbench( + '--no-vacuum --client=1 --transactions=1', + 0, + [qr{actually processed}], + [qr{^$}], + 'nested ifs', + { + 'pgbench_nested_if' => q( + \if false + SELECT 1 / 0; + \if true + SELECT 1 / 0; + \elif true + SELECT 1 / 0; + \else + SELECT 1 / 0; + \endif + SELECT 1 / 0; + \elif false + \if true + SELECT 1 / 0; + \elif true + SELECT 1 / 0; + \else + SELECT 1 / 0; + \endif + \else + \if false + SELECT 1 / 0; + \elif false + SELECT 1 / 0; + \else + SELECT 'correct'; + \endif + \endif + \if true + SELECT 'correct'; + \else + \if true + SELECT 1 / 0; + \elif true + SELECT 1 / 0; + \else + SELECT 1 / 0; + \endif + \endif + ) + }); + # random determinism when seeded $node->safe_psql('postgres', 'CREATE UNLOGGED TABLE seeded_random(seed INT8 NOT NULL, rand TEXT NOT NULL, val INTEGER NOT NULL);' From f5f5e7b47351f0443d9720bfc7916ed2af940bd3 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Mon, 16 Dec 2024 15:56:38 +0200 Subject: [PATCH 31/90] Make 009_twophase.pl test pass with recovery_min_apply_delay set The test failed if you ran the regression tests with TEMP_CONFIG with recovery_min_apply_delay = '500ms'. Fix the race condition by waiting for transaction to be applied in the replica, like in a few other tests. The failing test was introduced in commit cbfbda7841. Backpatch to all supported versions like that commit (except v12, which is no longer supported). Reported-by: Alexander Lakhin Discussion: https://www.postgresql.org/message-id/09e2a70a-a6c2-4b5c-aeae-040a7449c9f2@gmail.com --- src/test/recovery/t/009_twophase.pl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/recovery/t/009_twophase.pl b/src/test/recovery/t/009_twophase.pl index b9d96453167..a5686db2526 100644 --- a/src/test/recovery/t/009_twophase.pl +++ b/src/test/recovery/t/009_twophase.pl @@ -315,6 +315,7 @@ sub configure_and_reload $cur_primary->psql( 'postgres', " + SET synchronous_commit='remote_apply'; -- To ensure the standby is caught up CREATE TABLE t_009_tbl_standby_mvcc (id int, msg text); BEGIN; INSERT INTO t_009_tbl_standby_mvcc VALUES (1, 'issued to ${cur_primary_name}'); From 84dc1303c9631343c74ce0ad806fb8fd202336f7 Mon Sep 17 00:00:00 2001 From: Nathan Bossart Date: Tue, 17 Dec 2024 15:24:45 -0600 Subject: [PATCH 32/90] Accommodate very large dshash tables. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If a dshash table grows very large (e.g., the dshash table for cumulative statistics when there are millions of tables), resizing it may fail with an error like: ERROR: invalid DSA memory alloc request size 1073741824 To fix, permit dshash resizing to allocate more than 1 GB by providing the DSA_ALLOC_HUGE flag. Reported-by: Andreas Scherbaum Author: Matthias van de Meent Reviewed-by: Cédric Villemain, Michael Paquier, Andres Freund Discussion: https://postgr.es/m/80a12d59-0d5e-4c54-866c-e69cd6536471%40pgug.de Backpatch-through: 13 --- src/backend/lib/dshash.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/backend/lib/dshash.c b/src/backend/lib/dshash.c index 99128b223af..5c46b85d0f2 100644 --- a/src/backend/lib/dshash.c +++ b/src/backend/lib/dshash.c @@ -692,8 +692,10 @@ resize(dshash_table *hash_table, size_t new_size_log2) Assert(new_size_log2 == hash_table->control->size_log2 + 1); /* Allocate the space for the new table. */ - new_buckets_shared = dsa_allocate0(hash_table->area, - sizeof(dsa_pointer) * new_size); + new_buckets_shared = + dsa_allocate_extended(hash_table->area, + sizeof(dsa_pointer) * new_size, + DSA_ALLOC_HUGE | DSA_ALLOC_ZERO); new_buckets = dsa_get_address(hash_table->area, new_buckets_shared); /* From bdb07d24113b721f3c123304c162485f54e2f554 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Thu, 19 Dec 2024 13:13:31 +1300 Subject: [PATCH 33/90] Fix Assert failure in WITH RECURSIVE UNION queries If the non-recursive part of a recursive CTE ended up using TTSOpsBufferHeapTuple as the table slot type, then a duplicate value could cause an Assert failure in CheckOpSlotCompatibility() when checking the hash table for the duplicate value. The expected slot type for the deform step was TTSOpsMinimalTuple so the Assert failed when the TTSOpsBufferHeapTuple slot was used. This is a long-standing bug which we likely didn't notice because it seems much more likely that the non-recursive term would have required projection and used a TTSOpsVirtual slot, which CheckOpSlotCompatibility is ok with. There doesn't seem to be any harm done here other than the Assert failure. Both TTSOpsMinimalTuple and TTSOpsBufferHeapTuple slot types require tuple deformation, so the EEOP_*_FETCHSOME ExprState step would have properly existed in the ExprState. The solution is to pass NULL for the ExecBuildGroupingEqual's 'lops' parameter. This means the ExprState's EEOP_*_FETCHSOME step won't expect a fixed slot type. This makes CheckOpSlotCompatibility() happy as no checking is performed when the ExprEvalStep is not expecting a fixed slot type. Reported-by: Richard Guo Reviewed-by: Tom Lane Discussion: https://postgr.es/m/CAMbWs4-8U9q2LAtf8+ghV11zeUReA3AmrYkxzBEv0vKnDxwkKA@mail.gmail.com Backpatch-through: 13, all supported versions --- src/backend/executor/execGrouping.c | 3 +-- src/test/regress/expected/with.out | 15 +++++++++++++++ src/test/regress/sql/with.sql | 12 ++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/backend/executor/execGrouping.c b/src/backend/executor/execGrouping.c index c11427a1f66..01f6d2001e1 100644 --- a/src/backend/executor/execGrouping.c +++ b/src/backend/executor/execGrouping.c @@ -225,9 +225,8 @@ BuildTupleHashTableExt(PlanState *parent, allow_jit = metacxt != tablecxt; /* build comparator for all columns */ - /* XXX: should we support non-minimal tuples for the inputslot? */ hashtable->tab_eq_func = ExecBuildGroupingEqual(inputDesc, inputDesc, - &TTSOpsMinimalTuple, &TTSOpsMinimalTuple, + NULL, &TTSOpsMinimalTuple, numCols, keyColIdx, eqfuncoids, collations, allow_jit ? parent : NULL); diff --git a/src/test/regress/expected/with.out b/src/test/regress/expected/with.out index a9e136ca900..e772f1d3858 100644 --- a/src/test/regress/expected/with.out +++ b/src/test/regress/expected/with.out @@ -636,6 +636,21 @@ SELECT t1.id, t2.path, t2 FROM t AS t1 JOIN t AS t2 ON 16 | {3,7,11,16} | (16,"{3,7,11,16}") (16 rows) +CREATE TEMP TABLE duplicates (a INT NOT NULL); +INSERT INTO duplicates VALUES(1), (1); +-- Try out a recursive UNION case where the non-recursive part's table slot +-- uses TTSOpsBufferHeapTuple and contains duplicate rows. +WITH RECURSIVE cte (a) as ( + SELECT a FROM duplicates + UNION + SELECT a FROM cte +) +SELECT a FROM cte; + a +--- + 1 +(1 row) + -- SEARCH clause create table graph0( f int, t int, label text ); insert into graph0 values diff --git a/src/test/regress/sql/with.sql b/src/test/regress/sql/with.sql index 1c8545b5b0d..5252f872ec4 100644 --- a/src/test/regress/sql/with.sql +++ b/src/test/regress/sql/with.sql @@ -347,6 +347,18 @@ UNION ALL SELECT t1.id, t2.path, t2 FROM t AS t1 JOIN t AS t2 ON (t1.id=t2.id); +CREATE TEMP TABLE duplicates (a INT NOT NULL); +INSERT INTO duplicates VALUES(1), (1); + +-- Try out a recursive UNION case where the non-recursive part's table slot +-- uses TTSOpsBufferHeapTuple and contains duplicate rows. +WITH RECURSIVE cte (a) as ( + SELECT a FROM duplicates + UNION + SELECT a FROM cte +) +SELECT a FROM cte; + -- SEARCH clause create table graph0( f int, t int, label text ); From 1f95181b44c843729caaa688f74babe9403b5850 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Tue, 5 Jul 2022 10:16:12 +0900 Subject: [PATCH 34/90] Replace durable_rename_excl() by durable_rename(), take two durable_rename_excl() attempts to avoid overwriting any existing files by using link() and unlink(), and it falls back to rename() on some platforms (aka WIN32), which offers no such overwrite protection. Most callers use durable_rename_excl() just in case there is an existing file, but in practice there shouldn't be one (see below for more details). Furthermore, failures during durable_rename_excl() can result in multiple hard links to the same file. As per Nathan's tests, it is possible to end up with two links to the same file in pg_wal after a crash just before unlink() during WAL recycling. Specifically, the test produced links to the same file for the current WAL file and the next one because the half-recycled WAL file was re-recycled upon restarting, leading to WAL corruption. This change replaces all the calls of durable_rename_excl() to durable_rename(). This removes the protection against accidentally overwriting an existing file, but some platforms are already living without it and ordinarily there shouldn't be one. The function itself is left around in case any extensions are using it. It will be removed on HEAD via a follow-up commit. Here is a summary of the existing callers of durable_rename_excl() (see second discussion link at the bottom), replaced by this commit. First, basic_archive used it to avoid overwriting an archive concurrently created by another server, but as mentioned above, it will still overwrite files on some platforms. Second, xlog.c uses it to recycle past WAL segments, where an overwrite should not happen (origin of the change at f0e37a8) because there are protections about the WAL segment to select when recycling an entry. The third and last area is related to the write of timeline history files. writeTimeLineHistory() will write a new timeline history file at the end of recovery on promotion, so there should be no such files for the same timeline. What remains is writeTimeLineHistoryFile(), that can be used in parallel by a WAL receiver and the startup process, and some digging of the buildfarm shows that EEXIST from a WAL receiver can happen with an error of "could not link file \"pg_wal/xlogtemp.NN\" to \"pg_wal/MM.history\", which would cause an automatic restart of the WAL receiver as it is promoted to FATAL, hence this should improve the stability of the WAL receiver as rename() would overwrite an existing TLI history file already fetched by the startup process at recovery. This is the second time this change is attempted, ccfbd92 being the first one, but this time no assertions are added for the case of a TLI history file written concurrently by the WAL receiver or the startup process because we can expect one to exist (some of the TAP tests are able to trigger with a proper timing). This commit has been originally applied on v16~ as of dac1ff30906b, and we have received more reports of this issue, where clusters can become corrupted at replay in older stable branches with multiple links pointing to the same physical WAL segment file. This backpatch addresses the problem for the v13~v15 range. Author: Nathan Bossart Reviewed-by: Robert Haas, Kyotaro Horiguchi, Michael Paquier Discussion: https://postgr.es/m/20220407182954.GA1231544@nathanxps13 Discussion: https://postgr.es/m/Ym6GZbqQdlalSKSG@paquier.xyz Discussion: https://postgr.es/m/CAJhEC04tBkYPF4q2uS_rCytauvNEVqdBAzasBEokfceFhF=KDQ@mail.gmail.com --- src/backend/access/transam/timeline.c | 18 +++++------------- src/backend/access/transam/xlog.c | 9 +++------ 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/src/backend/access/transam/timeline.c b/src/backend/access/transam/timeline.c index 8d0903c1756..eeb505fb6ad 100644 --- a/src/backend/access/transam/timeline.c +++ b/src/backend/access/transam/timeline.c @@ -441,12 +441,8 @@ writeTimeLineHistory(TimeLineID newTLI, TimeLineID parentTLI, * Now move the completed history file into place with its final name. */ TLHistoryFilePath(path, newTLI); - - /* - * Perform the rename using link if available, paranoidly trying to avoid - * overwriting an existing file (there shouldn't be one). - */ - durable_rename_excl(tmppath, path, ERROR); + Assert(access(path, F_OK) != 0 && errno == ENOENT); + durable_rename(tmppath, path, ERROR); /* The history file can be archived immediately. */ if (XLogArchivingActive()) @@ -516,15 +512,11 @@ writeTimeLineHistoryFile(TimeLineID tli, char *content, int size) errmsg("could not close file \"%s\": %m", tmppath))); /* - * Now move the completed history file into place with its final name. + * Now move the completed history file into place with its final name, + * replacing any existing file with the same name. */ TLHistoryFilePath(path, tli); - - /* - * Perform the rename using link if available, paranoidly trying to avoid - * overwriting an existing file (there shouldn't be one). - */ - durable_rename_excl(tmppath, path, ERROR); + durable_rename(tmppath, path, ERROR); } /* diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index f1a795bba9f..a6e2cb88f34 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -3693,15 +3693,12 @@ InstallXLogFileSegment(XLogSegNo *segno, char *tmppath, } } - /* - * Perform the rename using link if available, paranoidly trying to avoid - * overwriting an existing file (there shouldn't be one). - */ - if (durable_rename_excl(tmppath, path, LOG) != 0) + Assert(access(path, F_OK) != 0 && errno == ENOENT); + if (durable_rename(tmppath, path, LOG) != 0) { if (use_lock) LWLockRelease(ControlFileLock); - /* durable_rename_excl already emitted log message */ + /* durable_rename already emitted log message */ return false; } From 23c743b645a546f7ec7aae0a3d7201328d6994b3 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Fri, 20 Dec 2024 21:53:25 +1300 Subject: [PATCH 35/90] Fix corruption when relation truncation fails. RelationTruncate() does three things, while holding an AccessExclusiveLock and preventing checkpoints: 1. Logs the truncation. 2. Drops buffers, even if they're dirty. 3. Truncates some number of files. Step 2 could previously be canceled if it had to wait for I/O, and step 3 could and still can fail in file APIs. All orderings of these operations have data corruption hazards if interrupted, so we can't give up until the whole operation is done. When dirty pages were discarded but the corresponding blocks were left on disk due to ERROR, old page versions could come back from disk, reviving deleted data (see pgsql-bugs #18146 and several like it). When primary and standby were allowed to disagree on relation size, standbys could panic (see pgsql-bugs #18426) or revive data unknown to visibility management on the primary (theorized). Changes: * WAL is now unconditionally flushed first * smgrtruncate() is now called in a critical section, preventing interrupts and causing PANIC on file API failure * smgrtruncate() has a new parameter for existing fork sizes, because it can't call smgrnblocks() itself inside a critical section The changes apply to RelationTruncate(), smgr_redo() and pg_truncate_visibility_map(). That last is also brought up to date with other evolutions of the truncation protocol. The VACUUM FileTruncate() failure mode had been discussed in older reports than the ones referenced below, with independent analysis from many people, but earlier theories on how to fix it were too complicated to back-patch. The more recently invented cancellation bug was diagnosed by Alexander Lakhin. Other corruption scenarios were spotted by me while iterating on this patch and earlier commit 75818b3a. Back-patch to all supported releases. Reviewed-by: Michael Paquier Reviewed-by: Robert Haas Reported-by: rootcause000@gmail.com Reported-by: Alexander Lakhin Discussion: https://postgr.es/m/18146-04e908c662113ad5%40postgresql.org Discussion: https://postgr.es/m/18426-2d18da6586f152d6%40postgresql.org --- contrib/pg_visibility/pg_visibility.c | 32 +++++++++++++++---- src/backend/catalog/storage.c | 44 +++++++++++++++++++-------- src/backend/storage/smgr/md.c | 28 ++++++++++++----- src/backend/storage/smgr/smgr.c | 14 ++++++--- src/include/storage/md.h | 2 +- src/include/storage/smgr.h | 5 +-- 6 files changed, 92 insertions(+), 33 deletions(-) diff --git a/contrib/pg_visibility/pg_visibility.c b/contrib/pg_visibility/pg_visibility.c index 7ccefdb5667..13d9eb031dc 100644 --- a/contrib/pg_visibility/pg_visibility.c +++ b/contrib/pg_visibility/pg_visibility.c @@ -18,6 +18,7 @@ #include "funcapi.h" #include "miscadmin.h" #include "storage/bufmgr.h" +#include "storage/proc.h" #include "storage/procarray.h" #include "storage/smgr.h" #include "utils/rel.h" @@ -385,6 +386,7 @@ pg_truncate_visibility_map(PG_FUNCTION_ARGS) Relation rel; ForkNumber fork; BlockNumber block; + BlockNumber old_block; rel = relation_open(relid, AccessExclusiveLock); @@ -394,15 +396,24 @@ pg_truncate_visibility_map(PG_FUNCTION_ARGS) /* Forcibly reset cached file size */ RelationGetSmgr(rel)->smgr_cached_nblocks[VISIBILITYMAP_FORKNUM] = InvalidBlockNumber; + /* Compute new and old size before entering critical section. */ + fork = VISIBILITYMAP_FORKNUM; block = visibilitymap_prepare_truncate(rel, 0); - if (BlockNumberIsValid(block)) - { - fork = VISIBILITYMAP_FORKNUM; - smgrtruncate(RelationGetSmgr(rel), &fork, 1, &block); - } + old_block = BlockNumberIsValid(block) ? smgrnblocks(RelationGetSmgr(rel), fork) : 0; + + /* + * WAL-logging, buffer dropping, file truncation must be atomic and all on + * one side of a checkpoint. See RelationTruncate() for discussion. + */ + Assert(!MyProc->delayChkpt); + MyProc->delayChkpt = true; + Assert(!MyProc->delayChkptEnd); + MyProc->delayChkptEnd = true; + START_CRIT_SECTION(); if (RelationNeedsWAL(rel)) { + XLogRecPtr lsn; xl_smgr_truncate xlrec; xlrec.blkno = 0; @@ -412,9 +423,18 @@ pg_truncate_visibility_map(PG_FUNCTION_ARGS) XLogBeginInsert(); XLogRegisterData((char *) &xlrec, sizeof(xlrec)); - XLogInsert(RM_SMGR_ID, XLOG_SMGR_TRUNCATE | XLR_SPECIAL_REL_UPDATE); + lsn = XLogInsert(RM_SMGR_ID, + XLOG_SMGR_TRUNCATE | XLR_SPECIAL_REL_UPDATE); + XLogFlush(lsn); } + if (BlockNumberIsValid(block)) + smgrtruncate(RelationGetSmgr(rel), &fork, 1, &old_block, &block); + + END_CRIT_SECTION(); + MyProc->delayChkpt = false; + MyProc->delayChkptEnd = false; + /* * Release the lock right away, not at commit time. * diff --git a/src/backend/catalog/storage.c b/src/backend/catalog/storage.c index b8baa3b822d..0ac91be63dc 100644 --- a/src/backend/catalog/storage.c +++ b/src/backend/catalog/storage.c @@ -280,6 +280,7 @@ RelationTruncate(Relation rel, BlockNumber nblocks) bool vm; bool need_fsm_vacuum = false; ForkNumber forks[MAX_FORKNUM]; + BlockNumber old_blocks[MAX_FORKNUM]; BlockNumber blocks[MAX_FORKNUM]; int nforks = 0; SMgrRelation reln; @@ -295,6 +296,7 @@ RelationTruncate(Relation rel, BlockNumber nblocks) /* Prepare for truncation of MAIN fork of the relation */ forks[nforks] = MAIN_FORKNUM; + old_blocks[nforks] = smgrnblocks(reln, MAIN_FORKNUM); blocks[nforks] = nblocks; nforks++; @@ -306,6 +308,7 @@ RelationTruncate(Relation rel, BlockNumber nblocks) if (BlockNumberIsValid(blocks[nforks])) { forks[nforks] = FSM_FORKNUM; + old_blocks[nforks] = smgrnblocks(reln, FSM_FORKNUM); nforks++; need_fsm_vacuum = true; } @@ -319,6 +322,7 @@ RelationTruncate(Relation rel, BlockNumber nblocks) if (BlockNumberIsValid(blocks[nforks])) { forks[nforks] = VISIBILITYMAP_FORKNUM; + old_blocks[nforks] = smgrnblocks(reln, VISIBILITYMAP_FORKNUM); nforks++; } } @@ -357,14 +361,20 @@ RelationTruncate(Relation rel, BlockNumber nblocks) MyProc->delayChkptEnd = true; /* DELAY_CHKPT_COMPLETE */ /* - * We WAL-log the truncation before actually truncating, which means - * trouble if the truncation fails. If we then crash, the WAL replay - * likely isn't going to succeed in the truncation either, and cause a - * PANIC. It's tempting to put a critical section here, but that cure - * would be worse than the disease. It would turn a usually harmless - * failure to truncate, that might spell trouble at WAL replay, into a - * certain PANIC. + * We WAL-log the truncation first and then truncate in a critical + * section. Truncation drops buffers, even if dirty, and then truncates + * disk files. All of that work needs to complete before the lock is + * released, or else old versions of pages on disk that are missing recent + * changes would become accessible again. We'll try the whole operation + * again in crash recovery if we panic, but even then we can't give up + * because we don't want standbys' relation sizes to diverge and break + * replay or visibility invariants downstream. The critical section also + * suppresses interrupts. + * + * (See also pg_visibilitymap.c if changing this code.) */ + START_CRIT_SECTION(); + if (RelationNeedsWAL(rel)) { /* @@ -388,10 +398,10 @@ RelationTruncate(Relation rel, BlockNumber nblocks) * hit the disk before the WAL record, and the truncation of the FSM * or visibility map. If we crashed during that window, we'd be left * with a truncated heap, but the FSM or visibility map would still - * contain entries for the non-existent heap pages. + * contain entries for the non-existent heap pages, and standbys would + * also never replay the truncation. */ - if (fsm || vm) - XLogFlush(lsn); + XLogFlush(lsn); } /* @@ -399,7 +409,9 @@ RelationTruncate(Relation rel, BlockNumber nblocks) * longer exist after truncation is complete, and then truncate the * corresponding files on disk. */ - smgrtruncate(RelationGetSmgr(rel), forks, nforks, blocks); + smgrtruncate(RelationGetSmgr(rel), forks, nforks, old_blocks, blocks); + + END_CRIT_SECTION(); /* We've done all the critical work, so checkpoints are OK now. */ MyProc->delayChkpt = false; @@ -983,6 +995,7 @@ smgr_redo(XLogReaderState *record) Relation rel; ForkNumber forks[MAX_FORKNUM]; BlockNumber blocks[MAX_FORKNUM]; + BlockNumber old_blocks[MAX_FORKNUM]; int nforks = 0; bool need_fsm_vacuum = false; @@ -1017,6 +1030,7 @@ smgr_redo(XLogReaderState *record) if ((xlrec->flags & SMGR_TRUNCATE_HEAP) != 0) { forks[nforks] = MAIN_FORKNUM; + old_blocks[nforks] = smgrnblocks(reln, MAIN_FORKNUM); blocks[nforks] = xlrec->blkno; nforks++; @@ -1034,6 +1048,7 @@ smgr_redo(XLogReaderState *record) if (BlockNumberIsValid(blocks[nforks])) { forks[nforks] = FSM_FORKNUM; + old_blocks[nforks] = smgrnblocks(reln, FSM_FORKNUM); nforks++; need_fsm_vacuum = true; } @@ -1045,13 +1060,18 @@ smgr_redo(XLogReaderState *record) if (BlockNumberIsValid(blocks[nforks])) { forks[nforks] = VISIBILITYMAP_FORKNUM; + old_blocks[nforks] = smgrnblocks(reln, VISIBILITYMAP_FORKNUM); nforks++; } } /* Do the real work to truncate relation forks */ if (nforks > 0) - smgrtruncate(reln, forks, nforks, blocks); + { + START_CRIT_SECTION(); + smgrtruncate(reln, forks, nforks, old_blocks, blocks); + END_CRIT_SECTION(); + } /* * Update upper-level FSM pages to account for the truncation. This is diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c index 72f1494c7ab..b48a6d49681 100644 --- a/src/backend/storage/smgr/md.c +++ b/src/backend/storage/smgr/md.c @@ -818,19 +818,21 @@ mdnblocks(SMgrRelation reln, ForkNumber forknum) /* * mdtruncate() -- Truncate relation to specified number of blocks. + * + * Guaranteed not to allocate memory, so it can be used in a critical section. + * Caller must have called smgrnblocks() to obtain curnblk while holding a + * sufficient lock to prevent a change in relation size, and not used any smgr + * functions for this relation or handled interrupts in between. This makes + * sure we have opened all active segments, so that truncate loop will get + * them all! */ void -mdtruncate(SMgrRelation reln, ForkNumber forknum, BlockNumber nblocks) +mdtruncate(SMgrRelation reln, ForkNumber forknum, + BlockNumber curnblk, BlockNumber nblocks) { - BlockNumber curnblk; BlockNumber priorblocks; int curopensegs; - /* - * NOTE: mdnblocks makes sure we have opened all active segments, so that - * truncation loop will get them all! - */ - curnblk = mdnblocks(reln, forknum); if (nblocks > curnblk) { /* Bogus request ... but no complaint if InRecovery */ @@ -1099,7 +1101,7 @@ _fdvec_resize(SMgrRelation reln, reln->md_seg_fds[forknum] = MemoryContextAlloc(MdCxt, sizeof(MdfdVec) * nseg); } - else + else if (nseg > reln->md_num_open_segs[forknum]) { /* * It doesn't seem worthwhile complicating the code to amortize @@ -1111,6 +1113,16 @@ _fdvec_resize(SMgrRelation reln, repalloc(reln->md_seg_fds[forknum], sizeof(MdfdVec) * nseg); } + else + { + /* + * We don't reallocate a smaller array, because we want mdtruncate() + * to be able to promise that it won't allocate memory, so that it is + * allowed in a critical section. This means that a bit of space in + * the array is now wasted, until the next time we add a segment and + * reallocate. + */ + } reln->md_num_open_segs[forknum] = nseg; } diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c index 1d3bb92dfe1..9e6500ff981 100644 --- a/src/backend/storage/smgr/smgr.c +++ b/src/backend/storage/smgr/smgr.c @@ -60,7 +60,7 @@ typedef struct f_smgr BlockNumber blocknum, BlockNumber nblocks); BlockNumber (*smgr_nblocks) (SMgrRelation reln, ForkNumber forknum); void (*smgr_truncate) (SMgrRelation reln, ForkNumber forknum, - BlockNumber nblocks); + BlockNumber old_blocks, BlockNumber nblocks); void (*smgr_immedsync) (SMgrRelation reln, ForkNumber forknum); } f_smgr; @@ -590,10 +590,15 @@ smgrnblocks_cached(SMgrRelation reln, ForkNumber forknum) * * The caller must hold AccessExclusiveLock on the relation, to ensure that * other backends receive the smgr invalidation event that this function sends - * before they access any forks of the relation again. + * before they access any forks of the relation again. The current size of + * the forks should be provided in old_nblocks. This function should normally + * be called in a critical section, but the current size must be checked + * outside the critical section, and no interrupts or smgr functions relating + * to this relation should be called in between. */ void -smgrtruncate(SMgrRelation reln, ForkNumber *forknum, int nforks, BlockNumber *nblocks) +smgrtruncate(SMgrRelation reln, ForkNumber *forknum, int nforks, + BlockNumber *old_nblocks, BlockNumber *nblocks) { int i; @@ -621,7 +626,8 @@ smgrtruncate(SMgrRelation reln, ForkNumber *forknum, int nforks, BlockNumber *nb /* Make the cached size is invalid if we encounter an error. */ reln->smgr_cached_nblocks[forknum[i]] = InvalidBlockNumber; - smgrsw[reln->smgr_which].smgr_truncate(reln, forknum[i], nblocks[i]); + smgrsw[reln->smgr_which].smgr_truncate(reln, forknum[i], + old_nblocks[i], nblocks[i]); /* * We might as well update the local smgr_cached_nblocks values. The diff --git a/src/include/storage/md.h b/src/include/storage/md.h index 752b440864d..5858573a075 100644 --- a/src/include/storage/md.h +++ b/src/include/storage/md.h @@ -38,7 +38,7 @@ extern void mdwriteback(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, BlockNumber nblocks); extern BlockNumber mdnblocks(SMgrRelation reln, ForkNumber forknum); extern void mdtruncate(SMgrRelation reln, ForkNumber forknum, - BlockNumber nblocks); + BlockNumber old_blocks, BlockNumber nblocks); extern void mdimmedsync(SMgrRelation reln, ForkNumber forknum); extern void ForgetDatabaseSyncRequests(Oid dbid); diff --git a/src/include/storage/smgr.h b/src/include/storage/smgr.h index a6fbf7b6a6c..c7dc19d5407 100644 --- a/src/include/storage/smgr.h +++ b/src/include/storage/smgr.h @@ -100,8 +100,9 @@ extern void smgrwriteback(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, BlockNumber nblocks); extern BlockNumber smgrnblocks(SMgrRelation reln, ForkNumber forknum); extern BlockNumber smgrnblocks_cached(SMgrRelation reln, ForkNumber forknum); -extern void smgrtruncate(SMgrRelation reln, ForkNumber *forknum, - int nforks, BlockNumber *nblocks); +extern void smgrtruncate(SMgrRelation reln, ForkNumber *forknum, int nforks, + BlockNumber *old_nblocks, + BlockNumber *nblocks); extern void smgrimmedsync(SMgrRelation reln, ForkNumber forknum); extern void AtEOXact_SMgr(void); From 41eafbb494c9578fa04ffa529a10e4cfd6942421 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Sat, 21 Dec 2024 23:42:39 +0200 Subject: [PATCH 36/90] Update TransactionXmin when MyProc->xmin is updated GetSnapshotData() set TransactionXmin = MyProc->xmin, but when SnapshotResetXmin() advanced MyProc->xmin, it did not advance TransactionXmin correspondingly. That meant that TransactionXmin could be older than MyProc->xmin, and XIDs between than TransactionXmin and the real MyProc->xmin could be vacuumed away. One known consequence is in pg_subtrans lookups: we might try to look up the status of an XID that was already truncated away. Back-patch to all supported versions. Reviewed-by: Andres Freund Discussion: https://www.postgresql.org/message-id/d27a046d-a1e4-47d1-a95c-fbabe41debb4@iki.fi --- src/backend/utils/time/snapmgr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/utils/time/snapmgr.c b/src/backend/utils/time/snapmgr.c index 3037cf478d1..a64b6a2b303 100644 --- a/src/backend/utils/time/snapmgr.c +++ b/src/backend/utils/time/snapmgr.c @@ -948,7 +948,7 @@ SnapshotResetXmin(void) if (pairingheap_is_empty(&RegisteredSnapshots)) { - MyProc->xmin = InvalidTransactionId; + MyProc->xmin = TransactionXmin = InvalidTransactionId; return; } @@ -956,7 +956,7 @@ SnapshotResetXmin(void) pairingheap_first(&RegisteredSnapshots)); if (TransactionIdPrecedes(MyProc->xmin, minSnapshot->xmin)) - MyProc->xmin = minSnapshot->xmin; + MyProc->xmin = TransactionXmin = minSnapshot->xmin; } /* From cfd6cbcf9be078fbdf9587014231a5772039b386 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 23 Dec 2024 12:48:10 +0900 Subject: [PATCH 37/90] Fix memory leak in pgoutput with publication list cache The pgoutput module caches publication names in a list and frees it upon invalidation. However, the code forgot to free the actual publication names within the list elements, as publication names are pstrdup()'d in GetPublication(). This would cause memory to leak in CacheMemoryContext, bloating it over time as this context is not cleaned. This is a problem for WAL senders running for a long time, as an accumulation of invalidation requests would bloat its cache memory usage. A second case, where this leak is easier to see, involves a backend calling SQL functions like pg_logical_slot_{get,peek}_changes() which create a new decoding context with each execution. More publications create more bloat. To address this, this commit adds a new memory context within the logical decoding context and resets it each time the publication names cache is invalidated, based on a suggestion from Amit Kapila. This ensures that the lifespan of the publication names aligns with that of the logical decoding context. Contrary to the HEAD-only commit f0c569d71515 that has changed PGOutputData to track this new child memory context, the context is tracked with a static variable whose state is reset with a MemoryContext reset callback attached to PGOutputData->context, so as ABI compatibility is preserved in stable branches. This approach is based on an suggestion from Amit Kapila. Analyzed-by: Michael Paquier, Jeff Davis Author: Masahiko Sawada Reviewed-by: Amit Kapila, Michael Paquier, Euler Taveira, Hou Zhijie Discussion: https://postgr.es/m/Z0khf9EVMVLOc_YY@paquier.xyz Backpatch-through: 13 --- src/backend/replication/pgoutput/pgoutput.c | 41 ++++++++++++++++++--- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c index df2ea94d468..9fd879ee0c8 100644 --- a/src/backend/replication/pgoutput/pgoutput.c +++ b/src/backend/replication/pgoutput/pgoutput.c @@ -65,6 +65,13 @@ static void pgoutput_stream_commit(struct LogicalDecodingContext *ctx, static bool publications_valid; static bool in_streaming; +/* + * Private memory context for publication data, created in + * PGOutputData->context when starting pgoutput, and set to NULL when its + * parent context is reset via a dedicated MemoryContextCallback. + */ +static MemoryContext pubctx = NULL; + static List *LoadPublications(List *pubnames); static void publication_invalidation_cb(Datum arg, int cacheid, uint32 hashvalue); @@ -252,6 +259,15 @@ parse_output_parameters(List *options, PGOutputData *data) } } +/* + * Callback of PGOutputData->context in charge of cleaning pubctx. + */ +static void +pgoutput_pubctx_reset_callback(void *arg) +{ + pubctx = NULL; +} + /* * Initialize this plugin */ @@ -261,12 +277,22 @@ pgoutput_startup(LogicalDecodingContext *ctx, OutputPluginOptions *opt, { PGOutputData *data = palloc0(sizeof(PGOutputData)); static bool publication_callback_registered = false; + MemoryContextCallback *mcallback; /* Create our memory context for private allocations. */ data->context = AllocSetContextCreate(ctx->context, "logical replication output context", ALLOCSET_DEFAULT_SIZES); + Assert(pubctx == NULL); + pubctx = AllocSetContextCreate(ctx->context, + "logical replication publication list context", + ALLOCSET_SMALL_SIZES); + + mcallback = palloc0(sizeof(MemoryContextCallback)); + mcallback->func = pgoutput_pubctx_reset_callback; + MemoryContextRegisterResetCallback(ctx->context, mcallback); + ctx->output_plugin_private = data; /* This plugin uses binary protocol. */ @@ -786,8 +812,9 @@ pgoutput_origin_filter(LogicalDecodingContext *ctx, /* * Shutdown the output plugin. * - * Note, we don't need to clean the data->context as it's child context - * of the ctx->context so it will be cleaned up by logical decoding machinery. + * Note, we don't need to clean the data->context and pubctx as they are + * child contexts of the ctx->context so they will be cleaned up by logical + * decoding machinery. */ static void pgoutput_shutdown(LogicalDecodingContext *ctx) @@ -797,6 +824,9 @@ pgoutput_shutdown(LogicalDecodingContext *ctx) hash_destroy(RelationSyncCache); RelationSyncCache = NULL; } + + /* Better safe than sorry */ + pubctx = NULL; } /* @@ -1071,9 +1101,10 @@ get_rel_sync_entry(PGOutputData *data, Oid relid) /* Reload publications if needed before use. */ if (!publications_valid) { - oldctx = MemoryContextSwitchTo(CacheMemoryContext); - if (data->publications) - list_free_deep(data->publications); + Assert(pubctx); + + MemoryContextReset(pubctx); + oldctx = MemoryContextSwitchTo(pubctx); data->publications = LoadPublications(data->publication_names); MemoryContextSwitchTo(oldctx); From 536acda0bc7900c407c76c6ca6293e0ac2041f8b Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Sat, 28 Dec 2024 07:16:22 -0800 Subject: [PATCH 38/90] In REASSIGN OWNED of a database, lock the tuple as mandated. Commit aac2c9b4fde889d13f859c233c2523345e72d32b mandated such locking and attempted to fulfill that mandate, but it missed REASSIGN OWNED. Hence, it remained possible to lose VACUUM's inplace update of datfrozenxid if a REASSIGN OWNED processed that database at the same time. This didn't affect the other inplace-updated catalog, pg_class. For pg_class, REASSIGN OWNED calls ATExecChangeOwner() instead of the generic AlterObjectOwner_internal(), and ATExecChangeOwner() fulfills the locking mandate. Like in GRANT, implement this by following the locking protocol for any catalog subject to the generic AlterObjectOwner_internal(). It would suffice to do this for IsInplaceUpdateOid() catalogs only. Back-patch to v13 (all supported versions). Kirill Reshke. Reported by Alexander Kukushkin. Discussion: https://postgr.es/m/CAFh8B=mpKjAy4Cuun-HP-f_vRzh2HSvYFG3rhVfYbfEBUhBAGg@mail.gmail.com --- src/backend/catalog/objectaddress.c | 27 +++++++++++++++++++++++++- src/backend/commands/alter.c | 9 ++++++++- src/include/catalog/objectaddress.h | 4 ++++ src/test/regress/expected/database.out | 6 ++++++ src/test/regress/sql/database.sql | 7 +++++++ 5 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c index 3a4e12592ff..060a1d82632 100644 --- a/src/backend/catalog/objectaddress.c +++ b/src/backend/catalog/objectaddress.c @@ -2808,6 +2808,22 @@ get_object_property_data(Oid class_id) */ HeapTuple get_catalog_object_by_oid(Relation catalog, AttrNumber oidcol, Oid objectId) +{ + return + get_catalog_object_by_oid_extended(catalog, oidcol, objectId, false); +} + +/* + * Same as get_catalog_object_by_oid(), but with an additional "locktup" + * argument controlling whether to acquire a LOCKTAG_TUPLE at mode + * InplaceUpdateTupleLock. See README.tuplock section "Locking to write + * inplace-updated tables". + */ +HeapTuple +get_catalog_object_by_oid_extended(Relation catalog, + AttrNumber oidcol, + Oid objectId, + bool locktup) { HeapTuple tuple; Oid classId = RelationGetRelid(catalog); @@ -2815,7 +2831,12 @@ get_catalog_object_by_oid(Relation catalog, AttrNumber oidcol, Oid objectId) if (oidCacheId > 0) { - tuple = SearchSysCacheCopy1(oidCacheId, ObjectIdGetDatum(objectId)); + if (locktup) + tuple = SearchSysCacheLockedCopy1(oidCacheId, + ObjectIdGetDatum(objectId)); + else + tuple = SearchSysCacheCopy1(oidCacheId, + ObjectIdGetDatum(objectId)); if (!HeapTupleIsValid(tuple)) /* should not happen */ return NULL; } @@ -2840,6 +2861,10 @@ get_catalog_object_by_oid(Relation catalog, AttrNumber oidcol, Oid objectId) systable_endscan(scan); return NULL; } + + if (locktup) + LockTuple(catalog, &tuple->t_self, InplaceUpdateTupleLock); + tuple = heap_copytuple(tuple); systable_endscan(scan); diff --git a/src/backend/commands/alter.c b/src/backend/commands/alter.c index aaae9f482fa..8cd1f5b102b 100644 --- a/src/backend/commands/alter.c +++ b/src/backend/commands/alter.c @@ -60,6 +60,7 @@ #include "miscadmin.h" #include "parser/parse_func.h" #include "rewrite/rewriteDefine.h" +#include "storage/lmgr.h" #include "tcop/utility.h" #include "utils/builtins.h" #include "utils/fmgroids.h" @@ -945,7 +946,9 @@ AlterObjectOwner_internal(Relation rel, Oid objectId, Oid new_ownerId) Oid old_ownerId; Oid namespaceId = InvalidOid; - oldtup = get_catalog_object_by_oid(rel, Anum_oid, objectId); + /* Search tuple and lock it. */ + oldtup = + get_catalog_object_by_oid_extended(rel, Anum_oid, objectId, true); if (oldtup == NULL) elog(ERROR, "cache lookup failed for object %u of catalog \"%s\"", objectId, RelationGetRelationName(rel)); @@ -1044,6 +1047,8 @@ AlterObjectOwner_internal(Relation rel, Oid objectId, Oid new_ownerId) /* Perform actual update */ CatalogTupleUpdate(rel, &newtup->t_self, newtup); + UnlockTuple(rel, &oldtup->t_self, InplaceUpdateTupleLock); + /* * Update owner dependency reference. When working on a large object, * we have to translate back to the OID conventionally used for LOs' @@ -1061,6 +1066,8 @@ AlterObjectOwner_internal(Relation rel, Oid objectId, Oid new_ownerId) } else { + UnlockTuple(rel, &oldtup->t_self, InplaceUpdateTupleLock); + /* * No need to change anything. But when working on a large object, we * have to translate back to the OID conventionally used for LOs' diff --git a/src/include/catalog/objectaddress.h b/src/include/catalog/objectaddress.h index 2b4e104bb9d..3903e7a6f2e 100644 --- a/src/include/catalog/objectaddress.h +++ b/src/include/catalog/objectaddress.h @@ -69,6 +69,10 @@ extern bool get_object_namensp_unique(Oid class_id); extern HeapTuple get_catalog_object_by_oid(Relation catalog, AttrNumber oidcol, Oid objectId); +extern HeapTuple get_catalog_object_by_oid_extended(Relation catalog, + AttrNumber oidcol, + Oid objectId, + bool locktup); extern char *getObjectDescription(const ObjectAddress *object, bool missing_ok); diff --git a/src/test/regress/expected/database.out b/src/test/regress/expected/database.out index 6bc935c14ed..8c4bdc2d349 100644 --- a/src/test/regress/expected/database.out +++ b/src/test/regress/expected/database.out @@ -11,4 +11,10 @@ WHERE datname = 'regression_utf8'; -- load catcache entry, if nothing else does ALTER DATABASE regression_utf8 RESET TABLESPACE; ROLLBACK; +CREATE ROLE regress_datdba_before; +CREATE ROLE regress_datdba_after; +ALTER DATABASE regression_utf8 OWNER TO regress_datdba_before; +REASSIGN OWNED BY regress_datdba_before TO regress_datdba_after; DROP DATABASE regression_utf8; +DROP ROLE regress_datdba_before; +DROP ROLE regress_datdba_after; diff --git a/src/test/regress/sql/database.sql b/src/test/regress/sql/database.sql index dbb899c41ce..edd62128268 100644 --- a/src/test/regress/sql/database.sql +++ b/src/test/regress/sql/database.sql @@ -13,4 +13,11 @@ WHERE datname = 'regression_utf8'; ALTER DATABASE regression_utf8 RESET TABLESPACE; ROLLBACK; +CREATE ROLE regress_datdba_before; +CREATE ROLE regress_datdba_after; +ALTER DATABASE regression_utf8 OWNER TO regress_datdba_before; +REASSIGN OWNED BY regress_datdba_before TO regress_datdba_after; + DROP DATABASE regression_utf8; +DROP ROLE regress_datdba_before; +DROP ROLE regress_datdba_after; From c58b0c43d36f606d6c1f8e7e45cc383df9d1dc74 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 28 Dec 2024 16:08:50 -0500 Subject: [PATCH 39/90] Exclude parallel workers from connection privilege/limit checks. Cause parallel workers to not check datallowconn, rolcanlogin, and ACL_CONNECT privileges. The leader already checked these things (except for rolcanlogin which might have been checked for a different role). Re-checking can accomplish little except to induce unexpected failures in applications that might not even be aware that their query has been parallelized. We already had the principle that parallel workers rely on their leader to pass a valid set of authorization information, so this change just extends that a bit further. Also, modify the ReservedConnections, datconnlimit and rolconnlimit logic so that these limits are only enforced against regular backends, and only regular backends are counted while checking if the limits were already reached. Previously, background processes that had an assigned database or role were subject to these limits (with rather random exclusions for autovac workers and walsenders), and the set of existing processes that counted against each limit was quite haphazard as well. The point of these limits, AFAICS, is to ensure the availability of PGPROC slots for regular backends. Since all other types of processes have their own separate pools of PGPROC slots, it makes no sense either to enforce these limits against them or to count them while enforcing the limit. While edge-case failures of these sorts have been possible for a long time, the problem got a good deal worse with commit 5a2fed911 (CVE-2024-10978), which caused parallel workers to make some of these checks using the leader's current role where before we had used its AuthenticatedUserId, thus allowing parallel queries to fail after SET ROLE. The previous behavior was fairly accidental and I have no desire to return to it. This patch includes reverting 73c9f91a1, which was an emergency hack to suppress these same checks in some cases. It wasn't complete, as shown by a recent bug report from Laurenz Albe. We can also revert fd4d93d26 and 492217301, which hacked around the same problems in one regression test. In passing, remove the special case for autovac workers in CheckMyDatabase; it seems cleaner to have AutoVacWorkerMain pass the INIT_PG_OVERRIDE_ALLOW_CONNS flag, now that that does what's needed. Like 5a2fed911, back-patch to supported branches (which sadly no longer includes v12). Discussion: https://postgr.es/m/1808397.1735156190@sss.pgh.pa.us --- src/backend/access/transam/parallel.c | 9 +++- src/backend/access/transam/twophase.c | 2 +- src/backend/postmaster/autovacuum.c | 6 ++- src/backend/storage/ipc/procarray.c | 4 +- src/backend/storage/lmgr/proc.c | 4 +- src/backend/utils/init/miscinit.c | 75 +++++++++++++-------------- src/backend/utils/init/postinit.c | 40 +++++--------- src/include/miscadmin.h | 2 + src/include/storage/proc.h | 2 +- 9 files changed, 68 insertions(+), 76 deletions(-) diff --git a/src/backend/access/transam/parallel.c b/src/backend/access/transam/parallel.c index d1167cf5e80..4fdeb5c6f3a 100644 --- a/src/backend/access/transam/parallel.c +++ b/src/backend/access/transam/parallel.c @@ -1414,10 +1414,15 @@ ParallelWorkerMain(Datum main_arg) fps->session_user_is_superuser); SetCurrentRoleId(fps->outer_user_id, fps->role_is_superuser); - /* Restore database connection. */ + /* + * Restore database connection. We skip connection authorization checks, + * reasoning that (a) the leader checked these things when it started, and + * (b) we do not want parallel mode to cause these failures, because that + * would make use of parallel query plans not transparent to applications. + */ BackgroundWorkerInitializeConnectionByOid(fps->database_id, fps->authenticated_user_id, - 0); + BGWORKER_BYPASS_ALLOWCONN); /* * Set the client encoding to the database encoding, since that is what diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c index f62aded79a7..16848fa226c 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -481,7 +481,7 @@ MarkAsPreparingGuts(GlobalTransaction gxact, TransactionId xid, const char *gid, proc->databaseId = databaseid; proc->roleId = owner; proc->tempNamespaceId = InvalidOid; - proc->isBackgroundWorker = false; + proc->isBackgroundWorker = true; proc->lwWaiting = LW_WS_NOT_WAITING; proc->lwWaitMode = 0; proc->waitLock = NULL; diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index 192837bfa36..e70f32d0ab4 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -1699,12 +1699,14 @@ AutoVacWorkerMain(int argc, char *argv[]) pgstat_report_autovac(dbid); /* - * Connect to the selected database + * Connect to the selected database, specifying no particular user, + * and ignoring datallowconn. Collect the database's name for + * display. * * Note: if we have selected a just-deleted database (due to using * stale stats info), we'll fail and exit here. */ - InitPostgres(NULL, dbid, NULL, InvalidOid, dbname, false); + InitPostgres(NULL, dbid, NULL, InvalidOid, dbname, true); SetProcessingMode(NormalProcessing); set_ps_display(dbname); ereport(DEBUG1, diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index 76093e6c162..7348e7a217a 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -3668,8 +3668,7 @@ CountDBBackends(Oid databaseid) } /* - * CountDBConnections --- counts database backends ignoring any background - * worker processes + * CountDBConnections --- counts database backends (only regular backends) */ int CountDBConnections(Oid databaseid) @@ -3741,6 +3740,7 @@ CancelDBBackends(Oid databaseid, ProcSignalReason sigmode, bool conflictPending) /* * CountUserBackends --- count backends that are used by specified user + * (only regular backends, not any type of background worker) */ int CountUserBackends(Oid roleid) diff --git a/src/backend/storage/lmgr/proc.c b/src/backend/storage/lmgr/proc.c index f62e622a7bf..f029100cd8b 100644 --- a/src/backend/storage/lmgr/proc.c +++ b/src/backend/storage/lmgr/proc.c @@ -393,7 +393,7 @@ InitProcess(void) MyProc->databaseId = InvalidOid; MyProc->roleId = InvalidOid; MyProc->tempNamespaceId = InvalidOid; - MyProc->isBackgroundWorker = IsBackgroundWorker; + MyProc->isBackgroundWorker = !AmRegularBackendProcess(); MyProc->delayChkpt = false; MyProc->delayChkptEnd = false; MyProc->statusFlags = 0; @@ -579,7 +579,7 @@ InitAuxiliaryProcess(void) MyProc->databaseId = InvalidOid; MyProc->roleId = InvalidOid; MyProc->tempNamespaceId = InvalidOid; - MyProc->isBackgroundWorker = IsBackgroundWorker; + MyProc->isBackgroundWorker = true; MyProc->delayChkpt = false; MyProc->delayChkptEnd = false; MyProc->statusFlags = 0; diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c index 9687bb45745..3a8bb94a5c0 100644 --- a/src/backend/utils/init/miscinit.c +++ b/src/backend/utils/init/miscinit.c @@ -720,6 +720,16 @@ InitializeSessionUserId(const char *rolename, Oid roleid) char *rname; bool is_superuser; + /* + * In a parallel worker, we don't have to do anything here. + * ParallelWorkerMain already set our output variables, and we aren't + * going to enforce either rolcanlogin or rolconnlimit. Furthermore, we + * don't really want to perform a catalog lookup for the role: we don't + * want to fail if it's been dropped. + */ + if (InitializingParallelWorker) + return; + /* * Don't do scans if we're bootstrapping, none of the system catalogs * exist yet, and they should be owned by postgres anyway. @@ -735,34 +745,22 @@ InitializeSessionUserId(const char *rolename, Oid roleid) /* * Look up the role, either by name if that's given or by OID if not. - * Normally we have to fail if we don't find it, but in parallel workers - * just return without doing anything: all the critical work has been done - * already. The upshot of that is that if the role has been deleted, we - * will not enforce its rolconnlimit against parallel workers anymore. */ if (rolename != NULL) { roleTup = SearchSysCache1(AUTHNAME, PointerGetDatum(rolename)); if (!HeapTupleIsValid(roleTup)) - { - if (InitializingParallelWorker) - return; ereport(FATAL, (errcode(ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION), errmsg("role \"%s\" does not exist", rolename))); - } } else { roleTup = SearchSysCache1(AUTHOID, ObjectIdGetDatum(roleid)); if (!HeapTupleIsValid(roleTup)) - { - if (InitializingParallelWorker) - return; ereport(FATAL, (errcode(ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION), errmsg("role with OID %u does not exist", roleid))); - } } rform = (Form_pg_authid) GETSTRUCT(roleTup); @@ -770,33 +768,29 @@ InitializeSessionUserId(const char *rolename, Oid roleid) rname = NameStr(rform->rolname); is_superuser = rform->rolsuper; - /* In a parallel worker, ParallelWorkerMain already set these variables */ - if (!InitializingParallelWorker) - { - SetAuthenticatedUserId(roleid, is_superuser); + SetAuthenticatedUserId(roleid, is_superuser); - /* - * Set SessionUserId and related variables, including "role", via the - * GUC mechanisms. - * - * Note: ideally we would use PGC_S_DYNAMIC_DEFAULT here, so that - * session_authorization could subsequently be changed from - * pg_db_role_setting entries. Instead, session_authorization in - * pg_db_role_setting has no effect. Changing that would require - * solving two problems: - * - * 1. If pg_db_role_setting has values for both session_authorization - * and role, we could not be sure which order those would be applied - * in, and it would matter. - * - * 2. Sites may have years-old session_authorization entries. There's - * not been any particular reason to remove them. Ending the dormancy - * of those entries could seriously change application behavior, so - * only a major release should do that. - */ - SetConfigOption("session_authorization", rname, - PGC_BACKEND, PGC_S_OVERRIDE); - } + /* + * Set SessionUserId and related variables, including "role", via the GUC + * mechanisms. + * + * Note: ideally we would use PGC_S_DYNAMIC_DEFAULT here, so that + * session_authorization could subsequently be changed from + * pg_db_role_setting entries. Instead, session_authorization in + * pg_db_role_setting has no effect. Changing that would require solving + * two problems: + * + * 1. If pg_db_role_setting has values for both session_authorization and + * role, we could not be sure which order those would be applied in, and + * it would matter. + * + * 2. Sites may have years-old session_authorization entries. There's not + * been any particular reason to remove them. Ending the dormancy of + * those entries could seriously change application behavior, so only a + * major release should do that. + */ + SetConfigOption("session_authorization", rname, + PGC_BACKEND, PGC_S_OVERRIDE); /* * These next checks are not enforced when in standalone mode, so that @@ -815,7 +809,9 @@ InitializeSessionUserId(const char *rolename, Oid roleid) rname))); /* - * Check connection limit for this role. + * Check connection limit for this role. We enforce the limit only + * for regular backends, since other process types have their own + * PGPROC pools. * * There is a race condition here --- we create our PGPROC before * checking for other PGPROCs. If two backends did this at about the @@ -825,6 +821,7 @@ InitializeSessionUserId(const char *rolename, Oid roleid) * just document that the connection limit is approximate. */ if (rform->rolconnlimit >= 0 && + AmRegularBackendProcess() && !is_superuser && CountUserBackends(roleid) > rform->rolconnlimit) ereport(FATAL, diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c index b865575bfda..2baf41a7cd6 100644 --- a/src/backend/utils/init/postinit.c +++ b/src/backend/utils/init/postinit.c @@ -22,7 +22,6 @@ #include "access/genam.h" #include "access/heapam.h" #include "access/htup_details.h" -#include "access/parallel.h" #include "access/session.h" #include "access/sysattr.h" #include "access/tableam.h" @@ -332,13 +331,13 @@ CheckMyDatabase(const char *name, bool am_superuser, bool override_allow_connect * These checks are not enforced when in standalone mode, so that there is * a way to recover from disabling all access to all databases, for * example "UPDATE pg_database SET datallowconn = false;". - * - * We do not enforce them for autovacuum worker processes either. */ - if (IsUnderPostmaster && !IsAutoVacuumWorkerProcess()) + if (IsUnderPostmaster) { /* * Check that the database is currently allowing connections. + * (Background processes can override this test and the next one by + * setting override_allow_connections.) */ if (!dbform->datallowconn && !override_allow_connections) ereport(FATAL, @@ -351,7 +350,7 @@ CheckMyDatabase(const char *name, bool am_superuser, bool override_allow_connect * is redundant, but since we have the flag, might as well check it * and save a few cycles.) */ - if (!am_superuser && + if (!am_superuser && !override_allow_connections && pg_database_aclcheck(MyDatabaseId, GetUserId(), ACL_CONNECT) != ACLCHECK_OK) ereport(FATAL, @@ -360,7 +359,9 @@ CheckMyDatabase(const char *name, bool am_superuser, bool override_allow_connect errdetail("User does not have CONNECT privilege."))); /* - * Check connection limit for this database. + * Check connection limit for this database. We enforce the limit + * only for regular backends, since other process types have their own + * PGPROC pools. * * There is a race condition here --- we create our PGPROC before * checking for other PGPROCs. If two backends did this at about the @@ -370,6 +371,7 @@ CheckMyDatabase(const char *name, bool am_superuser, bool override_allow_connect * just document that the connection limit is approximate. */ if (dbform->datconnlimit >= 0 && + AmRegularBackendProcess() && !am_superuser && CountDBConnections(MyDatabaseId) > dbform->datconnlimit) ereport(FATAL, @@ -773,23 +775,7 @@ InitPostgres(const char *in_dbname, Oid dboid, const char *username, else { InitializeSessionUserId(username, useroid); - - /* - * In a parallel worker, set am_superuser based on the - * authenticated user ID, not the current role. This is pretty - * dubious but it matches our historical behavior. Note that this - * value of am_superuser is used only for connection-privilege - * checks here and in CheckMyDatabase (we won't reach - * process_startup_options in a background worker). - * - * In other cases, there's been no opportunity for the current - * role to diverge from the authenticated user ID yet, so we can - * just rely on superuser() and avoid an extra catalog lookup. - */ - if (InitializingParallelWorker) - am_superuser = superuser_arg(GetAuthenticatedUserId()); - else - am_superuser = superuser(); + am_superuser = superuser(); } } else @@ -830,11 +816,11 @@ InitPostgres(const char *in_dbname, Oid dboid, const char *username, } /* - * The last few connection slots are reserved for superusers. Replication - * connections are drawn from slots reserved with max_wal_senders and not - * limited by max_connections or superuser_reserved_connections. + * The last few regular connection slots are reserved for superusers. We + * do not apply this limit to background processes, since they all have + * their own pools of PGPROC slots. */ - if (!am_superuser && !am_walsender && + if (AmRegularBackendProcess() && !am_superuser && ReservedBackends > 0 && !HaveNFreeProcs(ReservedBackends)) ereport(FATAL, diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h index 8f9a59f6e08..6c5d84891fe 100644 --- a/src/include/miscadmin.h +++ b/src/include/miscadmin.h @@ -340,6 +340,8 @@ typedef enum BackendType extern BackendType MyBackendType; +#define AmRegularBackendProcess() (MyBackendType == B_BACKEND) + extern const char *GetBackendTypeDesc(BackendType backendType); extern void SetDatabasePath(const char *path); diff --git a/src/include/storage/proc.h b/src/include/storage/proc.h index 9cc37aa0d93..02c12df699b 100644 --- a/src/include/storage/proc.h +++ b/src/include/storage/proc.h @@ -170,7 +170,7 @@ struct PGPROC Oid tempNamespaceId; /* OID of temp schema this backend is * using */ - bool isBackgroundWorker; /* true if background worker. */ + bool isBackgroundWorker; /* true if not a regular backend. */ /* * While in hot standby mode, shows that a conflict signal has been sent From 58626e24a95d2709142045447fc310bd1dd65a44 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 30 Dec 2024 08:06:45 +0900 Subject: [PATCH 40/90] Fix handling of orphaned 2PC files in the future at recovery Before 728bd991c3c4, that has improved the support for 2PC files during recovery, the initial logic scanning files in pg_twophase was done so as files in the future of the transaction ID horizon were checked first, followed by a check if a transaction ID is aborted or committed which could involve a pg_xact lookup. After this commit, these checks have been done in reverse order. Files detected as in the future do not have a state that can be checked in pg_xact, hence this caused recovery to fail abruptly should an orphaned 2PC file in the future of the transaction ID horizon exist in pg_twophase at the beginning of recovery. A test is added to check for this scenario, using an empty 2PC with a transaction ID large enough to be in the future when running the test. This test is added in 16 and older versions for now. 17 and newer versions are impacted by a second bug caused by the addition of the epoch in the 2PC file names. An equivalent test will be added in these branches in a follow-up commit, once the second set of issues reported are fixed. Author: Vitaly Davydov, Michael Paquier Discussion: https://postgr.es/m/11e597-676ab680-8d-374f23c0@145466129 Backpatch-through: 13 --- src/backend/access/transam/twophase.c | 16 ++++++++-------- src/test/recovery/t/009_twophase.pl | 25 ++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c index 16848fa226c..9f1616c8773 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -2156,40 +2156,40 @@ ProcessTwoPhaseBuffer(TransactionId xid, if (!fromdisk) Assert(prepare_start_lsn != InvalidXLogRecPtr); - /* Already processed? */ - if (TransactionIdDidCommit(xid) || TransactionIdDidAbort(xid)) + /* Reject XID if too new */ + if (TransactionIdFollowsOrEquals(xid, origNextXid)) { if (fromdisk) { ereport(WARNING, - (errmsg("removing stale two-phase state file for transaction %u", + (errmsg("removing future two-phase state file for transaction %u", xid))); RemoveTwoPhaseFile(xid, true); } else { ereport(WARNING, - (errmsg("removing stale two-phase state from memory for transaction %u", + (errmsg("removing future two-phase state from memory for transaction %u", xid))); PrepareRedoRemove(xid, true); } return NULL; } - /* Reject XID if too new */ - if (TransactionIdFollowsOrEquals(xid, origNextXid)) + /* Already processed? */ + if (TransactionIdDidCommit(xid) || TransactionIdDidAbort(xid)) { if (fromdisk) { ereport(WARNING, - (errmsg("removing future two-phase state file for transaction %u", + (errmsg("removing stale two-phase state file for transaction %u", xid))); RemoveTwoPhaseFile(xid, true); } else { ereport(WARNING, - (errmsg("removing future two-phase state from memory for transaction %u", + (errmsg("removing stale two-phase state from memory for transaction %u", xid))); PrepareRedoRemove(xid, true); } diff --git a/src/test/recovery/t/009_twophase.pl b/src/test/recovery/t/009_twophase.pl index a5686db2526..59c186a1c82 100644 --- a/src/test/recovery/t/009_twophase.pl +++ b/src/test/recovery/t/009_twophase.pl @@ -7,7 +7,7 @@ use PostgresNode; use TestLib; -use Test::More tests => 27; +use Test::More tests => 28; my $psql_out = ''; my $psql_rc = ''; @@ -527,3 +527,26 @@ sub configure_and_reload is( $psql_out, qq{27|issued to paris}, "Check expected t_009_tbl2 data on standby"); + +############################################################################### +# Check handling of orphaned 2PC files at recovery. +############################################################################### + +$cur_primary->teardown_node; + +# Grab location in logs of primary +my $log_offset = -s $cur_primary->logfile; + +# Create a fake file with a transaction ID large enough to be in the future, +# then check that the primary is able to start and remove this file at +# recovery. + +my $future_2pc_file = $cur_primary->data_dir . '/pg_twophase/00FFFFFF'; +append_to_file $future_2pc_file, ""; + +$cur_primary->start; +$cur_primary->log_check( + "future two-phase file removed at recovery", + $log_offset, + log_like => + [qr/removing future two-phase state file for transaction 16777215/]); From 6a2440167a8b778277907e8babea1840d1c5eee0 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Wed, 1 Jan 2025 11:21:54 -0500 Subject: [PATCH 41/90] Update copyright for 2025 Backpatch-through: 13 --- COPYRIGHT | 2 +- doc/src/sgml/legal.sgml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/COPYRIGHT b/COPYRIGHT index 16f9b46a3fe..be2d694b038 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -1,7 +1,7 @@ PostgreSQL Database Management System (formerly known as Postgres, then as Postgres95) -Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group +Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group Portions Copyright (c) 1994, The Regents of the University of California diff --git a/doc/src/sgml/legal.sgml b/doc/src/sgml/legal.sgml index d6c77f3516b..af13bf2e055 100644 --- a/doc/src/sgml/legal.sgml +++ b/doc/src/sgml/legal.sgml @@ -1,9 +1,9 @@ -2024 +2025 - 1996–2024 + 1996–2025 The PostgreSQL Global Development Group @@ -11,7 +11,7 @@ Legal Notice - PostgreSQL is Copyright © 1996–2024 + PostgreSQL is Copyright © 1996–2025 by the PostgreSQL Global Development Group. From 9577dd523b3e3bb7fba66e708dfb9ca76e299b7e Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Fri, 3 Jan 2025 09:23:46 -0500 Subject: [PATCH 42/90] Document strange jsonb sort order for empty top level arrays Slightly faulty logic in the original jsonb code (commit d9134d0a355) results in an empty top level array sorting less than a json null. We can't change the sort order now since it would affect btree indexes over jsonb, so document the anomaly. Backpatch to all live branches (13 .. 17) In master, also add a code comment noting the anomaly. Reported-by: Yan Chengpen Reviewed-by: Jian He Discussion: https://postgr.es/m/OSBPR01MB45199DD8DA2D1CECD50518188E272@OSBPR01MB4519.jpnprd01.prod.outlook.com --- doc/src/sgml/json.sgml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/src/sgml/json.sgml b/doc/src/sgml/json.sgml index 339fcba4f9e..c5818566692 100644 --- a/doc/src/sgml/json.sgml +++ b/doc/src/sgml/json.sgml @@ -584,12 +584,13 @@ SELECT jdoc->'guid', jdoc->'name' FROM api WHERE jdoc @@ '$.tags[*] == "qui"'; The btree ordering for jsonb datums is seldom of great interest, but for completeness it is: -Object > Array > Boolean > Number > String > Null +Object > Array > Boolean > Number > String > null Object with n pairs > object with n - 1 pairs Array with n elements > array with n - 1 elements + with the exception that (for historical reasons) an empty top level array sorts less than null. Objects with equal numbers of pairs are compared in the order: key-1, value-1, key-2 ... From f154f028d856bf5ad6ec419d7947865c172d14ae Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Wed, 8 Jan 2025 07:50:30 +1300 Subject: [PATCH 43/90] Restore smgrtruncate() prototype in back-branches. It's possible that external code is calling smgrtruncate(). Any external callers might like to consider the recent changes to RelationTruncate(), but commit 38c579b0 should not have changed the function prototype in the back-branches, per ABI stability policy. Restore smgrtruncate()'s traditional argument list in the back-branches, but make it a wrapper for a new function smgrtruncate2(). The three callers in core can use smgrtruncate2() directly. In master (18-to-be), smgrtruncate2() is effectively renamed to smgrtruncate(), so this wart is cleaned up. Reviewed-by: Michael Paquier Discussion: https://postgr.es/m/CA%2BhUKG%2BThae6x6%2BjmQiuALQBT2Ae1ChjMh1%3DkMvJ8y_SBJZrvA%40mail.gmail.com --- contrib/pg_visibility/pg_visibility.c | 2 +- src/backend/catalog/storage.c | 4 ++-- src/backend/storage/smgr/smgr.c | 24 ++++++++++++++++++++++-- src/include/storage/smgr.h | 4 +++- 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/contrib/pg_visibility/pg_visibility.c b/contrib/pg_visibility/pg_visibility.c index 13d9eb031dc..5e41e1a9329 100644 --- a/contrib/pg_visibility/pg_visibility.c +++ b/contrib/pg_visibility/pg_visibility.c @@ -429,7 +429,7 @@ pg_truncate_visibility_map(PG_FUNCTION_ARGS) } if (BlockNumberIsValid(block)) - smgrtruncate(RelationGetSmgr(rel), &fork, 1, &old_block, &block); + smgrtruncate2(RelationGetSmgr(rel), &fork, 1, &old_block, &block); END_CRIT_SECTION(); MyProc->delayChkpt = false; diff --git a/src/backend/catalog/storage.c b/src/backend/catalog/storage.c index 0ac91be63dc..f563f2a1690 100644 --- a/src/backend/catalog/storage.c +++ b/src/backend/catalog/storage.c @@ -409,7 +409,7 @@ RelationTruncate(Relation rel, BlockNumber nblocks) * longer exist after truncation is complete, and then truncate the * corresponding files on disk. */ - smgrtruncate(RelationGetSmgr(rel), forks, nforks, old_blocks, blocks); + smgrtruncate2(RelationGetSmgr(rel), forks, nforks, old_blocks, blocks); END_CRIT_SECTION(); @@ -1069,7 +1069,7 @@ smgr_redo(XLogReaderState *record) if (nforks > 0) { START_CRIT_SECTION(); - smgrtruncate(reln, forks, nforks, old_blocks, blocks); + smgrtruncate2(reln, forks, nforks, old_blocks, blocks); END_CRIT_SECTION(); } diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c index 9e6500ff981..6676e0cae5c 100644 --- a/src/backend/storage/smgr/smgr.c +++ b/src/backend/storage/smgr/smgr.c @@ -586,6 +586,26 @@ smgrnblocks_cached(SMgrRelation reln, ForkNumber forknum) * smgrtruncate() -- Truncate the given forks of supplied relation to * each specified numbers of blocks * + * Backward-compatible version of smgrtruncate2() for the benefit of external + * callers. This version isn't used in PostgreSQL core code, and can't be + * used in a critical section. + */ +void +smgrtruncate(SMgrRelation reln, ForkNumber *forknum, int nforks, + BlockNumber *nblocks) +{ + BlockNumber old_nblocks[MAX_FORKNUM + 1]; + + for (int i = 0; i < nforks; ++i) + old_nblocks[i] = smgrnblocks(reln, forknum[i]); + + return smgrtruncate2(reln, forknum, nforks, old_nblocks, nblocks); +} + +/* + * smgrtruncate2() -- Truncate the given forks of supplied relation to + * each specified numbers of blocks + * * The truncation is done immediately, so this can't be rolled back. * * The caller must hold AccessExclusiveLock on the relation, to ensure that @@ -597,8 +617,8 @@ smgrnblocks_cached(SMgrRelation reln, ForkNumber forknum) * to this relation should be called in between. */ void -smgrtruncate(SMgrRelation reln, ForkNumber *forknum, int nforks, - BlockNumber *old_nblocks, BlockNumber *nblocks) +smgrtruncate2(SMgrRelation reln, ForkNumber *forknum, int nforks, + BlockNumber *old_nblocks, BlockNumber *nblocks) { int i; diff --git a/src/include/storage/smgr.h b/src/include/storage/smgr.h index c7dc19d5407..6d404057561 100644 --- a/src/include/storage/smgr.h +++ b/src/include/storage/smgr.h @@ -101,8 +101,10 @@ extern void smgrwriteback(SMgrRelation reln, ForkNumber forknum, extern BlockNumber smgrnblocks(SMgrRelation reln, ForkNumber forknum); extern BlockNumber smgrnblocks_cached(SMgrRelation reln, ForkNumber forknum); extern void smgrtruncate(SMgrRelation reln, ForkNumber *forknum, int nforks, - BlockNumber *old_nblocks, BlockNumber *nblocks); +extern void smgrtruncate2(SMgrRelation reln, ForkNumber *forknum, int nforks, + BlockNumber *old_nblocks, + BlockNumber *nblocks); extern void smgrimmedsync(SMgrRelation reln, ForkNumber forknum); extern void AtEOXact_SMgr(void); From c53d90bb47ae488beebe64d651ef926c86a51bde Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 8 Jan 2025 08:47:19 +0900 Subject: [PATCH 44/90] Fix memory leak in pgoutput with relation attribute map pgoutput caches the attribute map of a relation, that is free()'d only when validating a RelationSyncEntry. However, this code path is not taken when calling any of the SQL functions able to do some logical decoding, like pg_logical_slot_{get,peek}_changes(), leaking some memory into CacheMemoryContext on repeated calls. This is a follow-up of c9b3d4909bbf, this time for v13 and v14. The relation attribute map is stored in a dedicated memory context, tracked with a static variable whose state is reset with a MemoryContext reset callback attached to PGOutputData->context. This implementation is similar to the approach taken by cfd6cbcf9be0. Reported-by: Masahiko Sawada Author: Vignesh C Reviewed-by: Hou Zhijie Discussion: https://postgr.es/m/CAD21AoDkAhQVSukOfH3_reuF-j4EU0-HxMqU3dU+bSTxsqT14Q@mail.gmail.com Discussion: https://postgr.es/m/CALDaNm1hewNAsZ_e6FF52a=9drmkRJxtEPrzCB6-9mkJyeBBqA@mail.gmail.com Backpatch-through: 13 --- src/backend/replication/pgoutput/pgoutput.c | 30 ++++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c index 9fd879ee0c8..a81215cff86 100644 --- a/src/backend/replication/pgoutput/pgoutput.c +++ b/src/backend/replication/pgoutput/pgoutput.c @@ -66,11 +66,13 @@ static bool publications_valid; static bool in_streaming; /* - * Private memory context for publication data, created in - * PGOutputData->context when starting pgoutput, and set to NULL when its - * parent context is reset via a dedicated MemoryContextCallback. + * Private memory contexts for publication data and relation attribute + * map, created in PGOutputData->context when starting pgoutput, and set + * to NULL when its parent context is reset via a dedicated + * MemoryContextCallback. */ static MemoryContext pubctx = NULL; +static MemoryContext cachectx = NULL; static List *LoadPublications(List *pubnames); static void publication_invalidation_cb(Datum arg, int cacheid, @@ -260,12 +262,14 @@ parse_output_parameters(List *options, PGOutputData *data) } /* - * Callback of PGOutputData->context in charge of cleaning pubctx. + * Callback of PGOutputData->context in charge of cleaning pubctx and + * cachectx. */ static void -pgoutput_pubctx_reset_callback(void *arg) +pgoutput_ctx_reset_callback(void *arg) { pubctx = NULL; + cachectx = NULL; } /* @@ -289,8 +293,13 @@ pgoutput_startup(LogicalDecodingContext *ctx, OutputPluginOptions *opt, "logical replication publication list context", ALLOCSET_SMALL_SIZES); + Assert(cachectx == NULL); + cachectx = AllocSetContextCreate(ctx->context, + "logical replication cache context", + ALLOCSET_SMALL_SIZES); + mcallback = palloc0(sizeof(MemoryContextCallback)); - mcallback->func = pgoutput_pubctx_reset_callback; + mcallback->func = pgoutput_ctx_reset_callback; MemoryContextRegisterResetCallback(ctx->context, mcallback); ctx->output_plugin_private = data; @@ -489,8 +498,8 @@ maybe_send_schema(LogicalDecodingContext *ctx, TupleDesc outdesc = RelationGetDescr(ancestor); MemoryContext oldctx; - /* Map must live as long as the session does. */ - oldctx = MemoryContextSwitchTo(CacheMemoryContext); + /* Map must live as long as the logical decoding context. */ + oldctx = MemoryContextSwitchTo(cachectx); /* * Make copies of the TupleDescs that will live as long as the map @@ -812,8 +821,8 @@ pgoutput_origin_filter(LogicalDecodingContext *ctx, /* * Shutdown the output plugin. * - * Note, we don't need to clean the data->context and pubctx as they are - * child contexts of the ctx->context so they will be cleaned up by logical + * Note, we don't need to clean the data->context, pubctx and cachectx as they + * are child contexts of the ctx->context so they will be cleaned up by logical * decoding machinery. */ static void @@ -827,6 +836,7 @@ pgoutput_shutdown(LogicalDecodingContext *ctx) /* Better safe than sorry */ pubctx = NULL; + cachectx = NULL; } /* From 049c8cb9a239c9b7136174eb038fc7cd902b487e Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Wed, 8 Jan 2025 16:54:45 +1300 Subject: [PATCH 45/90] Fix C error reported by Oracle compiler. Commit 66aaabe7 (branches 13 - 17 only) was not acceptable to the Oracle Developer Studio compiler on build farm animal wrasse. It accidentally used a C++ style return statement to wrap a void function. None of the usual compilers complained, but it is right, that is not allowed in C. Fix. Reported-by: Michael Paquier Discussion: https://postgr.es/m/Z33vgfVgvOnbFLN9%40paquier.xyz --- src/backend/storage/smgr/smgr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c index 6676e0cae5c..8892473d858 100644 --- a/src/backend/storage/smgr/smgr.c +++ b/src/backend/storage/smgr/smgr.c @@ -599,7 +599,7 @@ smgrtruncate(SMgrRelation reln, ForkNumber *forknum, int nforks, for (int i = 0; i < nforks; ++i) old_nblocks[i] = smgrnblocks(reln, forknum[i]); - return smgrtruncate2(reln, forknum, nforks, old_nblocks, nblocks); + smgrtruncate2(reln, forknum, nforks, old_nblocks, nblocks); } /* From 1636c5e56ed72e53127fc4cb0095422d9a0d250a Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Thu, 9 Jan 2025 12:10:26 +1300 Subject: [PATCH 46/90] Provide 64-bit ftruncate() and lseek() on Windows. Change our ftruncate() macro to use the 64-bit variant of chsize(), and add a new macro to redirect lseek() to _lseeki64(). Back-patch to all supported releases, in preparation for a bug fix. Tested-by: Davinder Singh Discussion: https://postgr.es/m/CAKZiRmyM4YnokK6Oenw5JKwAQ3rhP0YTz2T-tiw5dAQjGRXE3Q%40mail.gmail.com --- src/include/port.h | 27 +++++++++++++++++++++++++++ src/include/port/win32_port.h | 2 -- src/pl/plperl/plperl_system.h | 1 + 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/include/port.h b/src/include/port.h index da18268d17d..3a2601fdc01 100644 --- a/src/include/port.h +++ b/src/include/port.h @@ -293,6 +293,33 @@ extern bool rmtree(const char *path, bool rmtopdir); #if defined(WIN32) && !defined(__CYGWIN__) +/* + * We want the 64-bit variant of lseek(). + * + * For Visual Studio, this must be after to avoid messing up its + * lseek() and _lseeki64() function declarations. + * + * For MinGW there is already a macro, so we have to undefine it (depending on + * _FILE_OFFSET_BITS, it may point at its own lseek64, but we don't want to + * count on that being set). + */ +#undef lseek +#define lseek(a,b,c) _lseeki64((a),(b),(c)) + +/* + * We want the 64-bit variant of chsize(). It sets errno and also returns it, + * so convert non-zero result to -1 to match POSIX. + * + * Prevent MinGW from declaring functions, and undefine its macro before we + * define our own. + */ +#ifndef _MSC_VER +#define FTRUNCATE_DEFINED +#include +#undef ftruncate +#endif +#define ftruncate(a,b) (_chsize_s((a),(b)) == 0 ? 0 : -1) + /* * open() and fopen() replacements to allow deletion of open files and * passing of other special options. diff --git a/src/include/port/win32_port.h b/src/include/port/win32_port.h index 9ca80e574e9..be3af013368 100644 --- a/src/include/port/win32_port.h +++ b/src/include/port/win32_port.h @@ -62,8 +62,6 @@ /* Must be here to avoid conflicting with prototype in windows.h */ #define mkdir(a,b) mkdir(a) -#define ftruncate(a,b) chsize(a,b) - /* Windows doesn't have fsync() as such, use _commit() */ #define fsync(fd) _commit(fd) diff --git a/src/pl/plperl/plperl_system.h b/src/pl/plperl/plperl_system.h index 61550db2a5d..96cb217d104 100644 --- a/src/pl/plperl/plperl_system.h +++ b/src/pl/plperl/plperl_system.h @@ -109,6 +109,7 @@ #undef fstat #undef kill #undef listen +#undef lseek #undef lstat #undef mkdir #undef open From 8f40d46126a04105ff0aa8353ec62c3c7d31af60 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Thu, 9 Jan 2025 13:17:36 +1300 Subject: [PATCH 47/90] Fix off_t overflow in pg_basebackup on Windows. walmethods.c used off_t to navigate around a pg_wal.tar file that could exceed 2GB, which doesn't work on Windows and would fail with misleading errors. Use pgoff_t instead. Back-patch to all supported branches. Author: Davinder Singh Reported-by: Jakub Wartak Discussion: https://postgr.es/m/CAKZiRmyM4YnokK6Oenw5JKwAQ3rhP0YTz2T-tiw5dAQjGRXE3Q%40mail.gmail.com --- src/bin/pg_basebackup/receivelog.c | 2 +- src/bin/pg_basebackup/walmethods.c | 10 +++++----- src/bin/pg_basebackup/walmethods.h | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/bin/pg_basebackup/receivelog.c b/src/bin/pg_basebackup/receivelog.c index 682081b4310..73620e0daf3 100644 --- a/src/bin/pg_basebackup/receivelog.c +++ b/src/bin/pg_basebackup/receivelog.c @@ -190,7 +190,7 @@ open_walfile(StreamCtl *stream, XLogRecPtr startpoint) static bool close_walfile(StreamCtl *stream, XLogRecPtr pos) { - off_t currpos; + pgoff_t currpos; int r; if (walfile == NULL) diff --git a/src/bin/pg_basebackup/walmethods.c b/src/bin/pg_basebackup/walmethods.c index e91eb8f42ff..bc214dd4250 100644 --- a/src/bin/pg_basebackup/walmethods.c +++ b/src/bin/pg_basebackup/walmethods.c @@ -55,7 +55,7 @@ static DirectoryMethodData *dir_data = NULL; typedef struct DirectoryMethodFile { int fd; - off_t currpos; + pgoff_t currpos; char *pathname; char *fullpath; char *temp_suffix; @@ -241,7 +241,7 @@ dir_write(Walfile f, const void *buf, size_t count) return r; } -static off_t +static pgoff_t dir_get_current_pos(Walfile f) { Assert(f != NULL); @@ -468,8 +468,8 @@ FreeWalDirectoryMethod(void) typedef struct TarMethodFile { - off_t ofs_start; /* Where does the *header* for this file start */ - off_t currpos; + pgoff_t ofs_start; /* Where does the *header* for this file start */ + pgoff_t currpos; char header[TAR_BLOCK_SIZE]; char *pathname; size_t pad_to_size; @@ -801,7 +801,7 @@ tar_compression(void) return tar_data->compression; } -static off_t +static pgoff_t tar_get_current_pos(Walfile f) { Assert(f != NULL); diff --git a/src/bin/pg_basebackup/walmethods.h b/src/bin/pg_basebackup/walmethods.h index 4abdfd8333f..b15a24bcaca 100644 --- a/src/bin/pg_basebackup/walmethods.h +++ b/src/bin/pg_basebackup/walmethods.h @@ -68,7 +68,7 @@ struct WalWriteMethod ssize_t (*write) (Walfile f, const void *buf, size_t count); /* Return the current position in a file or -1 on error */ - off_t (*get_current_pos) (Walfile f); + pgoff_t (*get_current_pos) (Walfile f); /* * fsync the contents of the specified file. Returns 0 on success. From 83ffb9f20f06120273304332594b7fab159f738f Mon Sep 17 00:00:00 2001 From: Daniel Gustafsson Date: Fri, 10 Jan 2025 22:02:58 +0100 Subject: [PATCH 48/90] Fix missing ldapscheme option in pg_hba_file_rules() The ldapscheme option was missed when inspecing the HbaLine for assembling rows for the pg_hba_file_rules function. Backpatch to all supported versions. Author: Laurenz Albe Reported-by: Laurenz Albe Reviewed-by: Daniel Gustafsson Bug: 18769 Discussion: https://postgr.es/m/18769-dd8610cbc0405172@postgresql.org Backpatch-through: v13 --- src/backend/libpq/hba.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c index 40ad8c12b47..48a1ec85ef6 100644 --- a/src/backend/libpq/hba.c +++ b/src/backend/libpq/hba.c @@ -2383,6 +2383,10 @@ gethba_options(HbaLine *hba) options[noptions++] = CStringGetTextDatum(psprintf("ldapport=%d", hba->ldapport)); + if (hba->ldapscheme) + options[noptions++] = + CStringGetTextDatum(psprintf("ldapscheme=%s", hba->ldapscheme)); + if (hba->ldaptls) options[noptions++] = CStringGetTextDatum("ldaptls=true"); From bcb4db0d379f39a913c8c38d5c6ca5006435be7a Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 11 Jan 2025 11:45:56 -0500 Subject: [PATCH 49/90] Repair memory leaks in plpython. PLy_spi_execute_plan (PLyPlan.execute) and PLy_cursor_plan (plpy.cursor) use PLy_output_convert to convert Python values into Datums that can be passed to the query-to-execute. But they failed to pay much attention to its warning that it can leave "cruft generated along the way" behind. Repeated use of these methods can result in a substantial memory leak for the duration of the calling plpython function. To fix, make a temporary memory context to invoke PLy_output_convert in. This also lets us get rid of the rather fragile code that was here for retail pfree's of the converted Datums. Indeed, we don't need the PLyPlanObject.values field anymore at all, though I left it in place in the back branches in the name of ABI stability. Mat Arye and Tom Lane, per report from Mat Arye. Back-patch to all supported branches. Discussion: https://postgr.es/m/CADsUR0DvVgnZYWwnmKRK65MZg7YLUSTDLV61qdnrwtrAJgU6xw@mail.gmail.com --- src/pl/plpython/plpy_cursorobject.c | 52 ++++++++++++-------------- src/pl/plpython/plpy_spi.c | 58 +++++++++++++---------------- 2 files changed, 49 insertions(+), 61 deletions(-) diff --git a/src/pl/plpython/plpy_cursorobject.c b/src/pl/plpython/plpy_cursorobject.c index 08d8b607e38..d783819e82a 100644 --- a/src/pl/plpython/plpy_cursorobject.c +++ b/src/pl/plpython/plpy_cursorobject.c @@ -142,7 +142,6 @@ PLy_cursor_plan(PyObject *ob, PyObject *args) { PLyCursorObject *cursor; volatile int nargs; - int i; PLyPlanObject *plan; PLyExecutionContext *exec_ctx = PLy_current_execution_context(); volatile MemoryContext oldcontext; @@ -201,13 +200,30 @@ PLy_cursor_plan(PyObject *ob, PyObject *args) PG_TRY(); { Portal portal; + MemoryContext tmpcontext; + Datum *volatile values; char *volatile nulls; volatile int j; + /* + * Converted arguments and associated cruft will be in this context, + * which is local to our subtransaction. + */ + tmpcontext = AllocSetContextCreate(CurTransactionContext, + "PL/Python temporary context", + ALLOCSET_SMALL_SIZES); + MemoryContextSwitchTo(tmpcontext); + if (nargs > 0) - nulls = palloc(nargs * sizeof(char)); + { + values = (Datum *) palloc(nargs * sizeof(Datum)); + nulls = (char *) palloc(nargs * sizeof(char)); + } else + { + values = NULL; nulls = NULL; + } for (j = 0; j < nargs; j++) { @@ -219,7 +235,7 @@ PLy_cursor_plan(PyObject *ob, PyObject *args) { bool isnull; - plan->values[j] = PLy_output_convert(arg, elem, &isnull); + values[j] = PLy_output_convert(arg, elem, &isnull); nulls[j] = isnull ? 'n' : ' '; } PG_FINALLY(); @@ -229,7 +245,9 @@ PLy_cursor_plan(PyObject *ob, PyObject *args) PG_END_TRY(); } - portal = SPI_cursor_open(NULL, plan->plan, plan->values, nulls, + MemoryContextSwitchTo(oldcontext); + + portal = SPI_cursor_open(NULL, plan->plan, values, nulls, exec_ctx->curr_proc->fn_readonly); if (portal == NULL) elog(ERROR, "SPI_cursor_open() failed: %s", @@ -239,40 +257,18 @@ PLy_cursor_plan(PyObject *ob, PyObject *args) PinPortal(portal); + MemoryContextDelete(tmpcontext); PLy_spi_subtransaction_commit(oldcontext, oldowner); } PG_CATCH(); { - int k; - - /* cleanup plan->values array */ - for (k = 0; k < nargs; k++) - { - if (!plan->args[k].typbyval && - (plan->values[k] != PointerGetDatum(NULL))) - { - pfree(DatumGetPointer(plan->values[k])); - plan->values[k] = PointerGetDatum(NULL); - } - } - Py_DECREF(cursor); - + /* Subtransaction abort will remove the tmpcontext */ PLy_spi_subtransaction_abort(oldcontext, oldowner); return NULL; } PG_END_TRY(); - for (i = 0; i < nargs; i++) - { - if (!plan->args[i].typbyval && - (plan->values[i] != PointerGetDatum(NULL))) - { - pfree(DatumGetPointer(plan->values[i])); - plan->values[i] = PointerGetDatum(NULL); - } - } - Assert(cursor->portalname != NULL); return (PyObject *) cursor; } diff --git a/src/pl/plpython/plpy_spi.c b/src/pl/plpython/plpy_spi.c index 86d70470a74..53af9c05efa 100644 --- a/src/pl/plpython/plpy_spi.c +++ b/src/pl/plpython/plpy_spi.c @@ -177,8 +177,7 @@ PyObject * PLy_spi_execute_plan(PyObject *ob, PyObject *list, long limit) { volatile int nargs; - int i, - rv; + int rv; PLyPlanObject *plan; volatile MemoryContext oldcontext; volatile ResourceOwner oldowner; @@ -224,13 +223,30 @@ PLy_spi_execute_plan(PyObject *ob, PyObject *list, long limit) PG_TRY(); { PLyExecutionContext *exec_ctx = PLy_current_execution_context(); + MemoryContext tmpcontext; + Datum *volatile values; char *volatile nulls; volatile int j; + /* + * Converted arguments and associated cruft will be in this context, + * which is local to our subtransaction. + */ + tmpcontext = AllocSetContextCreate(CurTransactionContext, + "PL/Python temporary context", + ALLOCSET_SMALL_SIZES); + MemoryContextSwitchTo(tmpcontext); + if (nargs > 0) - nulls = palloc(nargs * sizeof(char)); + { + values = (Datum *) palloc(nargs * sizeof(Datum)); + nulls = (char *) palloc(nargs * sizeof(char)); + } else + { + values = NULL; nulls = NULL; + } for (j = 0; j < nargs; j++) { @@ -242,7 +258,7 @@ PLy_spi_execute_plan(PyObject *ob, PyObject *list, long limit) { bool isnull; - plan->values[j] = PLy_output_convert(arg, elem, &isnull); + values[j] = PLy_output_convert(arg, elem, &isnull); nulls[j] = isnull ? 'n' : ' '; } PG_FINALLY(); @@ -252,47 +268,23 @@ PLy_spi_execute_plan(PyObject *ob, PyObject *list, long limit) PG_END_TRY(); } - rv = SPI_execute_plan(plan->plan, plan->values, nulls, + MemoryContextSwitchTo(oldcontext); + + rv = SPI_execute_plan(plan->plan, values, nulls, exec_ctx->curr_proc->fn_readonly, limit); ret = PLy_spi_execute_fetch_result(SPI_tuptable, SPI_processed, rv); - if (nargs > 0) - pfree(nulls); - + MemoryContextDelete(tmpcontext); PLy_spi_subtransaction_commit(oldcontext, oldowner); } PG_CATCH(); { - int k; - - /* - * cleanup plan->values array - */ - for (k = 0; k < nargs; k++) - { - if (!plan->args[k].typbyval && - (plan->values[k] != PointerGetDatum(NULL))) - { - pfree(DatumGetPointer(plan->values[k])); - plan->values[k] = PointerGetDatum(NULL); - } - } - + /* Subtransaction abort will remove the tmpcontext */ PLy_spi_subtransaction_abort(oldcontext, oldowner); return NULL; } PG_END_TRY(); - for (i = 0; i < nargs; i++) - { - if (!plan->args[i].typbyval && - (plan->values[i] != PointerGetDatum(NULL))) - { - pfree(DatumGetPointer(plan->values[i])); - plan->values[i] = PointerGetDatum(NULL); - } - } - if (rv < 0) { PLy_exception_set(PLy_exc_spi_error, From dc8cd9cd0198ff1d87815e74b101b4c03754f513 Mon Sep 17 00:00:00 2001 From: Dean Rasheed Date: Sun, 12 Jan 2025 13:01:22 +0000 Subject: [PATCH 50/90] Fix XMLTABLE() deparsing to quote namespace names if necessary. When deparsing an XMLTABLE() expression, XML namespace names were not quoted. However, since they are parsed as ColLabel tokens, some names require double quotes to ensure that they are properly interpreted. Fix by using quote_identifier() in the deparsing code. Back-patch to all supported versions. Dean Rasheed, reviewed by Tom Lane. Discussion: https://postgr.es/m/CAEZATCXTpAS%3DncfLNTZ7YS6O5puHeLg_SUYAit%2Bcs7wsrd9Msg%40mail.gmail.com --- src/backend/utils/adt/ruleutils.c | 3 ++- src/test/regress/expected/xml.out | 10 +++++++--- src/test/regress/expected/xml_1.out | 8 +++++--- src/test/regress/expected/xml_2.out | 10 +++++++--- src/test/regress/sql/xml.sql | 8 +++++--- 5 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 993e28a273c..55330047cce 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -10692,7 +10692,8 @@ get_tablefunc(TableFunc *tf, deparse_context *context, bool showimplicit) if (ns_node != NULL) { get_rule_expr(expr, context, showimplicit); - appendStringInfo(buf, " AS %s", strVal(ns_node)); + appendStringInfo(buf, " AS %s", + quote_identifier(strVal(ns_node))); } else { diff --git a/src/test/regress/expected/xml.out b/src/test/regress/expected/xml.out index 5b6ae62c044..f9b7ec0bab8 100644 --- a/src/test/regress/expected/xml.out +++ b/src/test/regress/expected/xml.out @@ -1149,16 +1149,20 @@ SELECT * FROM XMLTABLE(XMLNAMESPACES('http://x.y' AS zz), 10 (1 row) -CREATE VIEW xmltableview2 AS SELECT * FROM XMLTABLE(XMLNAMESPACES('http://x.y' AS zz), - '/zz:rows/zz:row' +CREATE VIEW xmltableview2 AS SELECT * FROM XMLTABLE(XMLNAMESPACES('http://x.y' AS "Zz"), + '/Zz:rows/Zz:row' PASSING '10' - COLUMNS a int PATH 'zz:a'); + COLUMNS a int PATH 'Zz:a'); SELECT * FROM xmltableview2; a ---- 10 (1 row) +\sv xmltableview2 +CREATE OR REPLACE VIEW public.xmltableview2 AS + SELECT "xmltable".a + FROM XMLTABLE(XMLNAMESPACES ('http://x.y'::text AS "Zz"), ('/Zz:rows/Zz:row'::text) PASSING ('10'::xml) COLUMNS a integer PATH ('Zz:a'::text)) SELECT * FROM XMLTABLE(XMLNAMESPACES(DEFAULT 'http://x.y'), '/rows/row' PASSING '10' diff --git a/src/test/regress/expected/xml_1.out b/src/test/regress/expected/xml_1.out index 897ed382f12..fcf5d0f4aa2 100644 --- a/src/test/regress/expected/xml_1.out +++ b/src/test/regress/expected/xml_1.out @@ -1029,10 +1029,10 @@ LINE 3: PASSING '10' - COLUMNS a int PATH 'zz:a'); + COLUMNS a int PATH 'Zz:a'); ERROR: unsupported XML feature LINE 3: PASSING '10' diff --git a/src/test/regress/expected/xml_2.out b/src/test/regress/expected/xml_2.out index 6638458ba2d..044a4917d86 100644 --- a/src/test/regress/expected/xml_2.out +++ b/src/test/regress/expected/xml_2.out @@ -1135,16 +1135,20 @@ SELECT * FROM XMLTABLE(XMLNAMESPACES('http://x.y' AS zz), 10 (1 row) -CREATE VIEW xmltableview2 AS SELECT * FROM XMLTABLE(XMLNAMESPACES('http://x.y' AS zz), - '/zz:rows/zz:row' +CREATE VIEW xmltableview2 AS SELECT * FROM XMLTABLE(XMLNAMESPACES('http://x.y' AS "Zz"), + '/Zz:rows/Zz:row' PASSING '10' - COLUMNS a int PATH 'zz:a'); + COLUMNS a int PATH 'Zz:a'); SELECT * FROM xmltableview2; a ---- 10 (1 row) +\sv xmltableview2 +CREATE OR REPLACE VIEW public.xmltableview2 AS + SELECT "xmltable".a + FROM XMLTABLE(XMLNAMESPACES ('http://x.y'::text AS "Zz"), ('/Zz:rows/Zz:row'::text) PASSING ('10'::xml) COLUMNS a integer PATH ('Zz:a'::text)) SELECT * FROM XMLTABLE(XMLNAMESPACES(DEFAULT 'http://x.y'), '/rows/row' PASSING '10' diff --git a/src/test/regress/sql/xml.sql b/src/test/regress/sql/xml.sql index e3f90db4d56..e908b6c3957 100644 --- a/src/test/regress/sql/xml.sql +++ b/src/test/regress/sql/xml.sql @@ -393,13 +393,15 @@ SELECT * FROM XMLTABLE(XMLNAMESPACES('http://x.y' AS zz), PASSING '10' COLUMNS a int PATH 'zz:a'); -CREATE VIEW xmltableview2 AS SELECT * FROM XMLTABLE(XMLNAMESPACES('http://x.y' AS zz), - '/zz:rows/zz:row' +CREATE VIEW xmltableview2 AS SELECT * FROM XMLTABLE(XMLNAMESPACES('http://x.y' AS "Zz"), + '/Zz:rows/Zz:row' PASSING '10' - COLUMNS a int PATH 'zz:a'); + COLUMNS a int PATH 'Zz:a'); SELECT * FROM xmltableview2; +\sv xmltableview2 + SELECT * FROM XMLTABLE(XMLNAMESPACES(DEFAULT 'http://x.y'), '/rows/row' PASSING '10' From 9e596a099ad49ad45065203f232bebc535e7ff5a Mon Sep 17 00:00:00 2001 From: Daniel Gustafsson Date: Sun, 12 Jan 2025 23:44:39 +0100 Subject: [PATCH 51/90] Fix HBA option count Commit 27a1f8d108 missed updating the max HBA option count to account for the new option added. Fix by bumping the counter and adjust the relevant comment to match. Backpatch down to all supported branches like the erroneous commit. Reported-by: Tom Lane Discussion: https://postgr.es/m/286764.1736697356@sss.pgh.pa.us Backpatch-through: v13 --- src/backend/libpq/hba.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c index 48a1ec85ef6..2a545486789 100644 --- a/src/backend/libpq/hba.c +++ b/src/backend/libpq/hba.c @@ -2331,12 +2331,12 @@ load_hba(void) /* * This macro specifies the maximum number of authentication options * that are possible with any given authentication method that is supported. - * Currently LDAP supports 11, and there are 3 that are not dependent on + * Currently LDAP supports 12, and there are 3 that are not dependent on * the auth method here. It may not actually be possible to set all of them * at the same time, but we'll set the macro value high enough to be * conservative and avoid warnings from static analysis tools. */ -#define MAX_HBA_OPTIONS 14 +#define MAX_HBA_OPTIONS 15 /* * Create a text array listing the options specified in the HBA line. From e35ff652056998e48c01c9e49c1a1b5ad6808f0a Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Tue, 14 Jan 2025 15:13:19 +0900 Subject: [PATCH 52/90] Fix potential integer overflow in bringetbitmap() This function expects an "int64" as result and stores the number of pages to add to the index scan bitmap as an "int", multiplying its final result by 10. For a relation large enough, this can theoretically overflow if counting more than (INT32_MAX / 10) pages, knowing that the number of pages is upper-bounded by MaxBlockNumber. To avoid the overflow, this commit redefines "totalpages", used to calculate the result, to be an "int64" rather than an "int". Reported-by: Evgeniy Gorbanyov Author: James Hunter Discussion: https://www.postgresql.org/message-id/07704817-6fa0-460c-b1cf-cd18f7647041@basealt.ru Backpatch-through: 13 --- 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 8c6ee96ca81..179b7dfa456 100644 --- a/src/backend/access/brin/brin.c +++ b/src/backend/access/brin/brin.c @@ -361,7 +361,7 @@ bringetbitmap(IndexScanDesc scan, TIDBitmap *tbm) BrinOpaque *opaque; BlockNumber nblocks; BlockNumber heapBlk; - int totalpages = 0; + int64 totalpages = 0; FmgrInfo *consistentFn; MemoryContext oldcxt; MemoryContext perRangeCxt; From fce17c3a53d6ea7b7aa2178328e8f5a438805244 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Tue, 14 Jan 2025 14:28:49 +0200 Subject: [PATCH 53/90] Fix catcache invalidation of a list entry that's being built If a new catalog tuple is inserted that belongs to a catcache list entry, and cache invalidation happens while the list entry is being built, the list entry might miss the newly inserted tuple. To fix, change the way we detect concurrent invalidations while a catcache entry is being built. Keep a stack of entries that are being built, and apply cache invalidation to those entries in addition to the real catcache entries. This is similar to the in-progress list in relcache.c. Back-patch to all supported versions. Reviewed-by: Noah Misch Discussion: https://www.postgresql.org/message-id/2234dc98-06fe-42ed-b5db-ac17384dc880@iki.fi --- src/backend/utils/cache/catcache.c | 231 ++++++++++++++++++----------- src/backend/utils/cache/inval.c | 2 +- src/include/utils/catcache.h | 1 + src/tools/pgindent/typedefs.list | 1 + 4 files changed, 148 insertions(+), 87 deletions(-) diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c index 59790302a07..6cb6885bb9b 100644 --- a/src/backend/utils/cache/catcache.c +++ b/src/backend/utils/cache/catcache.c @@ -40,6 +40,24 @@ #include "utils/resowner_private.h" #include "utils/syscache.h" +/* + * If a catcache invalidation is processed while we are in the middle of + * creating a catcache entry (or list), it might apply to the entry we're + * creating, making it invalid before it's been inserted to the catcache. To + * catch such cases, we have a stack of "create-in-progress" entries. Cache + * invalidation marks any matching entries in the stack as dead, in addition + * to the actual CatCTup and CatCList entries. + */ +typedef struct CatCInProgress +{ + CatCache *cache; /* cache that the entry belongs to */ + uint32 hash_value; /* hash of the entry; ignored for lists */ + bool list; /* is it a list entry? */ + bool dead; /* set when the entry is invalidated */ + struct CatCInProgress *next; +} CatCInProgress; + +static CatCInProgress *catcache_in_progress_stack = NULL; /* #define CACHEDEBUG */ /* turns DEBUG elogs on */ @@ -90,8 +108,7 @@ static void CatCachePrintStats(int code, Datum arg); static void CatCacheRemoveCTup(CatCache *cache, CatCTup *ct); static void CatCacheRemoveCList(CatCache *cache, CatCList *cl); static void CatalogCacheInitializeCache(CatCache *cache); -static CatCTup *CatalogCacheCreateEntry(CatCache *cache, - HeapTuple ntp, SysScanDesc scandesc, +static CatCTup *CatalogCacheCreateEntry(CatCache *cache, HeapTuple ntp, Datum *arguments, uint32 hashValue, Index hashIndex); @@ -603,6 +620,16 @@ CatCacheInvalidate(CatCache *cache, uint32 hashValue) /* could be multiple matches, so keep looking! */ } } + + /* Also invalidate any entries that are being built */ + for (CatCInProgress *e = catcache_in_progress_stack; e != NULL; e = e->next) + { + if (e->cache == cache) + { + if (e->list || e->hash_value == hashValue) + e->dead = true; + } + } } /* ---------------------------------------------------------------- @@ -639,9 +666,15 @@ CreateCacheMemoryContext(void) * * This is not very efficient if the target cache is nearly empty. * However, it shouldn't need to be efficient; we don't invoke it often. + * + * If 'debug_discard' is true, we are being called as part of + * debug_discard_caches. In that case, the cache is not reset for + * correctness, but just to get more testing of cache invalidation. We skip + * resetting in-progress build entries in that case, or we'd never make any + * progress. */ static void -ResetCatalogCache(CatCache *cache) +ResetCatalogCache(CatCache *cache, bool debug_discard) { dlist_mutable_iter iter; int i; @@ -680,6 +713,16 @@ ResetCatalogCache(CatCache *cache) #endif } } + + /* Also invalidate any entries that are being built */ + if (!debug_discard) + { + for (CatCInProgress *e = catcache_in_progress_stack; e != NULL; e = e->next) + { + if (e->cache == cache) + e->dead = true; + } + } } /* @@ -689,6 +732,12 @@ ResetCatalogCache(CatCache *cache) */ void ResetCatalogCaches(void) +{ + ResetCatalogCachesExt(false); +} + +void +ResetCatalogCachesExt(bool debug_discard) { slist_iter iter; @@ -698,7 +747,7 @@ ResetCatalogCaches(void) { CatCache *cache = slist_container(CatCache, cc_next, iter.cur); - ResetCatalogCache(cache); + ResetCatalogCache(cache, debug_discard); } CACHE_elog(DEBUG2, "end of ResetCatalogCaches call"); @@ -732,7 +781,7 @@ CatalogCacheFlushCatalog(Oid catId) if (cache->cc_reloid == catId) { /* Yes, so flush all its contents */ - ResetCatalogCache(cache); + ResetCatalogCache(cache, false); /* Tell inval.c to call syscache callbacks for this cache */ CallSyscacheCallbacks(cache->id, 0); @@ -1382,7 +1431,7 @@ SearchCatCacheMiss(CatCache *cache, while (HeapTupleIsValid(ntp = systable_getnext(scandesc))) { - ct = CatalogCacheCreateEntry(cache, ntp, scandesc, NULL, + ct = CatalogCacheCreateEntry(cache, ntp, NULL, hashValue, hashIndex); /* upon failure, we must start the scan over */ if (ct == NULL) @@ -1417,7 +1466,7 @@ SearchCatCacheMiss(CatCache *cache, if (IsBootstrapProcessingMode()) return NULL; - ct = CatalogCacheCreateEntry(cache, NULL, NULL, arguments, + ct = CatalogCacheCreateEntry(cache, NULL, arguments, hashValue, hashIndex); /* Creating a negative cache entry shouldn't fail */ @@ -1545,6 +1594,8 @@ SearchCatCacheList(CatCache *cache, HeapTuple ntp; MemoryContext oldcxt; int i; + CatCInProgress *save_in_progress; + CatCInProgress in_progress_ent; /* * one-time startup overhead for each cache @@ -1635,21 +1686,60 @@ SearchCatCacheList(CatCache *cache, ctlist = NIL; + /* + * Cache invalidation can happen while we're building the list. + * CatalogCacheCreateEntry() handles concurrent invalidation of individual + * tuples, but it's also possible that a new entry is concurrently added + * that should be part of the list we're building. Register an + * "in-progress" entry that will receive the invalidation, until we have + * built the final list entry. + */ + save_in_progress = catcache_in_progress_stack; + in_progress_ent.next = catcache_in_progress_stack; + in_progress_ent.cache = cache; + in_progress_ent.hash_value = lHashValue; + in_progress_ent.list = true; + in_progress_ent.dead = false; + catcache_in_progress_stack = &in_progress_ent; + PG_TRY(); { ScanKeyData cur_skey[CATCACHE_MAXKEYS]; Relation relation; SysScanDesc scandesc; - bool stale; relation = table_open(cache->cc_reloid, AccessShareLock); + /* + * Scan the table for matching entries. If an invalidation arrives + * mid-build, we will loop back here to retry. + */ do { /* - * Ok, need to make a lookup in the relation, copy the scankey and - * fill out any per-call fields. (We must re-do this when - * retrying, because systable_beginscan scribbles on the scankey.) + * If we are retrying, release refcounts on any items created on + * the previous iteration. We dare not try to free them if + * they're now unreferenced, since an error while doing that would + * result in the PG_CATCH below doing extra refcount decrements. + * Besides, we'll likely re-adopt those items in the next + * iteration, so it's not worth complicating matters to try to get + * rid of them. + */ + foreach(ctlist_item, ctlist) + { + ct = (CatCTup *) lfirst(ctlist_item); + Assert(ct->c_list == NULL); + Assert(ct->refcount > 0); + ct->refcount--; + } + /* Reset ctlist in preparation for new try */ + ctlist = NIL; + in_progress_ent.dead = false; + + /* + * Copy the scankey and fill out any per-call fields. (We must + * re-do this when retrying, because systable_beginscan scribbles + * on the scankey.) */ memcpy(cur_skey, cache->cc_skey, sizeof(ScanKeyData) * cache->cc_nkeys); cur_skey[0].sk_argument = v1; @@ -1667,9 +1757,8 @@ SearchCatCacheList(CatCache *cache, /* The list will be ordered iff we are doing an index scan */ ordered = (scandesc->irel != NULL); - stale = false; - - while (HeapTupleIsValid(ntp = systable_getnext(scandesc))) + while (HeapTupleIsValid(ntp = systable_getnext(scandesc)) && + !in_progress_ent.dead) { uint32 hashValue; Index hashIndex; @@ -1711,30 +1800,13 @@ SearchCatCacheList(CatCache *cache, if (!found) { /* We didn't find a usable entry, so make a new one */ - ct = CatalogCacheCreateEntry(cache, ntp, scandesc, NULL, + ct = CatalogCacheCreateEntry(cache, ntp, NULL, hashValue, hashIndex); + /* upon failure, we must start the scan over */ if (ct == NULL) { - /* - * Release refcounts on any items we already had. We - * dare not try to free them if they're now - * unreferenced, since an error while doing that would - * result in the PG_CATCH below doing extra refcount - * decrements. Besides, we'll likely re-adopt those - * items in the next iteration, so it's not worth - * complicating matters to try to get rid of them. - */ - foreach(ctlist_item, ctlist) - { - ct = (CatCTup *) lfirst(ctlist_item); - Assert(ct->c_list == NULL); - Assert(ct->refcount > 0); - ct->refcount--; - } - /* Reset ctlist in preparation for new try */ - ctlist = NIL; - stale = true; + in_progress_ent.dead = true; break; } } @@ -1746,7 +1818,7 @@ SearchCatCacheList(CatCache *cache, } systable_endscan(scandesc); - } while (stale); + } while (in_progress_ent.dead); table_close(relation, AccessShareLock); @@ -1772,6 +1844,9 @@ SearchCatCacheList(CatCache *cache, } PG_CATCH(); { + Assert(catcache_in_progress_stack == &in_progress_ent); + catcache_in_progress_stack = save_in_progress; + foreach(ctlist_item, ctlist) { ct = (CatCTup *) lfirst(ctlist_item); @@ -1790,6 +1865,8 @@ SearchCatCacheList(CatCache *cache, PG_RE_THROW(); } PG_END_TRY(); + Assert(catcache_in_progress_stack == &in_progress_ent); + catcache_in_progress_stack = save_in_progress; cl->cl_magic = CL_MAGIC; cl->my_cache = cache; @@ -1850,23 +1927,6 @@ ReleaseCatCacheList(CatCList *list) } -/* - * equalTuple - * Are these tuples memcmp()-equal? - */ -static bool -equalTuple(HeapTuple a, HeapTuple b) -{ - uint32 alen; - uint32 blen; - - alen = a->t_len; - blen = b->t_len; - return (alen == blen && - memcmp((char *) a->t_data, - (char *) b->t_data, blen) == 0); -} - /* * CatalogCacheCreateEntry * Create a new CatCTup entry, copying the given HeapTuple and other @@ -1874,34 +1934,33 @@ equalTuple(HeapTuple a, HeapTuple b) * * To create a normal cache entry, ntp must be the HeapTuple just fetched * from scandesc, and "arguments" is not used. To create a negative cache - * entry, pass NULL for ntp and scandesc; then "arguments" is the cache - * keys to use. In either case, hashValue/hashIndex are the hash values - * computed from the cache keys. + * entry, pass NULL for ntp; then "arguments" is the cache keys to use. + * In either case, hashValue/hashIndex are the hash values computed from + * the cache keys. * * Returns NULL if we attempt to detoast the tuple and observe that it * became stale. (This cannot happen for a negative entry.) Caller must * retry the tuple lookup in that case. */ static CatCTup * -CatalogCacheCreateEntry(CatCache *cache, HeapTuple ntp, SysScanDesc scandesc, - Datum *arguments, +CatalogCacheCreateEntry(CatCache *cache, HeapTuple ntp, Datum *arguments, uint32 hashValue, Index hashIndex) { CatCTup *ct; - HeapTuple dtp; MemoryContext oldcxt; if (ntp) { int i; + HeapTuple dtp = NULL; /* - * The visibility recheck below essentially never fails during our - * regression tests, and there's no easy way to force it to fail for - * testing purposes. To ensure we have test coverage for the retry - * paths in our callers, make debug builds randomly fail about 0.1% of - * the times through this code path, even when there's no toasted - * fields. + * The invalidation of the in-progress entry essentially never happens + * during our regression tests, and there's no easy way to force it to + * fail for testing purposes. To ensure we have test coverage for the + * retry paths in our callers, make debug builds randomly fail about + * 0.1% of the times through this code path, even when there's no + * toasted fields. */ #ifdef USE_ASSERT_CHECKING if (random() <= (MAX_RANDOM_VALUE / 1000)) @@ -1917,34 +1976,34 @@ CatalogCacheCreateEntry(CatCache *cache, HeapTuple ntp, SysScanDesc scandesc, */ if (HeapTupleHasExternal(ntp)) { - bool need_cmp = IsInplaceUpdateOid(cache->cc_reloid); - HeapTuple before = NULL; - bool matches = true; - - if (need_cmp) - before = heap_copytuple(ntp); - dtp = toast_flatten_tuple(ntp, cache->cc_tupdesc); + CatCInProgress *save_in_progress; + CatCInProgress in_progress_ent; /* * The tuple could become stale while we are doing toast table - * access (since AcceptInvalidationMessages can run then). - * equalTuple() detects staleness from inplace updates, while - * systable_recheck_tuple() detects staleness from normal updates. - * - * While this equalTuple() follows the usual rule of reading with - * a pin and no buffer lock, it warrants suspicion since an - * inplace update could appear at any moment. It's safe because - * the inplace update sends an invalidation that can't reorder - * before the inplace heap change. If the heap change reaches - * this process just after equalTuple() looks, we've not missed - * its inval. + * access (since AcceptInvalidationMessages can run then). The + * invalidation will mark our in-progress entry as dead. */ - if (need_cmp) + save_in_progress = catcache_in_progress_stack; + in_progress_ent.next = catcache_in_progress_stack; + in_progress_ent.cache = cache; + in_progress_ent.hash_value = hashValue; + in_progress_ent.list = false; + in_progress_ent.dead = false; + catcache_in_progress_stack = &in_progress_ent; + + PG_TRY(); { - matches = equalTuple(before, ntp); - heap_freetuple(before); + dtp = toast_flatten_tuple(ntp, cache->cc_tupdesc); } - if (!matches || !systable_recheck_tuple(scandesc, ntp)) + PG_FINALLY(); + { + Assert(catcache_in_progress_stack == &in_progress_ent); + catcache_in_progress_stack = save_in_progress; + } + PG_END_TRY(); + + if (in_progress_ent.dead) { heap_freetuple(dtp); return NULL; diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c index e281a45155c..9d764ad81f9 100644 --- a/src/backend/utils/cache/inval.c +++ b/src/backend/utils/cache/inval.c @@ -671,7 +671,7 @@ InvalidateSystemCachesExtended(bool debug_discard) int i; InvalidateCatalogSnapshot(); - ResetCatalogCaches(); + ResetCatalogCachesExt(debug_discard); RelationCacheInvalidate(debug_discard); /* gets smgr and relmap too */ for (i = 0; i < syscache_callback_count; i++) diff --git a/src/include/utils/catcache.h b/src/include/utils/catcache.h index ddc2762eb3f..a468bdc4496 100644 --- a/src/include/utils/catcache.h +++ b/src/include/utils/catcache.h @@ -218,6 +218,7 @@ extern CatCList *SearchCatCacheList(CatCache *cache, int nkeys, extern void ReleaseCatCacheList(CatCList *list); extern void ResetCatalogCaches(void); +extern void ResetCatalogCachesExt(bool debug_discard); extern void CatalogCacheFlushCatalog(Oid catId); extern void CatCacheInvalidate(CatCache *cache, uint32 hashValue); extern void PrepareToInvalidateCacheTuple(Relation relation, diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index a684828ecc9..fd1a1a7da65 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -339,6 +339,7 @@ CaseTestExpr CaseWhen Cash CastInfo +CatCInProgress CatCList CatCTup CatCache From d06ab3c0c1179e522812d0e25d63dcc7dcab3c9a Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Wed, 15 Jan 2025 01:24:24 +0900 Subject: [PATCH 54/90] ecpg: Restore detection of unsupported COPY FROM STDIN. The ecpg command includes code to warn about unsupported COPY FROM STDIN statements in input files. However, since commit 3d009e45bd, this functionality has been broken due to a bug introduced in that commit, causing ecpg to fail to detect the statement. This commit resolves the issue, restoring ecpg's ability to detect COPY FROM STDIN and issue a warning as intended. Back-patch to all supported versions. Author: Ryo Kanbayashi Reviewed-by: Hayato Kuroda, Tom Lane Discussion: https://postgr.es/m/CANOn0Ez_t5uDCUEV8c1YORMisJiU5wu681eEVZzgKwOeiKhkqQ@mail.gmail.com --- src/interfaces/ecpg/preproc/ecpg.addons | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/interfaces/ecpg/preproc/ecpg.addons b/src/interfaces/ecpg/preproc/ecpg.addons index 94f7d4a3ec2..4bb4b9ead73 100644 --- a/src/interfaces/ecpg/preproc/ecpg.addons +++ b/src/interfaces/ecpg/preproc/ecpg.addons @@ -248,7 +248,7 @@ ECPG: where_or_current_clauseWHERECURRENT_POFcursor_name block $$ = cat_str(2,mm_strdup("where current of"), cursor_marker); } ECPG: CopyStmtCOPYopt_binaryqualified_nameopt_column_listcopy_fromopt_programcopy_file_namecopy_delimiteropt_withcopy_optionswhere_clause addon - if (strcmp($6, "from") == 0 && + if (strcmp($5, "from") == 0 && (strcmp($7, "stdin") == 0 || strcmp($7, "stdout") == 0)) mmerror(PARSE_ERROR, ET_WARNING, "COPY FROM STDIN is not implemented"); ECPG: var_valueNumericOnly addon From 02e69313ad0c9687fc6ac90ea0daf74d9e8a6e50 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 14 Jan 2025 18:50:24 -0500 Subject: [PATCH 55/90] Avoid symbol collisions between pqsignal.c and legacy-pqsignal.c. In the name of ABI stability (that is, to avoid a library major version bump for libpq), libpq still exports a version of pqsignal() that we no longer want to use ourselves. However, since that has the same link name as the function exported by src/port/pqsignal.c, there is a link ordering dependency determining which version will actually get used by code that uses libpq as well as libpgport.a. It now emerges that the wrong version has been used by pgbench and psql since commit 06843df4a rearranged their link commands. This can result in odd failures in pgbench with the -T switch, since its SIGALRM handler will now not be marked SA_RESTART. psql may have some edge-case problems in \watch, too. Since we don't want to depend on link ordering effects anymore, let's fix this in the same spirit as b6c7cfac8: use macros to change the actual link names of the competing functions. We cannot change legacy-pqsignal.c's exported name of course, so the victim has to be src/port/pqsignal.c. In master, rename its exported name to be pqsignal_fe in frontend or pqsignal_be in backend. (We could perhaps have gotten away with using the same symbol in both cases, but since the FE and BE versions now work a little differently, it seems advisable to use different names.) In back branches, rename to pqsignal_fe in frontend but keep it as pqsignal in backend. The frontend change could affect third-party code that is calling pqsignal from libpgport.a or libpgport_shlib.a, but only if the code is compiled against port.h from a different minor release than libpgport. Since we don't support using libpgport as a shared library, it seems unlikely that there will be such a problem. I left the backend symbol unchanged to avoid an ABI break for extensions. This means that the link ordering hazard still exists for any extension that links against libpq. However, none of our own extensions use both pqsignal() and libpq, and we're not making things any worse for third-party extensions that do. Report from Andy Fan, diagnosis by Fujii Masao, patch by me. Back-patch to all supported branches, as 06843df4a was. Discussion: https://postgr.es/m/87msfz5qv2.fsf@163.com --- src/include/port.h | 5 ++++- src/interfaces/libpq/legacy-pqsignal.c | 12 +++++++++--- src/port/pqsignal.c | 4 ++++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/include/port.h b/src/include/port.h index 3a2601fdc01..142dc0b12a7 100644 --- a/src/include/port.h +++ b/src/include/port.h @@ -579,7 +579,10 @@ extern int pg_check_dir(const char *dir); /* port/pgmkdirp.c */ extern int pg_mkdir_p(char *path, int omode); -/* port/pqsignal.c */ +/* port/pqsignal.c (see also interfaces/libpq/legacy-pqsignal.c) */ +#ifdef FRONTEND +#define pqsignal pqsignal_fe +#endif typedef void (*pqsigfunc) (int signo); extern pqsigfunc pqsignal(int signo, pqsigfunc func); diff --git a/src/interfaces/libpq/legacy-pqsignal.c b/src/interfaces/libpq/legacy-pqsignal.c index 37fa9e58061..94c1fadf6b2 100644 --- a/src/interfaces/libpq/legacy-pqsignal.c +++ b/src/interfaces/libpq/legacy-pqsignal.c @@ -28,10 +28,16 @@ * with the semantics it had in 9.2; in particular, this has different * behavior for SIGALRM than the version in src/port/pqsignal.c. * - * libpq itself uses this only for SIGPIPE (and even then, only in - * non-ENABLE_THREAD_SAFETY builds), so the incompatibility isn't - * troublesome for internal references. + * libpq itself does not use this, nor does anything else in our code. + * + * src/include/port.h will #define pqsignal as pqsignal_fe, + * but here we want to export just plain "pqsignal". We can't rely on + * port.h's extern declaration either. (The point of that #define + * is to ensure that no in-tree code accidentally calls this version.) */ +#undef pqsignal +extern pqsigfunc pqsignal(int signo, pqsigfunc func); + pqsigfunc pqsignal(int signo, pqsigfunc func) { diff --git a/src/port/pqsignal.c b/src/port/pqsignal.c index a373b48093e..2ec5a709346 100644 --- a/src/port/pqsignal.c +++ b/src/port/pqsignal.c @@ -35,6 +35,10 @@ * Set up a signal handler, with SA_RESTART, for signal "signo" * * Returns the previous handler. + * + * Note: the actual name of this function is either pqsignal_fe when + * compiled with -DFRONTEND, or pqsignal when compiled without that. + * This is to avoid a name collision with libpq's legacy-pqsignal.c. */ pqsigfunc pqsignal(int signo, pqsigfunc func) From 50406b15540cee90d3038229829b417cbd755bd7 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 16 Jan 2025 09:26:29 +0900 Subject: [PATCH 56/90] Move routines to manipulate WAL into PostgreSQL::Test::Cluster These facilities were originally in the recovery TAP test 039_end_of_wal.pl. A follow-up bug fix with a TAP test doing similar WAL manipulations requires them, and all these had better not be duplicated due to their complexity. The routine names are tweaked to use "wal" more consistently, similarly to the existing "advance_wal". In v14 and v13, the new routines are moved to PostgresNode.pm. 039_end_of_wal.pl is updated to use the refactored routines, without changing its coverage. Reviewed-by: Alexander Kukushkin Discussion: https://postgr.es/m/CAFh8B=mozC+e1wGJq0H=0O65goZju+6ab5AU7DEWCSUA2OtwDg@mail.gmail.com Backpatch-through: 13 --- src/test/perl/PostgresNode.pm | 148 +++++++++++++++ src/test/recovery/t/039_end_of_wal.pl | 263 +++++++------------------- 2 files changed, 214 insertions(+), 197 deletions(-) diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index e82b15bc8ce..b4c636c7d0f 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -2510,6 +2510,154 @@ sub lsn =pod +=item $node->write_wal($tli, $lsn, $segment_size, $data) + +Write some arbitrary data in WAL for the given segment at $lsn (in bytes). +This should be called while the cluster is not running. + +Returns the path of the WAL segment written to. + +=cut + +sub write_wal +{ + my ($self, $tli, $lsn, $segment_size, $data) = @_; + + # Calculate segment number and offset position in segment based on the + # input LSN. + my $segment = $lsn / $segment_size; + my $offset = $lsn % $segment_size; + my $path = + sprintf("%s/pg_wal/%08X%08X%08X", $self->data_dir, $tli, 0, $segment); + + open my $fh, "+<:raw", $path or die "could not open WAL segment $path"; + seek($fh, $offset, SEEK_SET) or die "could not seek WAL segment $path"; + print $fh $data; + close $fh; + + return $path; +} + +=pod + +=item $node->emit_wal($size) + +Emit a WAL record of arbitrary size, using pg_logical_emit_message(). + +Returns the end LSN of the record inserted, in bytes. + +=cut + +sub emit_wal +{ + my ($self, $size) = @_; + + return int( + $self->safe_psql( + 'postgres', + "SELECT pg_logical_emit_message(true, '', repeat('a', $size)) - '0/0'" + )); +} + + +# Private routine returning the current insert LSN of a node, in bytes. +# Used by the routines below in charge of advancing WAL to arbitrary +# positions. The insert LSN is returned in bytes. +sub _get_insert_lsn +{ + my ($self) = @_; + return int( + $self->safe_psql( + 'postgres', "SELECT pg_current_wal_insert_lsn() - '0/0'")); +} + +=pod + +=item $node->advance_wal_out_of_record_splitting_zone($wal_block_size) + +Advance WAL at the end of a page, making sure that we are far away enough +from the end of a page that we could insert a couple of small records. + +This inserts a few records of a fixed size, until the threshold gets close +enough to the end of the WAL page inserting records to. + +Returns the end LSN up to which WAL has advanced, in bytes. + +=cut + +sub advance_wal_out_of_record_splitting_zone +{ + my ($self, $wal_block_size) = @_; + + my $page_threshold = $wal_block_size / 4; + my $end_lsn = $self->_get_insert_lsn(); + my $page_offset = $end_lsn % $wal_block_size; + while ($page_offset >= $wal_block_size - $page_threshold) + { + $self->emit_wal($page_threshold); + $end_lsn = $self->_get_insert_lsn(); + $page_offset = $end_lsn % $wal_block_size; + } + return $end_lsn; +} + +=pod + +=item $node->advance_wal_to_record_splitting_zone($wal_block_size) + +Advance WAL so close to the end of a page that an XLogRecordHeader would not +fit on it. + +Returns the end LSN up to which WAL has advanced, in bytes. + +=cut + +sub advance_wal_to_record_splitting_zone +{ + my ($self, $wal_block_size) = @_; + + # Size of record header. + my $RECORD_HEADER_SIZE = 24; + + my $end_lsn = $self->_get_insert_lsn(); + my $page_offset = $end_lsn % $wal_block_size; + + # Get fairly close to the end of a page in big steps + while ($page_offset <= $wal_block_size - 512) + { + $self->emit_wal($wal_block_size - $page_offset - 256); + $end_lsn = $self->_get_insert_lsn(); + $page_offset = $end_lsn % $wal_block_size; + } + + # Calibrate our message size so that we can get closer 8 bytes at + # a time. + my $message_size = $wal_block_size - 80; + while ($page_offset <= $wal_block_size - $RECORD_HEADER_SIZE) + { + $self->emit_wal($message_size); + $end_lsn = $self->_get_insert_lsn(); + + my $old_offset = $page_offset; + $page_offset = $end_lsn % $wal_block_size; + + # Adjust the message size until it causes 8 bytes changes in + # offset, enough to be able to split a record header. + my $delta = $page_offset - $old_offset; + if ($delta > 8) + { + $message_size -= 8; + } + elsif ($delta <= 0) + { + $message_size += 8; + } + } + return $end_lsn; +} + +=pod + =item $node->wait_for_catchup(standby_name, mode, target_lsn) Wait for the node with application_name standby_name (usually from node->name, diff --git a/src/test/recovery/t/039_end_of_wal.pl b/src/test/recovery/t/039_end_of_wal.pl index 9278599e334..91ed5e881ac 100644 --- a/src/test/recovery/t/039_end_of_wal.pl +++ b/src/test/recovery/t/039_end_of_wal.pl @@ -20,9 +20,6 @@ # we need to know the endianness to do that. my $BIG_ENDIAN = pack("L", 0x12345678) eq pack("N", 0x12345678); -# Header size of record header. -my $RECORD_HEADER_SIZE = 24; - # Fields retrieved from code headers. my @scan_result = scan_server_header('access/xlog_internal.h', '#define\s+XLOG_PAGE_MAGIC\s+(\w+)'); @@ -36,70 +33,6 @@ my $WAL_BLOCK_SIZE; my $TLI; -# Build path of a WAL segment. -sub wal_segment_path -{ - my $node = shift; - my $tli = shift; - my $segment = shift; - my $wal_path = - sprintf("%s/pg_wal/%08X%08X%08X", $node->data_dir, $tli, 0, $segment); - return $wal_path; -} - -# Calculate from a LSN (in bytes) its segment number and its offset. -sub lsn_to_segment_and_offset -{ - my $lsn = shift; - return ($lsn / $WAL_SEGMENT_SIZE, $lsn % $WAL_SEGMENT_SIZE); -} - -# Write some arbitrary data in WAL for the given segment at LSN. -# This should be called while the cluster is not running. -sub write_wal -{ - my $node = shift; - my $tli = shift; - my $lsn = shift; - my $data = shift; - - my ($segment, $offset) = lsn_to_segment_and_offset($lsn); - my $path = wal_segment_path($node, $tli, $segment); - - open my $fh, "+<:raw", $path or die; - seek($fh, $offset, SEEK_SET) or die; - print $fh $data; - close $fh; -} - -sub format_lsn -{ - my $lsn = shift; - return sprintf("%X/%X", $lsn >> 32, $lsn & 0xffffffff); -} - -# Emit a WAL record of arbitrary size. Returns the end LSN of the -# record inserted, in bytes. -sub emit_message -{ - my $node = shift; - my $size = shift; - return int( - $node->safe_psql( - 'postgres', - "SELECT pg_logical_emit_message(true, '', repeat('a', $size)) - '0/0'" - )); -} - -# Get the current insert LSN of a node, in bytes. -sub get_insert_lsn -{ - my $node = shift; - return int( - $node->safe_psql( - 'postgres', "SELECT pg_current_wal_insert_lsn() - '0/0'")); -} - # Get GUC value, converted to an int. sub get_int_setting { @@ -173,69 +106,6 @@ sub build_page_header $BIG_ENDIAN ? $xlp_pageaddr : 0, $xlp_rem_len); } -# Make sure we are far away enough from the end of a page that we could insert -# a couple of small records. This inserts a few records of a fixed size, until -# the threshold gets close enough to the end of the WAL page inserting records -# to. -sub advance_out_of_record_splitting_zone -{ - my $node = shift; - - my $page_threshold = 2000; - my $end_lsn = get_insert_lsn($node); - my $page_offset = $end_lsn % $WAL_BLOCK_SIZE; - while ($page_offset >= $WAL_BLOCK_SIZE - $page_threshold) - { - emit_message($node, $page_threshold); - $end_lsn = get_insert_lsn($node); - $page_offset = $end_lsn % $WAL_BLOCK_SIZE; - } - return $end_lsn; -} - -# Advance so close to the end of a page that an XLogRecordHeader would not -# fit on it. -sub advance_to_record_splitting_zone -{ - my $node = shift; - - my $end_lsn = get_insert_lsn($node); - my $page_offset = $end_lsn % $WAL_BLOCK_SIZE; - - # Get fairly close to the end of a page in big steps - while ($page_offset <= $WAL_BLOCK_SIZE - 512) - { - emit_message($node, $WAL_BLOCK_SIZE - $page_offset - 256); - $end_lsn = get_insert_lsn($node); - $page_offset = $end_lsn % $WAL_BLOCK_SIZE; - } - - # Calibrate our message size so that we can get closer 8 bytes at - # a time. - my $message_size = $WAL_BLOCK_SIZE - 80; - while ($page_offset <= $WAL_BLOCK_SIZE - $RECORD_HEADER_SIZE) - { - emit_message($node, $message_size); - $end_lsn = get_insert_lsn($node); - - my $old_offset = $page_offset; - $page_offset = $end_lsn % $WAL_BLOCK_SIZE; - - # Adjust the message size until it causes 8 bytes changes in - # offset, enough to be able to split a record header. - my $delta = $page_offset - $old_offset; - if ($delta > 8) - { - $message_size -= 8; - } - elsif ($delta <= 0) - { - $message_size += 8; - } - } - return $end_lsn; -} - # Setup a new node. The configuration chosen here minimizes the number # of arbitrary records that could get generated in a cluster. Enlarging # checkpoint_timeout avoids noise with checkpoint activity. wal_level @@ -271,8 +141,8 @@ sub advance_to_record_splitting_zone ########################################################################### # xl_tot_len is 0 (a common case, we hit trailing zeroes). -emit_message($node, 0); -$end_lsn = advance_out_of_record_splitting_zone($node); +$node->emit_wal(0); +$end_lsn = $node->advance_wal_out_of_record_splitting_zone($WAL_BLOCK_SIZE); $node->stop('immediate'); my $log_size = -s $node->logfile; $node->start; @@ -282,10 +152,10 @@ sub advance_to_record_splitting_zone "xl_tot_len zero"); # xl_tot_len is < 24 (presumably recycled garbage). -emit_message($node, 0); -$end_lsn = advance_out_of_record_splitting_zone($node); +$node->emit_wal(0); +$end_lsn = $node->advance_wal_out_of_record_splitting_zone($WAL_BLOCK_SIZE); $node->stop('immediate'); -write_wal($node, $TLI, $end_lsn, build_record_header(23)); +$node->write_wal($TLI, $end_lsn, $WAL_SEGMENT_SIZE, build_record_header(23)); $log_size = -s $node->logfile; $node->start; ok( $node->log_contains( @@ -295,10 +165,10 @@ sub advance_to_record_splitting_zone # xl_tot_len in final position, not big enough to span into a new page but # also not eligible for regular record header validation -emit_message($node, 0); -$end_lsn = advance_to_record_splitting_zone($node); +$node->emit_wal(0); +$end_lsn = $node->advance_wal_to_record_splitting_zone($WAL_BLOCK_SIZE); $node->stop('immediate'); -write_wal($node, $TLI, $end_lsn, build_record_header(1)); +$node->write_wal($TLI, $end_lsn, $WAL_SEGMENT_SIZE, build_record_header(1)); $log_size = -s $node->logfile; $node->start; ok( $node->log_contains( @@ -307,10 +177,10 @@ sub advance_to_record_splitting_zone "xl_tot_len short at end-of-page"); # Need more pages, but xl_prev check fails first. -emit_message($node, 0); -$end_lsn = advance_out_of_record_splitting_zone($node); +$node->emit_wal(0); +$end_lsn = $node->advance_wal_out_of_record_splitting_zone($WAL_BLOCK_SIZE); $node->stop('immediate'); -write_wal($node, $TLI, $end_lsn, +$node->write_wal($TLI, $end_lsn, $WAL_SEGMENT_SIZE, build_record_header(2 * 1024 * 1024 * 1024, 0, 0xdeadbeef)); $log_size = -s $node->logfile; $node->start; @@ -319,12 +189,12 @@ sub advance_to_record_splitting_zone "xl_prev bad"); # xl_crc check fails. -emit_message($node, 0); -advance_out_of_record_splitting_zone($node); -$end_lsn = emit_message($node, 10); +$node->emit_wal(0); +$node->advance_wal_out_of_record_splitting_zone($WAL_BLOCK_SIZE); +$end_lsn = $node->emit_wal(10); $node->stop('immediate'); # Corrupt a byte in that record, breaking its CRC. -write_wal($node, $TLI, $end_lsn - 8, '!'); +$node->write_wal($TLI, $end_lsn - 8, $WAL_SEGMENT_SIZE, '!'); $log_size = -s $node->logfile; $node->start; ok( $node->log_contains( @@ -341,11 +211,11 @@ sub advance_to_record_splitting_zone # written to WAL. # Good xl_prev, we hit zero page next (zero magic). -emit_message($node, 0); -$prev_lsn = advance_out_of_record_splitting_zone($node); -$end_lsn = emit_message($node, 0); +$node->emit_wal(0); +$prev_lsn = $node->advance_wal_out_of_record_splitting_zone($WAL_BLOCK_SIZE); +$end_lsn = $node->emit_wal(0); $node->stop('immediate'); -write_wal($node, $TLI, $end_lsn, +$node->write_wal($TLI, $end_lsn, $WAL_SEGMENT_SIZE, build_record_header(2 * 1024 * 1024 * 1024, 0, $prev_lsn)); $log_size = -s $node->logfile; $node->start; @@ -353,16 +223,14 @@ sub advance_to_record_splitting_zone "xlp_magic zero"); # Good xl_prev, we hit garbage page next (bad magic). -emit_message($node, 0); -$prev_lsn = advance_out_of_record_splitting_zone($node); -$end_lsn = emit_message($node, 0); +$node->emit_wal(0); +$prev_lsn = $node->advance_wal_out_of_record_splitting_zone($WAL_BLOCK_SIZE); +$end_lsn = $node->emit_wal(0); $node->stop('immediate'); -write_wal($node, $TLI, $end_lsn, +$node->write_wal($TLI, $end_lsn, $WAL_SEGMENT_SIZE, build_record_header(2 * 1024 * 1024 * 1024, 0, $prev_lsn)); -write_wal( - $node, $TLI, - start_of_next_page($end_lsn), - build_page_header(0xcafe, 0, 1, 0)); +$node->write_wal($TLI, start_of_next_page($end_lsn), + $WAL_SEGMENT_SIZE, build_page_header(0xcafe, 0, 1, 0)); $log_size = -s $node->logfile; $node->start; ok($node->log_contains("invalid magic number CAFE ", $log_size), @@ -370,16 +238,14 @@ sub advance_to_record_splitting_zone # Good xl_prev, we hit typical recycled page (good xlp_magic, bad # xlp_pageaddr). -emit_message($node, 0); -$prev_lsn = advance_out_of_record_splitting_zone($node); -$end_lsn = emit_message($node, 0); +$node->emit_wal(0); +$prev_lsn = $node->advance_wal_out_of_record_splitting_zone($WAL_BLOCK_SIZE); +$end_lsn = $node->emit_wal(0); $node->stop('immediate'); -write_wal($node, $TLI, $end_lsn, +$node->write_wal($TLI, $end_lsn, $WAL_SEGMENT_SIZE, build_record_header(2 * 1024 * 1024 * 1024, 0, $prev_lsn)); -write_wal( - $node, $TLI, - start_of_next_page($end_lsn), - build_page_header($XLP_PAGE_MAGIC, 0, 1, 0xbaaaaaad)); +$node->write_wal($TLI, start_of_next_page($end_lsn), + $WAL_SEGMENT_SIZE, build_page_header($XLP_PAGE_MAGIC, 0, 1, 0xbaaaaaad)); $log_size = -s $node->logfile; $node->start; ok( $node->log_contains( @@ -387,15 +253,16 @@ sub advance_to_record_splitting_zone "xlp_pageaddr bad"); # Good xl_prev, xlp_magic, xlp_pageaddr, but bogus xlp_info. -emit_message($node, 0); -$prev_lsn = advance_out_of_record_splitting_zone($node); -$end_lsn = emit_message($node, 0); +$node->emit_wal(0); +$prev_lsn = $node->advance_wal_out_of_record_splitting_zone($WAL_BLOCK_SIZE); +$end_lsn = $node->emit_wal(0); $node->stop('immediate'); -write_wal($node, $TLI, $end_lsn, +$node->write_wal($TLI, $end_lsn, $WAL_SEGMENT_SIZE, build_record_header(2 * 1024 * 1024 * 1024, 42, $prev_lsn)); -write_wal( - $node, $TLI, +$node->write_wal( + $TLI, start_of_next_page($end_lsn), + $WAL_SEGMENT_SIZE, build_page_header( $XLP_PAGE_MAGIC, 0x1234, 1, start_of_next_page($end_lsn))); $log_size = -s $node->logfile; @@ -405,15 +272,14 @@ sub advance_to_record_splitting_zone # Good xl_prev, xlp_magic, xlp_pageaddr, but xlp_info doesn't mention # continuation record. -emit_message($node, 0); -$prev_lsn = advance_out_of_record_splitting_zone($node); -$end_lsn = emit_message($node, 0); +$node->emit_wal(0); +$prev_lsn = $node->advance_wal_out_of_record_splitting_zone($WAL_BLOCK_SIZE); +$end_lsn = $node->emit_wal(0); $node->stop('immediate'); -write_wal($node, $TLI, $end_lsn, +$node->write_wal($TLI, $end_lsn, $WAL_SEGMENT_SIZE, build_record_header(2 * 1024 * 1024 * 1024, 42, $prev_lsn)); -write_wal( - $node, $TLI, - start_of_next_page($end_lsn), +$node->write_wal($TLI, start_of_next_page($end_lsn), + $WAL_SEGMENT_SIZE, build_page_header($XLP_PAGE_MAGIC, 0, 1, start_of_next_page($end_lsn))); $log_size = -s $node->logfile; $node->start; @@ -422,15 +288,16 @@ sub advance_to_record_splitting_zone # Good xl_prev, xlp_magic, xlp_pageaddr, xlp_info but xlp_rem_len doesn't add # up. -emit_message($node, 0); -$prev_lsn = advance_out_of_record_splitting_zone($node); -$end_lsn = emit_message($node, 0); +$node->emit_wal(0); +$prev_lsn = $node->advance_wal_out_of_record_splitting_zone($WAL_BLOCK_SIZE); +$end_lsn = $node->emit_wal(0); $node->stop('immediate'); -write_wal($node, $TLI, $end_lsn, +$node->write_wal($TLI, $end_lsn, $WAL_SEGMENT_SIZE, build_record_header(2 * 1024 * 1024 * 1024, 42, $prev_lsn)); -write_wal( - $node, $TLI, +$node->write_wal( + $TLI, start_of_next_page($end_lsn), + $WAL_SEGMENT_SIZE, build_page_header( $XLP_PAGE_MAGIC, $XLP_FIRST_IS_CONTRECORD, 1, start_of_next_page($end_lsn), @@ -447,10 +314,10 @@ sub advance_to_record_splitting_zone ########################################################################### # xl_prev is bad and xl_tot_len is too big, but we'll check xlp_magic first. -emit_message($node, 0); -$end_lsn = advance_to_record_splitting_zone($node); +$node->emit_wal(0); +$end_lsn = $node->advance_wal_to_record_splitting_zone($WAL_BLOCK_SIZE); $node->stop('immediate'); -write_wal($node, $TLI, $end_lsn, +$node->write_wal($TLI, $end_lsn, $WAL_SEGMENT_SIZE, build_record_header(2 * 1024 * 1024 * 1024, 0, 0xdeadbeef)); $log_size = -s $node->logfile; $node->start; @@ -458,14 +325,15 @@ sub advance_to_record_splitting_zone "xlp_magic zero (split record header)"); # And we'll also check xlp_pageaddr before any header checks. -emit_message($node, 0); -$end_lsn = advance_to_record_splitting_zone($node); +$node->emit_wal(0); +$end_lsn = $node->advance_wal_to_record_splitting_zone($WAL_BLOCK_SIZE); $node->stop('immediate'); -write_wal($node, $TLI, $end_lsn, +$node->write_wal($TLI, $end_lsn, $WAL_SEGMENT_SIZE, build_record_header(2 * 1024 * 1024 * 1024, 0, 0xdeadbeef)); -write_wal( - $node, $TLI, +$node->write_wal( + $TLI, start_of_next_page($end_lsn), + $WAL_SEGMENT_SIZE, build_page_header( $XLP_PAGE_MAGIC, $XLP_FIRST_IS_CONTRECORD, 1, 0xbaaaaaad)); $log_size = -s $node->logfile; @@ -476,14 +344,15 @@ sub advance_to_record_splitting_zone # We'll also discover that xlp_rem_len doesn't add up before any # header checks, -emit_message($node, 0); -$end_lsn = advance_to_record_splitting_zone($node); +$node->emit_wal(0); +$end_lsn = $node->advance_wal_to_record_splitting_zone($WAL_BLOCK_SIZE); $node->stop('immediate'); -write_wal($node, $TLI, $end_lsn, +$node->write_wal($TLI, $end_lsn, $WAL_SEGMENT_SIZE, build_record_header(2 * 1024 * 1024 * 1024, 0, 0xdeadbeef)); -write_wal( - $node, $TLI, +$node->write_wal( + $TLI, start_of_next_page($end_lsn), + $WAL_SEGMENT_SIZE, build_page_header( $XLP_PAGE_MAGIC, $XLP_FIRST_IS_CONTRECORD, 1, start_of_next_page($end_lsn), From 5f725648fa3b29ffcf25c8c5123cdd9a36642862 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 16 Jan 2025 20:40:07 -0500 Subject: [PATCH 57/90] Fix setrefs.c's failure to do expression processing on prune steps. We should run the expression subtrees of PartitionedRelPruneInfo structs through fix_scan_expr. Failure to do so means that AlternativeSubPlans within those expressions won't be cleaned up properly, resulting in "unrecognized node type" errors since v14. It seems fairly likely that at least some of the other steps done by fix_scan_expr are important here as well, resulting in as-yet- undetected bugs. Therefore, I've chosen to back-patch this to all supported branches including v13, even though the known symptom doesn't manifest in v13. Per bug #18778 from Alexander Lakhin. Discussion: https://postgr.es/m/18778-24cd399df6c806af@postgresql.org --- src/backend/optimizer/plan/setrefs.c | 12 ++++++++ src/test/regress/expected/partition_prune.out | 29 +++++++++++++++++++ src/test/regress/sql/partition_prune.sql | 15 ++++++++++ 3 files changed, 56 insertions(+) diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index 2fd1c06d0b8..476a829f0e1 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -1568,6 +1568,12 @@ set_append_references(PlannerInfo *root, PartitionedRelPruneInfo *pinfo = lfirst(l2); pinfo->rtindex += rtoffset; + pinfo->initial_pruning_steps = + fix_scan_list(root, pinfo->initial_pruning_steps, + rtoffset, 1); + pinfo->exec_pruning_steps = + fix_scan_list(root, pinfo->exec_pruning_steps, + rtoffset, 1); } } } @@ -1640,6 +1646,12 @@ set_mergeappend_references(PlannerInfo *root, PartitionedRelPruneInfo *pinfo = lfirst(l2); pinfo->rtindex += rtoffset; + pinfo->initial_pruning_steps = + fix_scan_list(root, pinfo->initial_pruning_steps, + rtoffset, 1); + pinfo->exec_pruning_steps = + fix_scan_list(root, pinfo->exec_pruning_steps, + rtoffset, 1); } } } diff --git a/src/test/regress/expected/partition_prune.out b/src/test/regress/expected/partition_prune.out index fa1f2f230eb..5635e6bf1a0 100644 --- a/src/test/regress/expected/partition_prune.out +++ b/src/test/regress/expected/partition_prune.out @@ -1839,6 +1839,35 @@ explain (costs off) select * from rparted_by_int2 where a > 100000000000000; (2 rows) drop table lp, coll_pruning, rlp, mc3p, mc2p, boolpart, iboolpart, boolrangep, rp, coll_pruning_multi, like_op_noprune, lparted_by_int2, rparted_by_int2; +-- check that AlternativeSubPlan within a pruning expression gets cleaned up +create table asptab (id int primary key) partition by range (id); +create table asptab0 partition of asptab for values from (0) to (1); +create table asptab1 partition of asptab for values from (1) to (2); +explain (costs off) +select * from + (select exists (select 1 from int4_tbl tinner where f1 = touter.f1) as b + from int4_tbl touter) ss, + asptab +where asptab.id > ss.b::int; + QUERY PLAN +-------------------------------------------------------------------- + Nested Loop + -> Seq Scan on int4_tbl touter + -> Append + -> Index Only Scan using asptab0_pkey on asptab0 asptab_1 + Index Cond: (id > ((SubPlan 3))::integer) + SubPlan 4 + -> Seq Scan on int4_tbl tinner_2 + -> Index Only Scan using asptab1_pkey on asptab1 asptab_2 + Index Cond: (id > ((SubPlan 3))::integer) + SubPlan 3 + -> Seq Scan on int4_tbl tinner_1 + Filter: (f1 = touter.f1) + SubPlan 2 + -> Seq Scan on int4_tbl tinner +(14 rows) + +drop table asptab; -- -- Test Partition pruning for HASH partitioning -- diff --git a/src/test/regress/sql/partition_prune.sql b/src/test/regress/sql/partition_prune.sql index 6977efd0fbb..34a8e40509b 100644 --- a/src/test/regress/sql/partition_prune.sql +++ b/src/test/regress/sql/partition_prune.sql @@ -362,6 +362,21 @@ explain (costs off) select * from rparted_by_int2 where a > 100000000000000; drop table lp, coll_pruning, rlp, mc3p, mc2p, boolpart, iboolpart, boolrangep, rp, coll_pruning_multi, like_op_noprune, lparted_by_int2, rparted_by_int2; +-- check that AlternativeSubPlan within a pruning expression gets cleaned up + +create table asptab (id int primary key) partition by range (id); +create table asptab0 partition of asptab for values from (0) to (1); +create table asptab1 partition of asptab for values from (1) to (2); + +explain (costs off) +select * from + (select exists (select 1 from int4_tbl tinner where f1 = touter.f1) as b + from int4_tbl touter) ss, + asptab +where asptab.id > ss.b::int; + +drop table asptab; + -- -- Test Partition pruning for HASH partitioning -- From 060f9f5ea53752736fa5b3b7bf5779b257265b62 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 17 Jan 2025 13:27:47 +0900 Subject: [PATCH 58/90] Revert recent changes related to handling of 2PC files at recovery This commit reverts 8f67f994e8ea (down to v13) and c3de0f9eed38 (down to v17), as these are proving to not be completely correct regarding two aspects: - In v17 and newer branches, c3de0f9eed38's check for epoch handling is incorrect, and does not correctly handle frozen epochs. A logic closer to widen_snapshot_xid() should be used. The 2PC code should try to integrate deeper with FullTransactionIds, 5a1dfde8334b being not enough. - In v13 and newer branches, 8f67f994e8ea is a workaround for the real issue, which is that we should not attempt CLOG lookups without reaching consistency. This exists since 728bd991c3c4, and this is reachable with ProcessTwoPhaseBuffer() called by restoreTwoPhaseData() at the beginning of recovery. Per discussion with Noah Misch. Discussion: https://postgr.es/m/20250116010051.f3.nmisch@google.com Backpatch-through: 13 --- src/backend/access/transam/twophase.c | 16 ++++++++-------- src/test/recovery/t/009_twophase.pl | 25 +------------------------ 2 files changed, 9 insertions(+), 32 deletions(-) diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c index 9f1616c8773..16848fa226c 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -2156,40 +2156,40 @@ ProcessTwoPhaseBuffer(TransactionId xid, if (!fromdisk) Assert(prepare_start_lsn != InvalidXLogRecPtr); - /* Reject XID if too new */ - if (TransactionIdFollowsOrEquals(xid, origNextXid)) + /* Already processed? */ + if (TransactionIdDidCommit(xid) || TransactionIdDidAbort(xid)) { if (fromdisk) { ereport(WARNING, - (errmsg("removing future two-phase state file for transaction %u", + (errmsg("removing stale two-phase state file for transaction %u", xid))); RemoveTwoPhaseFile(xid, true); } else { ereport(WARNING, - (errmsg("removing future two-phase state from memory for transaction %u", + (errmsg("removing stale two-phase state from memory for transaction %u", xid))); PrepareRedoRemove(xid, true); } return NULL; } - /* Already processed? */ - if (TransactionIdDidCommit(xid) || TransactionIdDidAbort(xid)) + /* Reject XID if too new */ + if (TransactionIdFollowsOrEquals(xid, origNextXid)) { if (fromdisk) { ereport(WARNING, - (errmsg("removing stale two-phase state file for transaction %u", + (errmsg("removing future two-phase state file for transaction %u", xid))); RemoveTwoPhaseFile(xid, true); } else { ereport(WARNING, - (errmsg("removing stale two-phase state from memory for transaction %u", + (errmsg("removing future two-phase state from memory for transaction %u", xid))); PrepareRedoRemove(xid, true); } diff --git a/src/test/recovery/t/009_twophase.pl b/src/test/recovery/t/009_twophase.pl index 59c186a1c82..a5686db2526 100644 --- a/src/test/recovery/t/009_twophase.pl +++ b/src/test/recovery/t/009_twophase.pl @@ -7,7 +7,7 @@ use PostgresNode; use TestLib; -use Test::More tests => 28; +use Test::More tests => 27; my $psql_out = ''; my $psql_rc = ''; @@ -527,26 +527,3 @@ sub configure_and_reload is( $psql_out, qq{27|issued to paris}, "Check expected t_009_tbl2 data on standby"); - -############################################################################### -# Check handling of orphaned 2PC files at recovery. -############################################################################### - -$cur_primary->teardown_node; - -# Grab location in logs of primary -my $log_offset = -s $cur_primary->logfile; - -# Create a fake file with a transaction ID large enough to be in the future, -# then check that the primary is able to start and remove this file at -# recovery. - -my $future_2pc_file = $cur_primary->data_dir . '/pg_twophase/00FFFFFF'; -append_to_file $future_2pc_file, ""; - -$cur_primary->start; -$cur_primary->log_check( - "future two-phase file removed at recovery", - $log_offset, - log_like => - [qr/removing future two-phase state file for transaction 16777215/]); From 9f1c67488e59b9b8a1791e75783f7a817216259d Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Tue, 25 Oct 2022 15:24:41 +1300 Subject: [PATCH 59/90] Fix stat() for recursive junction points on Windows. Commit c5cb8f3b supposed that we'd only ever have to follow one junction point in stat(), because we don't construct longer chains of them ourselves. When examining a parent directory supplied by the user, we should really be able to cope with longer chains, just in case someone has their system set up that way. Choose an arbitrary cap of 8, to match the minimum acceptable value of SYMLOOP_MAX in POSIX. Previously I'd avoided reporting ELOOP thinking Windows didn't have it, but it turns out that it does, so we can use the proper error number. Reviewed-by: Roman Zharkov Discussion: https://postgr.es/m/CA%2BhUKGJ7JDGWYFt9%3D-TyJiRRy5q9TtPfqeKkneWDr1XPU1%2Biqw%40mail.gmail.com Discussion: https://postgr.es/m/CA%2BhUKG%2BajSQ_8eu2AogTncOnZ5me2D-Cn66iN_-wZnRjLN%2Bicg%40mail.gmail.com Backpatched commit 4517358e as above by Thomas Munro into releases 13 thru 15 Discussion: https://postgr.es/m/CA+hUKGLbnv+pe3q1fYOVkLD3pMra7GuihfMxUN-1831YH9RYQg@mail.gmail.com --- src/port/win32stat.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/port/win32stat.c b/src/port/win32stat.c index 49fbb3ce649..28813e3f89f 100644 --- a/src/port/win32stat.c +++ b/src/port/win32stat.c @@ -201,23 +201,33 @@ _pglstat64(const char *name, struct stat *buf) int _pgstat64(const char *name, struct stat *buf) { + int loops = 0; int ret; + char curr[MAXPGPATH]; ret = _pglstat64(name, buf); + strlcpy(curr, name, MAXPGPATH); + /* Do we need to follow a symlink (junction point)? */ - if (ret == 0 && S_ISLNK(buf->st_mode)) + while (ret == 0 && S_ISLNK(buf->st_mode)) { char next[MAXPGPATH]; ssize_t size; + if (++loops > 8) + { + errno = ELOOP; + return -1; + } + /* * _pglstat64() already called readlink() once to be able to fill in * st_size, and now we need to do it again to get the path to follow. * That could be optimized, but stat() on symlinks is probably rare * and this way is simple. */ - size = readlink(name, next, sizeof(next)); + size = readlink(curr, next, sizeof(next)); if (size < 0) { if (errno == EACCES && @@ -236,17 +246,7 @@ _pgstat64(const char *name, struct stat *buf) next[size] = 0; ret = _pglstat64(next, buf); - if (ret == 0 && S_ISLNK(buf->st_mode)) - { - /* - * We're only prepared to go one hop, because we only expect to - * deal with the simple cases that we create. The error for too - * many symlinks is supposed to be ELOOP, but Windows hasn't got - * it. - */ - errno = EIO; - return -1; - } + strcpy(curr, next); } return ret; From f4fd5325cc870cc7563703ed2dc3661139cf5d13 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Tue, 25 Oct 2022 15:21:42 +1300 Subject: [PATCH 60/90] Fix readlink() for non-PostgreSQL junction points on Windows. Since commit c5cb8f3b taught stat() to follow symlinks, and since initdb uses pg_mkdir_p(), and that examines parent directories, our humble readlink() implementation can now be exposed to junction points not of PostgreSQL origin. Those might be corrupted by our naive path mangling, which doesn't really understand NT paths in general. Simply decline to transform paths that don't look like a drive absolute path. That means that readlink() returns the NT path directly when checking a parent directory of PGDATA that happen to point to a drive using "rooted" format. That works for the purposes of our stat() emulation. Reported-by: Roman Zharkov Reviewed-by: Roman Zharkov Discussion: https://postgr.es/m/4590c37927d7b8ee84f9855d83229018%40postgrespro.ru Discussion: https://postgr.es/m/CA%2BhUKG%2BajSQ_8eu2AogTncOnZ5me2D-Cn66iN_-wZnRjLN%2Bicg%40mail.gmail.com Backpatched commit f71007fb as above by Thomas Munro into releases 13 thru 15 Discussion: https://postgr.es/m/CA+hUKGLbnv+pe3q1fYOVkLD3pMra7GuihfMxUN-1831YH9RYQg@mail.gmail.com --- src/port/dirmod.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/port/dirmod.c b/src/port/dirmod.c index bc2ad75966e..f03ca08920d 100644 --- a/src/port/dirmod.c +++ b/src/port/dirmod.c @@ -351,10 +351,21 @@ pgreadlink(const char *path, char *buf, size_t size) } /* - * If the path starts with "\??\", which it will do in most (all?) cases, - * strip those out. + * If the path starts with "\??\" followed by a "drive absolute" path + * (known to Windows APIs as RtlPathTypeDriveAbsolute), then strip that + * prefix. This undoes some of the transformation performed by + * pqsymlink(), to get back to a format that users are used to seeing. We + * don't know how to transform other path types that might be encountered + * outside PGDATA, so we just return them directly. */ - if (r > 4 && strncmp(buf, "\\??\\", 4) == 0) + if (r >= 7 && + buf[0] == '\\' && + buf[1] == '?' && + buf[2] == '?' && + buf[3] == '\\' && + isalpha(buf[4]) && + buf[5] == ':' && + buf[6] == '\\') { memmove(buf, buf + 4, strlen(buf + 4) + 1); r -= 4; From a2d4f806c4b91496f6055ea1200b5268ee550fca Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 20 Jan 2025 09:30:39 +0900 Subject: [PATCH 61/90] Fix header check for continuation records where standbys could be stuck XLogPageRead() checks immediately for an invalid WAL record header on a standby, to be able to handle the case of continuation records that need to be read across two different sources. As written, the check was too generic, applying to any target LSN. Based on an analysis by Kyotaro Horiguchi, what really matters is to make sure that the page header is checked when attempting to read a LSN at the boundary of a segment, to handle the case of a continuation record that spawns across multiple pages when dealing with multiple segments, as WAL receivers are spawned they request WAL from the beginning of a segment. This fix has been proposed by Kyotaro Horiguchi. This could cause standbys to loop infinitely when dealing with a continuation record during a timeline jump, in the case where the contents of the record in the follow-up page are invalid. Some regression tests are added to check such scenarios, able to reproduce the original problem. In the test, the contents of a continuation record are overwritten with junk zeros on its follow-up page, and replayed on standbys. This is inspired by 039_end_of_wal.pl, and is enough to show how standbys should react on promotion by not being stuck. Without the fix, the test would fail with a timeout. The test to reproduce the problem has been written by Alexander Kukushkin. The original check has been introduced in 066871980183, for a similar problem. Author: Kyotaro Horiguchi, Alexander Kukushkin Reviewed-by: Michael Paquier Discussion: https://postgr.es/m/CAFh8B=mozC+e1wGJq0H=0O65goZju+6ab5AU7DEWCSUA2OtwDg@mail.gmail.com Backpatch-through: 13 --- src/backend/access/transam/xlog.c | 24 +-- .../recovery/t/043_no_contrecord_switch.pl | 153 ++++++++++++++++++ 2 files changed, 165 insertions(+), 12 deletions(-) create mode 100644 src/test/recovery/t/043_no_contrecord_switch.pl diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index a6e2cb88f34..0334c2d3bba 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -12562,18 +12562,17 @@ XLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen, * validates the page header anyway, and would propagate the failure up to * ReadRecord(), which would retry. However, there's a corner case with * continuation records, if a record is split across two pages such that - * we would need to read the two pages from different sources. For - * example, imagine a scenario where a streaming replica is started up, - * 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. + * we would need to read the two pages from different sources 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 + * 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 @@ -12589,6 +12588,7 @@ XLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen, * responsible for the validation. */ if (StandbyMode && + (targetPagePtr % wal_segment_size) == 0 && !XLogReaderValidatePageHeader(xlogreader, targetPagePtr, readBuf)) { /* diff --git a/src/test/recovery/t/043_no_contrecord_switch.pl b/src/test/recovery/t/043_no_contrecord_switch.pl new file mode 100644 index 00000000000..14c3ac3d0e6 --- /dev/null +++ b/src/test/recovery/t/043_no_contrecord_switch.pl @@ -0,0 +1,153 @@ +# Copyright (c) 2021-2025, PostgreSQL Global Development Group + +# Tests for already-propagated WAL segments ending in incomplete WAL records. + +use strict; +use warnings; + +use File::Copy; +use PostgreSQL::Test::Cluster; +use Test::More; +use Fcntl qw(SEEK_SET); + +use integer; # causes / operator to use integer math + +# Values queried from the server +my $WAL_SEGMENT_SIZE; +my $WAL_BLOCK_SIZE; +my $TLI; + +# Build name of a WAL segment, used when filtering the contents of the server +# logs. +sub wal_segment_name +{ + my $tli = shift; + my $segment = shift; + return sprintf("%08X%08X%08X", $tli, 0, $segment); +} + +# Calculate from a LSN (in bytes) its segment number and its offset, used +# when filtering the contents of the server logs. +sub lsn_to_segment_and_offset +{ + my $lsn = shift; + return ($lsn / $WAL_SEGMENT_SIZE, $lsn % $WAL_SEGMENT_SIZE); +} + +# Get GUC value, converted to an int. +sub get_int_setting +{ + my $node = shift; + my $name = shift; + return int( + $node->safe_psql( + 'postgres', + "SELECT setting FROM pg_settings WHERE name = '$name'")); +} + +sub start_of_page +{ + my $lsn = shift; + return $lsn & ~($WAL_BLOCK_SIZE - 1); +} + +my $primary = PostgreSQL::Test::Cluster->new('primary'); +$primary->init(allows_streaming => 1, has_archiving => 1); + +# The configuration is chosen here to minimize the friction with +# concurrent WAL activity. checkpoint_timeout avoids noise with +# checkpoint activity, and autovacuum is disabled to avoid any +# WAL activity generated by it. +$primary->append_conf( + 'postgresql.conf', qq( +autovacuum = off +checkpoint_timeout = '30min' +wal_keep_size = 1GB +)); + +$primary->start; +$primary->backup('backup'); + +$primary->safe_psql('postgres', "CREATE TABLE t AS SELECT 0"); + +$WAL_SEGMENT_SIZE = get_int_setting($primary, 'wal_segment_size'); +$WAL_BLOCK_SIZE = get_int_setting($primary, 'wal_block_size'); +$TLI = $primary->safe_psql('postgres', + "SELECT timeline_id FROM pg_control_checkpoint()"); + +# Get close to the end of the current WAL page, enough to fit the +# beginning of a record that spans on two pages, generating a +# continuation record. +$primary->emit_wal(0); +my $end_lsn = + $primary->advance_wal_out_of_record_splitting_zone($WAL_BLOCK_SIZE); + +# Do some math to find the record size that will overflow the page, and +# write it. +my $overflow_size = $WAL_BLOCK_SIZE - ($end_lsn % $WAL_BLOCK_SIZE); +$end_lsn = $primary->emit_wal($overflow_size); +$primary->stop('immediate'); + +# Find the beginning of the page with the continuation record and fill +# the entire page with zero bytes to simulate broken replication. +my $start_page = start_of_page($end_lsn); +my $wal_file = $primary->write_wal($TLI, $start_page, $WAL_SEGMENT_SIZE, + "\x00" x $WAL_BLOCK_SIZE); + +# Copy the file we just "hacked" to the archives. +copy($wal_file, $primary->archive_dir); + +# Start standby nodes and make sure they replay the file "hacked" from +# the archives. +my $standby1 = PostgreSQL::Test::Cluster->new('standby1'); +$standby1->init_from_backup( + $primary, 'backup', + standby => 1, + has_restoring => 1); + +my $standby2 = PostgreSQL::Test::Cluster->new('standby2'); +$standby2->init_from_backup( + $primary, 'backup', + standby => 1, + has_restoring => 1); + +my $log_size1 = -s $standby1->logfile; +my $log_size2 = -s $standby2->logfile; + +$standby1->start; +$standby2->start; + +my ($segment, $offset) = lsn_to_segment_and_offset($start_page); +my $segment_name = wal_segment_name($TLI, $segment); +my $pattern = + qq(invalid magic number 0000 .* segment $segment_name.* offset $offset); + +# We expect both standby nodes to complain about empty page when trying to +# assemble the record that spans over two pages, so wait for these in their +# logs. +$standby1->wait_for_log($pattern, $log_size1); +$standby2->wait_for_log($pattern, $log_size2); + +# Now check the case of a promotion with a timeline jump handled at +# page boundary with a continuation record. +$standby1->promote; + +# This command forces standby2 to read a continuation record from the page +# that is filled with zero bytes. +$standby1->safe_psql('postgres', 'SELECT pg_switch_wal()'); + +# Make sure WAL moves forward. +$standby1->safe_psql('postgres', + 'INSERT INTO t SELECT * FROM generate_series(1, 1000)'); + +# Configure standby2 to stream from just promoted standby1 (it also pulls WAL +# files from the archive). It should be able to catch up. +$standby2->enable_streaming($standby1); +$standby2->reload; +$standby1->wait_for_catchup('standby2', 'replay', $standby1->lsn('flush')); + +my $result = $standby2->safe_psql('postgres', "SELECT count(*) FROM t"); +print "standby2: $result\n"; +is($result, qq(1001), 'check streamed content on standby2'); + +done_testing(); From aac0384975ff1129557cd2158fab4656f933cdc8 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 20 Jan 2025 15:47:53 -0500 Subject: [PATCH 62/90] Avoid using timezone Asia/Manila in regression tests. The freshly-released 2025a version of tzdata has a refined estimate for the longitude of Manila, changing their value for LMT in pre-standardized-timezone days. This changes the output of one of our test cases. Since we need to be able to run with system tzdata files that may or may not contain this update, we'd better stop making that specific test. I switched it to use Asia/Singapore, which has a roughly similar UTC offset. That LMT value hasn't changed in tzdb since 2003, so we can hope that it's well established. I also noticed that this set of make_timestamptz tests only exercises zones east of Greenwich, which seems rather sad, and was not the original intent AFAICS. (We've already changed these tests once to stabilize their results across tzdata updates, cf 66b737cd9; it looks like I failed to consider the UTC-offset-sign aspect then.) To improve that, add a test with Pacific/Honolulu. That LMT offset is also quite old in tzdb, so we'll cross our fingers that it doesn't get improved. Reported-by: Christoph Berg Discussion: https://postgr.es/m/Z46inkznCxesvDEb@msg.df7cb.de Backpatch-through: 13 --- src/include/datatype/timestamp.h | 2 +- src/test/regress/expected/timestamptz.out | 10 ++++++++-- src/test/regress/sql/timestamptz.sql | 3 ++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/include/datatype/timestamp.h b/src/include/datatype/timestamp.h index 99873497a6d..cde642e256c 100644 --- a/src/include/datatype/timestamp.h +++ b/src/include/datatype/timestamp.h @@ -96,7 +96,7 @@ typedef struct /* * We allow numeric timezone offsets up to 15:59:59 either way from Greenwich. * Currently, the record holders for wackiest offsets in actual use are zones - * Asia/Manila, at -15:56:00 until 1844, and America/Metlakatla, at +15:13:42 + * Asia/Manila, at -15:56:08 until 1844, and America/Metlakatla, at +15:13:42 * until 1867. If we were to reject such values we would fail to dump and * restore old timestamptz values with these zone settings. */ diff --git a/src/test/regress/expected/timestamptz.out b/src/test/regress/expected/timestamptz.out index 2a30f4861c4..ae5aa7b4558 100644 --- a/src/test/regress/expected/timestamptz.out +++ b/src/test/regress/expected/timestamptz.out @@ -2277,10 +2277,16 @@ SELECT make_timestamptz(2014, 12, 10, 0, 0, 0, 'Europe/Prague') AT TIME ZONE 'UT Tue Dec 09 23:00:00 2014 (1 row) -SELECT make_timestamptz(1846, 12, 10, 0, 0, 0, 'Asia/Manila') AT TIME ZONE 'UTC'; +SELECT make_timestamptz(1881, 12, 10, 0, 0, 0, 'Asia/Singapore') AT TIME ZONE 'UTC'; timezone -------------------------- - Wed Dec 09 15:56:00 1846 + Fri Dec 09 17:04:35 1881 +(1 row) + +SELECT make_timestamptz(1881, 12, 10, 0, 0, 0, 'Pacific/Honolulu') AT TIME ZONE 'UTC'; + timezone +-------------------------- + Sat Dec 10 10:31:26 1881 (1 row) SELECT make_timestamptz(1881, 12, 10, 0, 0, 0, 'Europe/Paris') AT TIME ZONE 'UTC'; diff --git a/src/test/regress/sql/timestamptz.sql b/src/test/regress/sql/timestamptz.sql index 13fe425f2c9..012318b6cef 100644 --- a/src/test/regress/sql/timestamptz.sql +++ b/src/test/regress/sql/timestamptz.sql @@ -407,7 +407,8 @@ SELECT make_timestamptz(1973, 07, 15, 08, 15, 55.33, '+2') = '1973-07-15 08:15:5 -- full timezone names SELECT make_timestamptz(2014, 12, 10, 0, 0, 0, 'Europe/Prague') = timestamptz '2014-12-10 00:00:00 Europe/Prague'; SELECT make_timestamptz(2014, 12, 10, 0, 0, 0, 'Europe/Prague') AT TIME ZONE 'UTC'; -SELECT make_timestamptz(1846, 12, 10, 0, 0, 0, 'Asia/Manila') AT TIME ZONE 'UTC'; +SELECT make_timestamptz(1881, 12, 10, 0, 0, 0, 'Asia/Singapore') AT TIME ZONE 'UTC'; +SELECT make_timestamptz(1881, 12, 10, 0, 0, 0, 'Pacific/Honolulu') AT TIME ZONE 'UTC'; SELECT make_timestamptz(1881, 12, 10, 0, 0, 0, 'Europe/Paris') AT TIME ZONE 'UTC'; SELECT make_timestamptz(1910, 12, 24, 0, 0, 0, 'Nehwon/Lankhmar'); From 20b4819d0e351767f7f123ebdb5be246bba1a1bf Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 20 Jan 2025 16:49:15 -0500 Subject: [PATCH 63/90] Update time zone data files to tzdata release 2025a. DST law changes in Paraguay. Historical corrections for the Philippines. Backpatch-through: 13 --- src/timezone/data/tzdata.zi | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/src/timezone/data/tzdata.zi b/src/timezone/data/tzdata.zi index 62e78bb826c..db6ba4af2b0 100644 --- a/src/timezone/data/tzdata.zi +++ b/src/timezone/data/tzdata.zi @@ -1,4 +1,4 @@ -# version 2024b +# version 2025a # This zic input file is in the public domain. R d 1916 o - Jun 14 23s 1 S R d 1916 1919 - O Su>=1 23s 0 - @@ -721,12 +721,16 @@ R P 2085 o - Ap 21 2 0 - R P 2085 o - Jun 9 2 1 S R P 2086 o - Ap 13 2 0 - R P 2086 o - May 25 2 1 S -R PH 1936 o - N 1 0 1 D -R PH 1937 o - F 1 0 0 S -R PH 1954 o - Ap 12 0 1 D -R PH 1954 o - Jul 1 0 0 S -R PH 1978 o - Mar 22 0 1 D -R PH 1978 o - S 21 0 0 S +R PH 1936 o - O 31 24 1 D +R PH 1937 o - Ja 15 24 0 S +R PH 1941 o - D 15 24 1 D +R PH 1945 o - N 30 24 0 S +R PH 1954 o - Ap 11 24 1 D +R PH 1954 o - Jun 4 24 0 S +R PH 1977 o - Mar 27 24 1 D +R PH 1977 o - S 21 24 0 S +R PH 1990 o - May 21 0 1 D +R PH 1990 o - Jul 28 24 0 S R S 1920 1923 - Ap Su>=15 2 1 S R S 1920 1923 - O Su>=1 2 0 - R S 1962 o - Ap 29 2 1 S @@ -1725,7 +1729,7 @@ R Y 1972 2006 - O lastSu 2 0 S R Y 1987 2006 - Ap Su>=1 2 1 D R Yu 1965 o - Ap lastSu 0 2 DD R Yu 1965 o - O lastSu 2 0 S -R m 1931 o - April 30 0 1 D +R m 1931 o - Ap 30 0 1 D R m 1931 o - O 1 0 0 S R m 1939 o - F 5 0 1 D R m 1939 o - Jun 25 0 0 S @@ -2019,9 +2023,9 @@ R y 2002 2004 - Ap Su>=1 0 0 - R y 2002 2003 - S Su>=1 0 1 - R y 2004 2009 - O Su>=15 0 1 - R y 2005 2009 - Mar Su>=8 0 0 - -R y 2010 ma - O Su>=1 0 1 - +R y 2010 2024 - O Su>=1 0 1 - R y 2010 2012 - Ap Su>=8 0 0 - -R y 2013 ma - Mar Su>=22 0 0 - +R y 2013 2024 - Mar Su>=22 0 0 - R PE 1938 o - Ja 1 0 1 - R PE 1938 o - Ap 1 0 0 - R PE 1938 1939 - S lastSu 0 1 - @@ -2336,7 +2340,8 @@ Z America/Asuncion -3:50:40 - LMT 1890 -3:50:40 - AMT 1931 O 10 -4 - %z 1972 O -3 - %z 1974 Ap --4 y %z +-4 y %z 2024 O 15 +-3 - %z Z America/Bahia -2:34:4 - LMT 1914 -3 B %z 2003 S 24 -3 - %z 2011 O 16 @@ -3268,10 +3273,10 @@ Z Asia/Makassar 7:57:36 - LMT 1920 8 - %z 1942 F 9 9 - %z 1945 S 23 8 - WITA -Z Asia/Manila -15:56 - LMT 1844 D 31 -8:4 - LMT 1899 May 11 -8 PH P%sT 1942 May -9 - JST 1944 N +Z Asia/Manila -15:56:8 - LMT 1844 D 31 +8:3:52 - LMT 1899 S 6 4u +8 PH P%sT 1942 F 11 24 +9 - JST 1945 Mar 4 8 PH P%sT Z Asia/Nicosia 2:13:28 - LMT 1921 N 14 2 CY EE%sT 1998 S From 30859930528b50e55f1a3ea66b6a9a3704c8df62 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 22 Jan 2025 11:58:20 -0500 Subject: [PATCH 64/90] Repair incorrect handling of AfterTriggerSharedData.ats_modifiedcols. This patch fixes two distinct errors that both ultimately trace to commit 71d60e2aa, which added the ats_modifiedcols field. The more severe error is that ats_modifiedcols wasn't accounted for in afterTriggerAddEvent's scanning loop that looks for a pre-existing duplicate AfterTriggerSharedData. Thus, a new event could be incorrectly matched to an AfterTriggerSharedData that has a different value of ats_modifiedcols, resulting in the wrong tg_updatedcols bitmap getting passed to the trigger whenever it finally gets fired. We'd not noticed because (a) few triggers consult tg_updatedcols, and (b) we had no tests exercising a case where such a trigger was called as an AFTER trigger. In the test case added by this commit, contrib/lo's trigger fails to remove a large object when expected because (without this fix) it thinks the LO OID column hasn't changed. The other problem was introduced by commit ce5aaea8c, which copied the modified-columns bitmap into trigger-related storage. It made a copy for every trigger event, whereas what we really want is to make a new copy only when we make a new AfterTriggerSharedData entry. (We could imagine adding extra logic to reduce the number of bitmap copies still more, but it doesn't look worthwhile at the moment.) In a simple test of an UPDATE of 10000000 rows with a single AFTER trigger, this thinko roughly tripled the amount of memory consumed by the pending-triggers data structures, from 160446744 to 480443440 bytes. Fixing the first problem requires introducing a bms_equal() call into afterTriggerAddEvent's scanning loop, which is slightly annoying from a speed perspective. However, getting rid of the excessive bms_copy() calls from the second problem balances that out; overall speed of trigger operations is the same or slightly better, in my tests. Discussion: https://postgr.es/m/3496294.1737501591@sss.pgh.pa.us Backpatch-through: 13 --- contrib/lo/expected/lo.out | 69 ++++++++++++++++++++++++++++++++++ contrib/lo/sql/lo.sql | 40 ++++++++++++++++++++ src/backend/commands/trigger.c | 18 ++++----- 3 files changed, 117 insertions(+), 10 deletions(-) diff --git a/contrib/lo/expected/lo.out b/contrib/lo/expected/lo.out index c63e4b1c704..1b6c5a85649 100644 --- a/contrib/lo/expected/lo.out +++ b/contrib/lo/expected/lo.out @@ -47,4 +47,73 @@ SELECT lo_get(43214); DELETE FROM image; SELECT lo_get(43214); ERROR: large object 43214 does not exist +-- Now let's try it with an AFTER trigger +DROP TRIGGER t_raster ON image; +CREATE CONSTRAINT TRIGGER t_raster AFTER UPDATE OR DELETE ON image + DEFERRABLE INITIALLY DEFERRED + FOR EACH ROW EXECUTE PROCEDURE lo_manage(raster); +SELECT lo_create(43223); + lo_create +----------- + 43223 +(1 row) + +SELECT lo_create(43224); + lo_create +----------- + 43224 +(1 row) + +SELECT lo_create(43225); + lo_create +----------- + 43225 +(1 row) + +INSERT INTO image (title, raster) VALUES ('beautiful image', 43223); +SELECT lo_get(43223); + lo_get +-------- + \x +(1 row) + +UPDATE image SET raster = 43224 WHERE title = 'beautiful image'; +SELECT lo_get(43223); -- gone +ERROR: large object 43223 does not exist +SELECT lo_get(43224); + lo_get +-------- + \x +(1 row) + +-- test updating of unrelated column +UPDATE image SET title = 'beautiful picture' WHERE title = 'beautiful image'; +SELECT lo_get(43224); + lo_get +-------- + \x +(1 row) + +-- this case used to be buggy +BEGIN; +UPDATE image SET title = 'beautiful image' WHERE title = 'beautiful picture'; +UPDATE image SET raster = 43225 WHERE title = 'beautiful image'; +SELECT lo_get(43224); + lo_get +-------- + \x +(1 row) + +COMMIT; +SELECT lo_get(43224); -- gone +ERROR: large object 43224 does not exist +SELECT lo_get(43225); + lo_get +-------- + \x +(1 row) + +DELETE FROM image; +SELECT lo_get(43225); -- gone +ERROR: large object 43225 does not exist DROP TABLE image; diff --git a/contrib/lo/sql/lo.sql b/contrib/lo/sql/lo.sql index 77039509245..99c3bd1fab3 100644 --- a/contrib/lo/sql/lo.sql +++ b/contrib/lo/sql/lo.sql @@ -27,4 +27,44 @@ DELETE FROM image; SELECT lo_get(43214); +-- Now let's try it with an AFTER trigger + +DROP TRIGGER t_raster ON image; + +CREATE CONSTRAINT TRIGGER t_raster AFTER UPDATE OR DELETE ON image + DEFERRABLE INITIALLY DEFERRED + FOR EACH ROW EXECUTE PROCEDURE lo_manage(raster); + +SELECT lo_create(43223); +SELECT lo_create(43224); +SELECT lo_create(43225); + +INSERT INTO image (title, raster) VALUES ('beautiful image', 43223); + +SELECT lo_get(43223); + +UPDATE image SET raster = 43224 WHERE title = 'beautiful image'; + +SELECT lo_get(43223); -- gone +SELECT lo_get(43224); + +-- test updating of unrelated column +UPDATE image SET title = 'beautiful picture' WHERE title = 'beautiful image'; + +SELECT lo_get(43224); + +-- this case used to be buggy +BEGIN; +UPDATE image SET title = 'beautiful image' WHERE title = 'beautiful picture'; +UPDATE image SET raster = 43225 WHERE title = 'beautiful image'; +SELECT lo_get(43224); +COMMIT; + +SELECT lo_get(43224); -- gone +SELECT lo_get(43225); + +DELETE FROM image; + +SELECT lo_get(43225); -- gone + DROP TABLE image; diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index c852b137f06..d04b4beed91 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -3723,13 +3723,6 @@ afterTriggerCopyBitmap(Bitmapset *src) if (src == NULL) return NULL; - /* Create event context if we didn't already */ - if (afterTriggers.event_cxt == NULL) - afterTriggers.event_cxt = - AllocSetContextCreate(TopTransactionContext, - "AfterTriggerEvents", - ALLOCSET_DEFAULT_SIZES); - oldcxt = MemoryContextSwitchTo(afterTriggers.event_cxt); dst = bms_copy(src); @@ -3831,16 +3824,21 @@ afterTriggerAddEvent(AfterTriggerEventList *events, (char *) newshared >= chunk->endfree; newshared--) { + /* compare fields roughly by probability of them being different */ if (newshared->ats_tgoid == evtshared->ats_tgoid && - newshared->ats_relid == evtshared->ats_relid && newshared->ats_event == evtshared->ats_event && + newshared->ats_firing_id == 0 && newshared->ats_table == evtshared->ats_table && - newshared->ats_firing_id == 0) + newshared->ats_relid == evtshared->ats_relid && + bms_equal(newshared->ats_modifiedcols, + evtshared->ats_modifiedcols)) break; } if ((char *) newshared < chunk->endfree) { *newshared = *evtshared; + /* now we must make a suitably-long-lived copy of the bitmap */ + newshared->ats_modifiedcols = afterTriggerCopyBitmap(evtshared->ats_modifiedcols); newshared->ats_firing_id = 0; /* just to be sure */ chunk->endfree = (char *) newshared; } @@ -5857,7 +5855,7 @@ AfterTriggerSaveEvent(EState *estate, ResultRelInfo *relinfo, new_shared.ats_table = transition_capture->tcs_private; else new_shared.ats_table = NULL; - new_shared.ats_modifiedcols = afterTriggerCopyBitmap(modifiedCols); + new_shared.ats_modifiedcols = modifiedCols; afterTriggerAddEvent(&afterTriggers.query_stack[afterTriggers.query_depth].events, &new_event, &new_shared); From 63a4b9f767866f4cbe7416c7eff7e35206d871b5 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 23 Jan 2025 14:23:04 -0500 Subject: [PATCH 65/90] Don't ask for bug reports about pthread_is_threaded_np() != 0. We thought that this condition was unreachable in ExitPostmaster, but actually it's possible if you have both a misconfigured locale setting and some other mistake that causes PostmasterMain to bail out before reaching its own check of pthread_is_threaded_np(). Given the lack of other reports, let's not ask for bug reports if this occurs; instead just give the same hint as in PostmasterMain. Bug: #18783 Reported-by: anani191181515@gmail.com Author: Tom Lane Reviewed-by: Noah Misch Discussion: https://postgr.es/m/18783-d1873b95a59b9103@postgresql.org Discussion: https://postgr.es/m/206317.1737656533@sss.pgh.pa.us Backpatch-through: 13 --- src/backend/postmaster/postmaster.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 82a8d4a6c39..719a149f7d4 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -1387,6 +1387,8 @@ PostmasterMain(int argc, char *argv[]) * calls fork() without an immediate exec(), both of which have undefined * behavior in a multithreaded program. A multithreaded postmaster is the * normal case on Windows, which offers neither fork() nor sigprocmask(). + * Currently, macOS is the only platform having pthread_is_threaded_np(), + * so we need not worry whether this HINT is appropriate elsewhere. */ if (pthread_is_threaded_np() != 0) ereport(FATAL, @@ -5134,15 +5136,16 @@ ExitPostmaster(int status) /* * There is no known cause for a postmaster to become multithreaded after - * startup. Recheck to account for the possibility of unknown causes. + * startup. However, we might reach here via an error exit before + * reaching the test in PostmasterMain, so provide the same hint as there. * This message uses LOG level, because an unclean shutdown at this point * would usually not look much different from a clean shutdown. */ if (pthread_is_threaded_np() != 0) ereport(LOG, - (errcode(ERRCODE_INTERNAL_ERROR), - errmsg_internal("postmaster became multithreaded"), - errdetail("Please report this to <%s>.", PACKAGE_BUGREPORT))); + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("postmaster became multithreaded"), + errhint("Set the LC_ALL environment variable to a valid locale."))); #endif /* should cleanup shared memory and kill all backends */ From fb60050f42019b1dc5781fa0f43ca0fa7f0de9c7 Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Sat, 25 Jan 2025 00:36:48 +0100 Subject: [PATCH 66/90] Use the correct sizeof() in BufFileLoadBuffer The sizeof() call should reference buffer.data, because that's the buffer we're reading data into, not the whole PGAlignedBuffer union. This was introduced by 44cac93464, which replaced the simple buffer with a PGAlignedBuffer field. It's benign, because the buffer is the largest field of the union, so the sizes are the same. But it's easy to trip over this in a patch, so fix and backpatch. Commit 44cac93464 went into 12, but that's EOL. Backpatch-through: 13 Discussion: https://postgr.es/m/928bdab1-6567-449f-98c4-339cd2203b87@vondra.me --- src/backend/storage/file/buffile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/storage/file/buffile.c b/src/backend/storage/file/buffile.c index a4be5fe5135..2afbe907ac5 100644 --- a/src/backend/storage/file/buffile.c +++ b/src/backend/storage/file/buffile.c @@ -434,7 +434,7 @@ BufFileLoadBuffer(BufFile *file) thisfile = file->files[file->curFile]; file->nbytes = FileRead(thisfile, file->buffer.data, - sizeof(file->buffer), + sizeof(file->buffer.data), file->curOffset, WAIT_EVENT_BUFFILE_READ); if (file->nbytes < 0) From 4106942f004fdd789ea4b35be0585c1f8268744d Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 25 Jan 2025 12:42:05 -0500 Subject: [PATCH 67/90] Doc: recommend "psql -X" for restoring pg_dump scripts. This practice avoids possible problems caused by non-default psql options, such as disabling AUTOCOMMIT. Author: Shinya Kato Reviewed-by: Robert Treat Discussion: https://postgr.es/m/96ff23a5d858ff72ca8e823a014d16fe@oss.nttdata.com Backpatch-through: 13 --- doc/src/sgml/backup.sgml | 22 ++++++++++++++-------- doc/src/sgml/ref/pg_dump.sgml | 10 +++++++++- doc/src/sgml/ref/pg_dumpall.sgml | 15 +++++++++++++-- 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/doc/src/sgml/backup.sgml b/doc/src/sgml/backup.sgml index cba32b6eb3e..e2030d6f48e 100644 --- a/doc/src/sgml/backup.sgml +++ b/doc/src/sgml/backup.sgml @@ -106,10 +106,10 @@ pg_dump dbname > Text files created by pg_dump are intended to - be read in by the psql program. The - general command form to restore a dump is + be read by the psql program using its default + settings. The general command form to restore a text dump is -psql dbname < dumpfile +psql -X dbname < dumpfile where dumpfile is the file output by the pg_dump command. The database dbname < template0 before executing psql (e.g., with createdb -T template0 dbname). psql + class="parameter">dbname). + To ensure psql runs with its default settings, + use the () option. + psql supports options similar to pg_dump for specifying the database server to connect to and the user name to use. See the reference page for more information. - Non-text file dumps are restored using the + + + Non-text file dumps should be restored using the utility. @@ -141,7 +147,7 @@ psql dbname < psql exit with an exit status of 3 if an SQL error occurs: -psql --set ON_ERROR_STOP=on dbname < dumpfile +psql -X --set ON_ERROR_STOP=on dbname < dumpfile Either way, you will only have a partially restored database. Alternatively, you can specify that the whole dump should be @@ -160,7 +166,7 @@ psql --set ON_ERROR_STOP=on dbname < write to or read from pipes makes it possible to dump a database directly from one server to another, for example: -pg_dump -h host1 dbname | psql -h host2 dbname +pg_dump -h host1 dbname | psql -X -h host2 dbname @@ -205,7 +211,7 @@ pg_dumpall > dumpfile The resulting dump can be restored with psql: -psql -f dumpfile postgres +psql -X -f dumpfile postgres (Actually, you can specify any existing database name to start from, but if you are loading into an empty cluster then postgres diff --git a/doc/src/sgml/ref/pg_dump.sgml b/doc/src/sgml/ref/pg_dump.sgml index 9ec8e6d202c..5e5c141e178 100644 --- a/doc/src/sgml/ref/pg_dump.sgml +++ b/doc/src/sgml/ref/pg_dump.sgml @@ -1408,6 +1408,14 @@ CREATE DATABASE foo WITH TEMPLATE template0; information might have to be changed. It might also be appropriate to truncate the target tables before initiating a new full table copy. + + + It is generally recommended to use the + () option when restoring a database from a + plain-text pg_dump script to ensure a clean + restore process and prevent potential conflicts with + non-default psql configurations. + @@ -1425,7 +1433,7 @@ CREATE DATABASE foo WITH TEMPLATE template0; newdb: -$ psql -d newdb -f db.sql +$ psql -X -d newdb -f db.sql diff --git a/doc/src/sgml/ref/pg_dumpall.sgml b/doc/src/sgml/ref/pg_dumpall.sgml index cb071903783..0d77a4836ae 100644 --- a/doc/src/sgml/ref/pg_dumpall.sgml +++ b/doc/src/sgml/ref/pg_dumpall.sgml @@ -774,6 +774,17 @@ PostgreSQL documentation database creation will fail for databases in non-default locations. + + + It is generally recommended to use the + () option when restoring a database from a + pg_dumpall script to ensure a clean restore + process and prevent potential conflicts with non-default + psql configurations. Additionally, because + the pg_dumpall script may + include psql meta-commands, it may be + incompatible with clients other than psql. + @@ -790,9 +801,9 @@ PostgreSQL documentation To restore database(s) from this file, you can use: -$ psql -f db.out postgres +$ psql -X -f db.out -d postgres - It is not important to which database you connect here since the + It is not important which database you connect to here since the script file created by pg_dumpall will contain the appropriate commands to create and connect to the saved databases. An exception is that if you specified , From 7b3259bd7cf37da472ff5c2ce25fe0aa552e6fe0 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Sat, 25 Jan 2025 11:28:14 -0800 Subject: [PATCH 68/90] Test ECPG decadd(), decdiv(), decmul(), and decsub() for risnull() input. Since commit 757fb0e5a9a61ac8d3a67e334faeea6dc0084b3f, these Informix-compat functions return 0 without changing the output parameter. Initialize the output parameter before the test call, making that obvious. Before this, the expected test output has been depending on freed stack memory. "gcc -ftrivial-auto-var-init=pattern" revealed that. Back-patch to v13 (all supported versions). Discussion: https://postgr.es/m/20250106192748.cf.nmisch@google.com --- .../ecpg/test/compat_informix/dec_test.pgc | 10 + .../test/expected/compat_informix-dec_test.c | 10 + .../expected/compat_informix-dec_test.stdout | 232 +++++++++--------- 3 files changed, 136 insertions(+), 116 deletions(-) diff --git a/src/interfaces/ecpg/test/compat_informix/dec_test.pgc b/src/interfaces/ecpg/test/compat_informix/dec_test.pgc index f6a9f425d6f..830ab5890b2 100644 --- a/src/interfaces/ecpg/test/compat_informix/dec_test.pgc +++ b/src/interfaces/ecpg/test/compat_informix/dec_test.pgc @@ -142,6 +142,16 @@ main(void) c = deccmp(decarr[i], decarr[j]); printf("dec[c,%d,%d]: %d\n", i, j, c); + /* + * decarr[count-1] is risnull(), which makes these functions + * return 0 without changing the output parameter. Make that + * clear by initializing each output parameter. + */ + deccvint(7654321, &a); + deccvint(7654321, &s); + deccvint(7654321, &m); + deccvint(7654321, &d); + r = decadd(decarr[i], decarr[j], &a); if (r) { diff --git a/src/interfaces/ecpg/test/expected/compat_informix-dec_test.c b/src/interfaces/ecpg/test/expected/compat_informix-dec_test.c index 8586650e879..3e68b2e0267 100644 --- a/src/interfaces/ecpg/test/expected/compat_informix-dec_test.c +++ b/src/interfaces/ecpg/test/expected/compat_informix-dec_test.c @@ -195,6 +195,16 @@ main(void) c = deccmp(decarr[i], decarr[j]); printf("dec[c,%d,%d]: %d\n", i, j, c); + /* + * decarr[count-1] is risnull(), which makes these functions + * return 0 without changing the output parameter. Make that + * clear by initializing each output parameter. + */ + deccvint(7654321, &a); + deccvint(7654321, &s); + deccvint(7654321, &m); + deccvint(7654321, &d); + r = decadd(decarr[i], decarr[j], &a); if (r) { diff --git a/src/interfaces/ecpg/test/expected/compat_informix-dec_test.stdout b/src/interfaces/ecpg/test/expected/compat_informix-dec_test.stdout index 1f8675b3f3c..72791c56b59 100644 --- a/src/interfaces/ecpg/test/expected/compat_informix-dec_test.stdout +++ b/src/interfaces/ecpg/test/expected/compat_informix-dec_test.stdout @@ -222,10 +222,10 @@ dec[s,0,13]: dec[m,0,13]: * dec[d,0,13]: dec[c,0,14]: 2147483647 -dec[a,0,14]: -dec[s,0,14]: -dec[m,0,14]: * -dec[d,0,14]: +dec[a,0,14]: 7654321.0 +dec[s,0,14]: 7654321.0 +dec[m,0,14]: 7654321.0 +dec[d,0,14]: 7654321.0 dec[c,1,0]: -1 (errno == PGTYPES_NUM_OVERFLOW) - r: -1200 dec[s,1,0]: @@ -297,10 +297,10 @@ dec[s,1,13]: -1234567890123456789012345680.91 dec[m,1,13]: -2469135780246913578024691357.82 dec[d,1,13]: -0.0000000000000000000000000016200000145800001 dec[c,1,14]: 2147483647 -dec[a,1,14]: 1234567890123456789012345676.91 -dec[s,1,14]: -1234567890123456789012345680.91 -dec[m,1,14]: -2469135780246913578024691357.82 -dec[d,1,14]: -0.0000000000000000000000000016200000145800001 +dec[a,1,14]: 7654321.0 +dec[s,1,14]: 7654321.0 +dec[m,1,14]: 7654321.0 +dec[d,1,14]: 7654321.0 dec[c,2,0]: -1 (errno == PGTYPES_NUM_OVERFLOW) - r: -1200 dec[s,2,0]: @@ -372,10 +372,10 @@ dec[s,2,13]: dec[m,2,13]: dec[d,2,13]: 0.00000000000000000000000000064314000578826005 dec[c,2,14]: 2147483647 -dec[a,2,14]: -dec[s,2,14]: -dec[m,2,14]: -dec[d,2,14]: 0.00000000000000000000000000064314000578826005 +dec[a,2,14]: 7654321.0 +dec[s,2,14]: 7654321.0 +dec[m,2,14]: 7654321.0 +dec[d,2,14]: 7654321.0 dec[c,3,0]: -1 (errno == PGTYPES_NUM_OVERFLOW) - r: -1200 dec[s,3,0]: @@ -447,10 +447,10 @@ dec[s,3,13]: -1234567890123456789012345675.47 dec[m,3,13]: dec[d,3,13]: 0.0000000000000000000000000027864000250776002 dec[c,3,14]: 2147483647 -dec[a,3,14]: 1234567890123456789012345682.35 -dec[s,3,14]: -1234567890123456789012345675.47 -dec[m,3,14]: -dec[d,3,14]: 0.0000000000000000000000000027864000250776002 +dec[a,3,14]: 7654321.0 +dec[s,3,14]: 7654321.0 +dec[m,3,14]: 7654321.0 +dec[d,3,14]: 7654321.0 dec[c,4,0]: -1 (errno == PGTYPES_NUM_OVERFLOW) - r: -1200 dec[s,4,0]: @@ -522,10 +522,10 @@ dec[s,4,13]: -1233975400123456789012345678.91 dec[m,4,13]: dec[d,4,13]: 0.00047991690431925214 dec[c,4,14]: 2147483647 -dec[a,4,14]: 1235160380123456789012345678.91 -dec[s,4,14]: -1233975400123456789012345678.91 -dec[m,4,14]: -dec[d,4,14]: 0.00047991690431925214 +dec[a,4,14]: 7654321.0 +dec[s,4,14]: 7654321.0 +dec[m,4,14]: 7654321.0 +dec[d,4,14]: 7654321.0 dec[c,5,0]: -1 (errno == PGTYPES_NUM_OVERFLOW) - r: -1200 dec[s,5,0]: @@ -597,10 +597,10 @@ dec[s,5,13]: -1234567890123456789012674078.91 dec[m,5,13]: dec[d,5,13]: -0.00000000000000000000026600400239403602 dec[c,5,14]: 2147483647 -dec[a,5,14]: 1234567890123456789012017278.91 -dec[s,5,14]: -1234567890123456789012674078.91 -dec[m,5,14]: -dec[d,5,14]: -0.00000000000000000000026600400239403602 +dec[a,5,14]: 7654321.0 +dec[s,5,14]: 7654321.0 +dec[m,5,14]: 7654321.0 +dec[d,5,14]: 7654321.0 dec[c,6,0]: -1 (errno == PGTYPES_NUM_OVERFLOW) - r: -1200 dec[s,6,0]: @@ -672,10 +672,10 @@ dec[s,6,13]: dec[m,6,13]: * dec[d,6,13]: * dec[c,6,14]: 2147483647 -dec[a,6,14]: -dec[s,6,14]: -dec[m,6,14]: * -dec[d,6,14]: * +dec[a,6,14]: 7654321.0 +dec[s,6,14]: 7654321.0 +dec[m,6,14]: 7654321.0 +dec[d,6,14]: 7654321.0 dec[c,7,0]: -1 (errno == PGTYPES_NUM_OVERFLOW) - r: -1200 dec[s,7,0]: @@ -747,10 +747,10 @@ dec[s,7,13]: dec[m,7,13]: 1234567890123456789012345.67891 dec[d,7,13]: 0.00000000000000000000000000000081000000729000007 dec[c,7,14]: 2147483647 -dec[a,7,14]: -dec[s,7,14]: -dec[m,7,14]: 1234567890123456789012345.67891 -dec[d,7,14]: 0.00000000000000000000000000000081000000729000007 +dec[a,7,14]: 7654321.0 +dec[s,7,14]: 7654321.0 +dec[m,7,14]: 7654321.0 +dec[d,7,14]: 7654321.0 dec[c,8,0]: -1 dec[a,8,0]: * dec[s,8,0]: * @@ -822,10 +822,10 @@ dec[s,8,13]: -1234567890123456789012345678.91 dec[m,8,13]: 0.000 dec[d,8,13]: 0 dec[c,8,14]: 2147483647 -dec[a,8,14]: 1234567890123456789012345678.91 -dec[s,8,14]: -1234567890123456789012345678.91 -dec[m,8,14]: 0.000 -dec[d,8,14]: 0 +dec[a,8,14]: 7654321.0 +dec[s,8,14]: 7654321.0 +dec[m,8,14]: 7654321.0 +dec[d,8,14]: 7654321.0 dec[c,9,0]: -1 (errno == PGTYPES_NUM_OVERFLOW) - r: -1200 dec[s,9,0]: @@ -897,10 +897,10 @@ dec[s,9,13]: dec[m,9,13]: dec[d,9,13]: -0.000000000000000000000000000000047991690431925214 dec[c,9,14]: 2147483647 -dec[a,9,14]: -dec[s,9,14]: -dec[m,9,14]: -dec[d,9,14]: -0.000000000000000000000000000000047991690431925214 +dec[a,9,14]: 7654321.0 +dec[s,9,14]: 7654321.0 +dec[m,9,14]: 7654321.0 +dec[d,9,14]: 7654321.0 dec[c,10,0]: -1 (errno == PGTYPES_NUM_OVERFLOW) - r: -1200 dec[s,10,0]: @@ -972,10 +972,10 @@ dec[s,10,13]: dec[m,10,13]: dec[d,10,13]: 0.0000000000000000000000000000026600400239403602 dec[c,10,14]: 2147483647 -dec[a,10,14]: -dec[s,10,14]: -dec[m,10,14]: -dec[d,10,14]: 0.0000000000000000000000000000026600400239403602 +dec[a,10,14]: 7654321.0 +dec[s,10,14]: 7654321.0 +dec[m,10,14]: 7654321.0 +dec[d,10,14]: 7654321.0 dec[c,11,0]: -1 (errno == PGTYPES_NUM_OVERFLOW) - r: -1200 dec[s,11,0]: @@ -1047,10 +1047,10 @@ dec[s,11,13]: dec[m,11,13]: dec[d,11,13]: 0.00000000000000000000000000040500081364500732 dec[c,11,14]: 2147483647 -dec[a,11,14]: -dec[s,11,14]: -dec[m,11,14]: -dec[d,11,14]: 0.00000000000000000000000000040500081364500732 +dec[a,11,14]: 7654321.0 +dec[s,11,14]: 7654321.0 +dec[m,11,14]: 7654321.0 +dec[d,11,14]: 7654321.0 dec[c,12,0]: -1 (errno == PGTYPES_NUM_OVERFLOW) - r: -1200 dec[s,12,0]: @@ -1122,10 +1122,10 @@ dec[s,12,13]: dec[m,12,13]: dec[d,12,13]: -0.00000000000000000000000000040500008464500076 dec[c,12,14]: 2147483647 -dec[a,12,14]: -dec[s,12,14]: -dec[m,12,14]: -dec[d,12,14]: -0.00000000000000000000000000040500008464500076 +dec[a,12,14]: 7654321.0 +dec[s,12,14]: 7654321.0 +dec[m,12,14]: 7654321.0 +dec[d,12,14]: 7654321.0 dec[c,13,0]: -1 (errno == PGTYPES_NUM_OVERFLOW) - r: -1200 dec[s,13,0]: @@ -1197,85 +1197,85 @@ dec[s,13,13]: 0.00 dec[m,13,13]: dec[d,13,13]: 1.00000000000000000 dec[c,13,14]: 2147483647 -dec[a,13,14]: 2469135780246913578024691357.82 -dec[s,13,14]: 0.00 -dec[m,13,14]: -dec[d,13,14]: 1.00000000000000000 +dec[a,13,14]: 7654321.0 +dec[s,13,14]: 7654321.0 +dec[m,13,14]: 7654321.0 +dec[d,13,14]: 7654321.0 dec[c,14,0]: 2147483647 -dec[a,14,0]: 2469135780246913578024691357.82 -dec[s,14,0]: 0.00 -dec[m,14,0]: -dec[d,14,0]: 1.00000000000000000 +dec[a,14,0]: 7654321.0 +dec[s,14,0]: 7654321.0 +dec[m,14,0]: 7654321.0 +dec[d,14,0]: 7654321.0 dec[c,14,1]: 2147483647 -dec[a,14,1]: 2469135780246913578024691357.82 -dec[s,14,1]: 0.00 -dec[m,14,1]: -dec[d,14,1]: 1.00000000000000000 +dec[a,14,1]: 7654321.0 +dec[s,14,1]: 7654321.0 +dec[m,14,1]: 7654321.0 +dec[d,14,1]: 7654321.0 dec[c,14,2]: 2147483647 -dec[a,14,2]: 2469135780246913578024691357.82 -dec[s,14,2]: 0.00 -dec[m,14,2]: -dec[d,14,2]: 1.00000000000000000 +dec[a,14,2]: 7654321.0 +dec[s,14,2]: 7654321.0 +dec[m,14,2]: 7654321.0 +dec[d,14,2]: 7654321.0 dec[c,14,3]: 2147483647 -dec[a,14,3]: 2469135780246913578024691357.82 -dec[s,14,3]: 0.00 -dec[m,14,3]: -dec[d,14,3]: 1.00000000000000000 +dec[a,14,3]: 7654321.0 +dec[s,14,3]: 7654321.0 +dec[m,14,3]: 7654321.0 +dec[d,14,3]: 7654321.0 dec[c,14,4]: 2147483647 -dec[a,14,4]: 2469135780246913578024691357.82 -dec[s,14,4]: 0.00 -dec[m,14,4]: -dec[d,14,4]: 1.00000000000000000 +dec[a,14,4]: 7654321.0 +dec[s,14,4]: 7654321.0 +dec[m,14,4]: 7654321.0 +dec[d,14,4]: 7654321.0 dec[c,14,5]: 2147483647 -dec[a,14,5]: 2469135780246913578024691357.82 -dec[s,14,5]: 0.00 -dec[m,14,5]: -dec[d,14,5]: 1.00000000000000000 +dec[a,14,5]: 7654321.0 +dec[s,14,5]: 7654321.0 +dec[m,14,5]: 7654321.0 +dec[d,14,5]: 7654321.0 dec[c,14,6]: 2147483647 -dec[a,14,6]: 2469135780246913578024691357.82 -dec[s,14,6]: 0.00 -dec[m,14,6]: -dec[d,14,6]: 1.00000000000000000 +dec[a,14,6]: 7654321.0 +dec[s,14,6]: 7654321.0 +dec[m,14,6]: 7654321.0 +dec[d,14,6]: 7654321.0 dec[c,14,7]: 2147483647 -dec[a,14,7]: 2469135780246913578024691357.82 -dec[s,14,7]: 0.00 -dec[m,14,7]: -dec[d,14,7]: 1.00000000000000000 +dec[a,14,7]: 7654321.0 +dec[s,14,7]: 7654321.0 +dec[m,14,7]: 7654321.0 +dec[d,14,7]: 7654321.0 dec[c,14,8]: 2147483647 -dec[a,14,8]: 2469135780246913578024691357.82 -dec[s,14,8]: 0.00 -dec[m,14,8]: -dec[d,14,8]: 1.00000000000000000 +dec[a,14,8]: 7654321.0 +dec[s,14,8]: 7654321.0 +dec[m,14,8]: 7654321.0 +dec[d,14,8]: 7654321.0 dec[c,14,9]: 2147483647 -dec[a,14,9]: 2469135780246913578024691357.82 -dec[s,14,9]: 0.00 -dec[m,14,9]: -dec[d,14,9]: 1.00000000000000000 +dec[a,14,9]: 7654321.0 +dec[s,14,9]: 7654321.0 +dec[m,14,9]: 7654321.0 +dec[d,14,9]: 7654321.0 dec[c,14,10]: 2147483647 -dec[a,14,10]: 2469135780246913578024691357.82 -dec[s,14,10]: 0.00 -dec[m,14,10]: -dec[d,14,10]: 1.00000000000000000 +dec[a,14,10]: 7654321.0 +dec[s,14,10]: 7654321.0 +dec[m,14,10]: 7654321.0 +dec[d,14,10]: 7654321.0 dec[c,14,11]: 2147483647 -dec[a,14,11]: 2469135780246913578024691357.82 -dec[s,14,11]: 0.00 -dec[m,14,11]: -dec[d,14,11]: 1.00000000000000000 +dec[a,14,11]: 7654321.0 +dec[s,14,11]: 7654321.0 +dec[m,14,11]: 7654321.0 +dec[d,14,11]: 7654321.0 dec[c,14,12]: 2147483647 -dec[a,14,12]: 2469135780246913578024691357.82 -dec[s,14,12]: 0.00 -dec[m,14,12]: -dec[d,14,12]: 1.00000000000000000 +dec[a,14,12]: 7654321.0 +dec[s,14,12]: 7654321.0 +dec[m,14,12]: 7654321.0 +dec[d,14,12]: 7654321.0 dec[c,14,13]: 2147483647 -dec[a,14,13]: 2469135780246913578024691357.82 -dec[s,14,13]: 0.00 -dec[m,14,13]: -dec[d,14,13]: 1.00000000000000000 +dec[a,14,13]: 7654321.0 +dec[s,14,13]: 7654321.0 +dec[m,14,13]: 7654321.0 +dec[d,14,13]: 7654321.0 dec[c,14,14]: 2147483647 -dec[a,14,14]: 2469135780246913578024691357.82 -dec[s,14,14]: 0.00 -dec[m,14,14]: -dec[d,14,14]: 1.00000000000000000 +dec[a,14,14]: 7654321.0 +dec[s,14,14]: 7654321.0 +dec[m,14,14]: 7654321.0 +dec[d,14,14]: 7654321.0 0: * 1: -2 2: 0.794 From 25e99483c4116313b678cc94df53d3ea28977752 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Sat, 25 Jan 2025 11:28:14 -0800 Subject: [PATCH 69/90] At update of non-LP_NORMAL TID, fail instead of corrupting page header. The right mix of DDL and VACUUM could corrupt a catalog page header such that PageIsVerified() durably fails, requiring a restore from backup. This affects only catalogs that both have a syscache and have DDL code that uses syscache tuples to construct updates. One of the test permutations shows a variant not yet fixed. This makes !TransactionIdIsValid(TM_FailureData.xmax) possible with TM_Deleted. I think core and PGXN are indifferent to that. Per bug #17821 from Alexander Lakhin. Back-patch to v13 (all supported versions). The test case is v17+, since it uses INJECTION_POINT. Discussion: https://postgr.es/m/17821-dd8c334263399284@postgresql.org --- src/backend/access/heap/heapam.c | 45 +++++++++++++++++++++++++++++++- src/include/access/tableam.h | 3 ++- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 3a467705196..1233aaf5cc4 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -72,6 +72,7 @@ #include "utils/relcache.h" #include "utils/snapmgr.h" #include "utils/spccache.h" +#include "utils/syscache.h" static HeapTuple heap_prepare_insert(Relation relation, HeapTuple tup, @@ -3322,7 +3323,49 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup, LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); lp = PageGetItemId(page, ItemPointerGetOffsetNumber(otid)); - Assert(ItemIdIsNormal(lp)); + + /* + * Usually, a buffer pin and/or snapshot blocks pruning of otid, ensuring + * we see LP_NORMAL here. When the otid origin is a syscache, we may have + * neither a pin nor a snapshot. Hence, we may see other LP_ states, each + * of which indicates concurrent pruning. + * + * Failing with TM_Updated would be most accurate. However, unlike other + * TM_Updated scenarios, we don't know the successor ctid in LP_UNUSED and + * LP_DEAD cases. While the distinction between TM_Updated and TM_Deleted + * does matter to SQL statements UPDATE and MERGE, those SQL statements + * hold a snapshot that ensures LP_NORMAL. Hence, the choice between + * TM_Updated and TM_Deleted affects only the wording of error messages. + * Settle on TM_Deleted, for two reasons. First, it avoids complicating + * the specification of when tmfd->ctid is valid. Second, it creates + * error log evidence that we took this branch. + * + * Since it's possible to see LP_UNUSED at otid, it's also possible to see + * LP_NORMAL for a tuple that replaced LP_UNUSED. If it's a tuple for an + * unrelated row, we'll fail with "duplicate key value violates unique". + * XXX if otid is the live, newer version of the newtup row, we'll discard + * changes originating in versions of this catalog row after the version + * the caller got from syscache. See syscache-update-pruned.spec. + */ + if (!ItemIdIsNormal(lp)) + { + Assert(RelationSupportsSysCache(RelationGetRelid(relation))); + + UnlockReleaseBuffer(buffer); + Assert(!have_tuple_lock); + if (vmbuffer != InvalidBuffer) + ReleaseBuffer(vmbuffer); + tmfd->ctid = *otid; + tmfd->xmax = InvalidTransactionId; + tmfd->cmax = InvalidCommandId; + + bms_free(hot_attrs); + bms_free(key_attrs); + bms_free(id_attrs); + /* modified_attrs not yet initialized */ + bms_free(interesting_attrs); + return TM_Deleted; + } /* * Fill in enough data in oldtup for HeapDetermineColumnsInfo to work diff --git a/src/include/access/tableam.h b/src/include/access/tableam.h index 7465f037860..f1e6f554aa7 100644 --- a/src/include/access/tableam.h +++ b/src/include/access/tableam.h @@ -113,7 +113,8 @@ typedef enum TM_Result * * xmax is the outdating transaction's XID. If the caller wants to visit the * replacement tuple, it must check that this matches before believing the - * replacement is really a match. + * replacement is really a match. This is InvalidTransactionId if the target + * was !LP_NORMAL (expected only for a TID retrieved from syscache). * * cmax is the outdating command's CID, but only when the failure code is * TM_SelfModified (i.e., something in the current transaction outdated the From 54f9afea7a7d356c8569014c5cf85a99455508ee Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 29 Jan 2025 14:24:36 -0500 Subject: [PATCH 70/90] Avoid breaking SJIS encoding while de-backslashing Windows paths. When running on Windows, canonicalize_path() converts '\' to '/' to prevent confusing the Windows command processor. It was doing that in a non-encoding-aware fashion; but in SJIS there are valid two-byte characters whose second byte matches '\'. So encoding corruption ensues if such a character is used in the path. We can fairly easily fix this if we know which encoding is in use, but a lot of our utilities don't have much of a clue about that. After some discussion we decided we'd settle for fixing this only in psql, and assuming that its value of client_encoding matches what the user is typing. It seems hopeless to get the server to deal with the problematic characters in database path names, so we'll just declare that case to be unsupported. That means nothing need be done in the server, nor in utility programs whose only contact with file path names is for database paths. But psql frequently deals with client-side file paths, so it'd be good if it didn't mess those up. Bug: #18735 Reported-by: Koichi Suzuki Author: Tom Lane Reviewed-by: Koichi Suzuki Discussion: https://postgr.es/m/18735-4acdb3998bb9f2b1@postgresql.org Backpatch-through: 13 --- src/bin/psql/command.c | 8 ++-- src/bin/psql/copy.c | 2 +- src/include/port.h | 1 + src/port/path.c | 105 +++++++++++++++++++++++++++++++++++------ 4 files changed, 97 insertions(+), 19 deletions(-) diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index 997ab2bf0b6..d403e2a283d 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -1052,7 +1052,7 @@ exec_command_edit(PsqlScanState scan_state, bool active_branch, expand_tilde(&fname); if (fname) { - canonicalize_path(fname); + canonicalize_path_enc(fname, pset.encoding); /* Always clear buffer if the file isn't modified */ discard_on_quit = true; } @@ -2622,7 +2622,7 @@ exec_command_write(PsqlScanState scan_state, bool active_branch, } else { - canonicalize_path(fname); + canonicalize_path_enc(fname, pset.encoding); fd = fopen(fname, "w"); } if (!fd) @@ -4010,7 +4010,7 @@ process_file(char *filename, bool use_relative_path) } else if (strcmp(filename, "-") != 0) { - canonicalize_path(filename); + canonicalize_path_enc(filename, pset.encoding); /* * If we were asked to resolve the pathname relative to the location @@ -4024,7 +4024,7 @@ process_file(char *filename, bool use_relative_path) strlcpy(relpath, pset.inputfile, sizeof(relpath)); get_parent_directory(relpath); join_path_components(relpath, relpath, filename); - canonicalize_path(relpath); + canonicalize_path_enc(relpath, pset.encoding); filename = relpath; } diff --git a/src/bin/psql/copy.c b/src/bin/psql/copy.c index 5a9ec297c28..3c0787eaa7f 100644 --- a/src/bin/psql/copy.c +++ b/src/bin/psql/copy.c @@ -280,7 +280,7 @@ do_copy(const char *args) /* prepare to read or write the target file */ if (options->file && !options->program) - canonicalize_path(options->file); + canonicalize_path_enc(options->file, pset.encoding); if (options->from) { diff --git a/src/include/port.h b/src/include/port.h index 142dc0b12a7..a8ec28b1028 100644 --- a/src/include/port.h +++ b/src/include/port.h @@ -50,6 +50,7 @@ extern char *first_path_var_separator(const char *pathlist); extern void join_path_components(char *ret_path, const char *head, const char *tail); extern void canonicalize_path(char *path); +extern void canonicalize_path_enc(char *path, int encoding); extern void make_native_path(char *path); extern void cleanup_path(char *path); extern bool path_contains_parent_reference(const char *path); diff --git a/src/port/path.c b/src/port/path.c index c39d4688cd9..d37a484c865 100644 --- a/src/port/path.c +++ b/src/port/path.c @@ -35,6 +35,7 @@ #include #endif +#include "mb/pg_wchar.h" #include "pg_config_paths.h" @@ -44,6 +45,10 @@ #define IS_PATH_VAR_SEP(ch) ((ch) == ';') #endif +#ifdef WIN32 +static void debackslash_path(char *path, int encoding); +static int pg_sjis_mblen(const unsigned char *s); +#endif static void make_relative_path(char *ret_path, const char *target_path, const char *bin_path, const char *my_exec_path); static void trim_directory(char *path); @@ -147,10 +152,73 @@ last_dir_separator(const char *filename) } +#ifdef WIN32 + +/* + * Convert '\' to '/' within the given path, assuming the path + * is in the specified encoding. + */ +static void +debackslash_path(char *path, int encoding) +{ + char *p; + + /* + * Of the supported encodings, only Shift-JIS has multibyte characters + * that can include a byte equal to '\' (0x5C). So rather than implement + * a fully encoding-aware conversion, we special-case SJIS. (Invoking the + * general encoding-aware logic in wchar.c is impractical here for + * assorted reasons.) + */ + if (encoding == PG_SJIS) + { + for (p = path; *p; p += pg_sjis_mblen((const unsigned char *) p)) + { + if (*p == '\\') + *p = '/'; + } + } + else + { + for (p = path; *p; p++) + { + if (*p == '\\') + *p = '/'; + } + } +} + /* - * make_native_path - on WIN32, change / to \ in the path + * SJIS character length * - * This effectively undoes canonicalize_path. + * This must match the behavior of + * pg_encoding_mblen_bounded(PG_SJIS, s) + * In particular, unlike the version of pg_sjis_mblen in src/common/wchar.c, + * do not allow caller to accidentally step past end-of-string. + */ +static int +pg_sjis_mblen(const unsigned char *s) +{ + int len; + + if (*s >= 0xa1 && *s <= 0xdf) + len = 1; /* 1 byte kana? */ + else if (IS_HIGHBIT_SET(*s) && s[1] != '\0') + len = 2; /* kanji? */ + else + len = 1; /* should be ASCII */ + return len; +} + +#endif /* WIN32 */ + + +/* + * make_native_path - on WIN32, change '/' to '\' in the path + * + * This reverses the '\'-to-'/' transformation of debackslash_path. + * We need not worry about encodings here, since '/' does not appear + * as a byte of a multibyte character in any supported encoding. * * This is required because WIN32 COPY is an internal CMD.EXE * command and doesn't process forward slashes in the same way @@ -180,13 +248,14 @@ make_native_path(char *filename) * on Windows. We need them to use filenames without spaces, for which a * short filename is the safest equivalent, eg: * C:/Progra~1/ + * + * Presently, this is only used on paths that we can assume are in a + * server-safe encoding, so there's no need for an encoding-aware variant. */ void cleanup_path(char *path) { #ifdef WIN32 - char *ptr; - /* * GetShortPathName() will fail if the path does not exist, or short names * are disabled on this file system. In both cases, we just return the @@ -196,11 +265,8 @@ cleanup_path(char *path) GetShortPathName(path, path, MAXPGPATH - 1); /* Replace '\' with '/' */ - for (ptr = path; *ptr; ptr++) - { - if (*ptr == '\\') - *ptr = '/'; - } + /* All server-safe encodings are alike here, so just use PG_SQL_ASCII */ + debackslash_path(path, PG_SQL_ASCII); #endif } @@ -242,6 +308,8 @@ join_path_components(char *ret_path, /* + * canonicalize_path() + * * Clean up path by: * o make Win32 path use Unix slashes * o remove trailing quote on Win32 @@ -249,9 +317,20 @@ join_path_components(char *ret_path, * o remove duplicate adjacent separators * o remove trailing '.' * o process trailing '..' ourselves + * Modifies path in-place. + * + * This comes in two variants: encoding-aware and not. The non-aware version + * is only safe to use on strings that are in a server-safe encoding. */ void canonicalize_path(char *path) +{ + /* All server-safe encodings are alike here, so just use PG_SQL_ASCII */ + canonicalize_path_enc(path, PG_SQL_ASCII); +} + +void +canonicalize_path_enc(char *path, int encoding) { char *p, *to_p; @@ -264,17 +343,15 @@ canonicalize_path(char *path) /* * The Windows command processor will accept suitably quoted paths with * forward slashes, but barfs badly with mixed forward and back slashes. + * Hence, start by converting all back slashes to forward slashes. */ - for (p = path; *p; p++) - { - if (*p == '\\') - *p = '/'; - } + debackslash_path(path, encoding); /* * In Win32, if you do: prog.exe "a b" "\c\d\" the system will pass \c\d" * as argv[2], so trim off trailing quote. */ + p = path + strlen(path); if (p > path && *(p - 1) == '"') *(p - 1) = '/'; #endif From c05268e6ec931724282b5780f228e5a1aad94268 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 29 Jan 2025 15:31:55 -0500 Subject: [PATCH 71/90] Handle default NULL insertion a little better. If a column is omitted in an INSERT, and there's no column default, the code in preptlist.c generates a NULL Const to be inserted. Furthermore, if the column is of a domain type, we wrap the Const in CoerceToDomain, so as to throw a run-time error if the domain has a NOT NULL constraint. That's fine as far as it goes, but there are two problems: 1. We're being sloppy about the type/typmod that the Const is labeled with. It really should have the domain's base type/typmod, since it's the input to CoerceToDomain not the output. This can result in coerce_to_domain inserting a useless length-coercion function (useless because it's being applied to a null). The coercion would typically get const-folded away later, but it'd be better not to create it in the first place. 2. We're not applying expression preprocessing (specifically, eval_const_expressions) to the resulting expression tree. The planner's primary expression-preprocessing pass already happened, so that means the length coercion step and CoerceToDomain node miss preprocessing altogether. This is at the least inefficient, since it means the length coercion and CoerceToDomain will actually be executed for each inserted row, though they could be const-folded away in most cases. Worse, it seems possible that missing preprocessing for the length coercion could result in an invalid plan (for example, due to failing to perform default-function-argument insertion). I'm not aware of any live bug of that sort with core datatypes, and it might be unreachable for extension types as well because of restrictions of CREATE CAST, but I'm not entirely convinced that it's unreachable. Hence, it seems worth back-patching the fix (although I only went back to v14, as the patch doesn't apply cleanly at all in v13). There are several places in the rewriter that are building null domain constants the same way as preptlist.c. While those are before the planner and hence don't have any reachable bug, they're still applying a length coercion that will be const-folded away later, uselessly wasting cycles. Hence, make a utility routine that all of these places can call to do it right. Making this code more careful about the typmod assigned to the generated NULL constant has visible but cosmetic effects on some of the plans shown in contrib/postgres_fdw's regression tests. Discussion: https://postgr.es/m/1865579.1738113656@sss.pgh.pa.us Backpatch-through: 14 --- .../postgres_fdw/expected/postgres_fdw.out | 24 +++++------ src/backend/optimizer/prep/preptlist.c | 31 ++++++-------- src/backend/parser/parse_coerce.c | 37 ++++++++++++++++ src/backend/rewrite/rewriteHandler.c | 42 +++++-------------- src/backend/rewrite/rewriteManip.c | 30 ++++++------- src/include/parser/parse_coerce.h | 3 ++ 6 files changed, 90 insertions(+), 77 deletions(-) diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index 94b590cfd3a..e295a1a8f01 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -4127,13 +4127,13 @@ EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st6; PREPARE st7 AS INSERT INTO ft1 (c1,c2,c3) VALUES (1001,101,'foo'); EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st7; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Insert on public.ft1 Remote SQL: INSERT INTO "S 1"."T 1"("C 1", c2, c3, c4, c5, c6, c7, c8) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) Batch Size: 1 -> Result - Output: NULL::integer, 1001, 101, 'foo'::text, NULL::timestamp with time zone, NULL::timestamp without time zone, NULL::character varying, 'ft1 '::character(10), NULL::user_enum + Output: NULL::integer, 1001, 101, 'foo'::text, NULL::timestamp with time zone, NULL::timestamp without time zone, NULL::character varying(10), 'ft1 '::character(10), NULL::user_enum (5 rows) ALTER TABLE "S 1"."T 1" RENAME TO "T 0"; @@ -4161,13 +4161,13 @@ EXECUTE st6; (9 rows) EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st7; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Insert on public.ft1 Remote SQL: INSERT INTO "S 1"."T 0"("C 1", c2, c3, c4, c5, c6, c7, c8) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) Batch Size: 1 -> Result - Output: NULL::integer, 1001, 101, 'foo'::text, NULL::timestamp with time zone, NULL::timestamp without time zone, NULL::character varying, 'ft1 '::character(10), NULL::user_enum + Output: NULL::integer, 1001, 101, 'foo'::text, NULL::timestamp with time zone, NULL::timestamp without time zone, NULL::character varying(10), 'ft1 '::character(10), NULL::user_enum (5 rows) ALTER TABLE "S 1"."T 0" RENAME TO "T 1"; @@ -4491,13 +4491,13 @@ explain (verbose, costs off) select * from ft3 f, loct3 l -- =================================================================== EXPLAIN (verbose, costs off) INSERT INTO ft2 (c1,c2,c3) SELECT c1+1000,c2+100, c3 || c3 FROM ft2 LIMIT 20; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Insert on public.ft2 Remote SQL: INSERT INTO "S 1"."T 1"("C 1", c2, c3, c4, c5, c6, c7, c8) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) Batch Size: 1 -> Subquery Scan on "*SELECT*" - Output: "*SELECT*"."?column?", "*SELECT*"."?column?_1", NULL::integer, "*SELECT*"."?column?_2", NULL::timestamp with time zone, NULL::timestamp without time zone, NULL::character varying, 'ft2 '::character(10), NULL::user_enum + Output: "*SELECT*"."?column?", "*SELECT*"."?column?_1", NULL::integer, "*SELECT*"."?column?_2", NULL::timestamp with time zone, NULL::timestamp without time zone, NULL::character varying(10), 'ft2 '::character(10), NULL::user_enum -> Foreign Scan on public.ft2 ft2_1 Output: (ft2_1.c1 + 1000), (ft2_1.c2 + 100), (ft2_1.c3 || ft2_1.c3) Remote SQL: SELECT "C 1", c2, c3 FROM "S 1"."T 1" LIMIT 20::bigint @@ -5607,14 +5607,14 @@ SELECT c1,c2,c3,c4 FROM ft2 ORDER BY c1; EXPLAIN (verbose, costs off) INSERT INTO ft2 (c1,c2,c3) VALUES (1200,999,'foo') RETURNING tableoid::regclass; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Insert on public.ft2 Output: (ft2.tableoid)::regclass Remote SQL: INSERT INTO "S 1"."T 1"("C 1", c2, c3, c4, c5, c6, c7, c8) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) Batch Size: 1 -> Result - Output: 1200, 999, NULL::integer, 'foo'::text, NULL::timestamp with time zone, NULL::timestamp without time zone, NULL::character varying, 'ft2 '::character(10), NULL::user_enum + Output: 1200, 999, NULL::integer, 'foo'::text, NULL::timestamp with time zone, NULL::timestamp without time zone, NULL::character varying(10), 'ft2 '::character(10), NULL::user_enum (6 rows) INSERT INTO ft2 (c1,c2,c3) VALUES (1200,999,'foo') RETURNING tableoid::regclass; diff --git a/src/backend/optimizer/prep/preptlist.c b/src/backend/optimizer/prep/preptlist.c index e9434580d6d..e9151c9589a 100644 --- a/src/backend/optimizer/prep/preptlist.c +++ b/src/backend/optimizer/prep/preptlist.c @@ -46,7 +46,8 @@ #include "parser/parsetree.h" #include "utils/rel.h" -static List *expand_insert_targetlist(List *tlist, Relation rel); +static List *expand_insert_targetlist(PlannerInfo *root, List *tlist, + Relation rel); /* @@ -102,7 +103,7 @@ preprocess_targetlist(PlannerInfo *root) */ tlist = parse->targetList; if (command_type == CMD_INSERT) - tlist = expand_insert_targetlist(tlist, target_relation); + tlist = expand_insert_targetlist(root, tlist, target_relation); else if (command_type == CMD_UPDATE) root->update_colnos = extract_update_targetlist_colnos(tlist); @@ -292,7 +293,7 @@ extract_update_targetlist_colnos(List *tlist) * but now this code is only applied to INSERT targetlists. */ static List * -expand_insert_targetlist(List *tlist, Relation rel) +expand_insert_targetlist(PlannerInfo *root, List *tlist, Relation rel) { List *new_tlist = NIL; ListCell *tlist_item; @@ -346,26 +347,18 @@ expand_insert_targetlist(List *tlist, Relation rel) * confuse code comparing the finished plan to the target * relation, however. */ - Oid atttype = att_tup->atttypid; - 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); + new_expr = coerce_null_to_domain(att_tup->atttypid, + att_tup->atttypmod, + att_tup->attcollation, + att_tup->attlen, + att_tup->attbyval); + /* Must run expression preprocessing on any non-const nodes */ + if (!IsA(new_expr, Const)) + new_expr = eval_const_expressions(root, new_expr); } else { diff --git a/src/backend/parser/parse_coerce.c b/src/backend/parser/parse_coerce.c index fc9224c5c0c..79ffdd2a9d1 100644 --- a/src/backend/parser/parse_coerce.c +++ b/src/backend/parser/parse_coerce.c @@ -1263,6 +1263,43 @@ coerce_to_specific_type(ParseState *pstate, Node *node, constructName); } +/* + * coerce_null_to_domain() + * Build a NULL constant, then wrap it in CoerceToDomain + * if the desired type is a domain type. This allows any + * NOT NULL domain constraint to be enforced at runtime. + */ +Node * +coerce_null_to_domain(Oid typid, int32 typmod, Oid collation, + int typlen, bool typbyval) +{ + Node *result; + Oid baseTypeId; + int32 baseTypeMod = typmod; + + /* + * The constant must appear to have the domain's base type/typmod, else + * coerce_to_domain() will apply a length coercion which is useless. + */ + baseTypeId = getBaseTypeAndTypmod(typid, &baseTypeMod); + result = (Node *) makeConst(baseTypeId, + baseTypeMod, + collation, + typlen, + (Datum) 0, + true, /* isnull */ + typbyval); + if (typid != baseTypeId) + result = coerce_to_domain(result, + baseTypeId, baseTypeMod, + typid, + COERCION_IMPLICIT, + COERCE_IMPLICIT_CAST, + -1, + false); + return result; +} + /* * parser_coercion_errposition - report coercion error location, if possible * diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index 4243a58cf80..d069a9157a3 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -997,23 +997,11 @@ rewriteTargetListIU(List *targetList, if (commandType == CMD_INSERT) new_tle = NULL; else - { - new_expr = (Node *) makeConst(att_tup->atttypid, - -1, - att_tup->attcollation, - att_tup->attlen, - (Datum) 0, - true, /* isnull */ - att_tup->attbyval); - /* this is to catch a NOT NULL domain constraint */ - new_expr = coerce_to_domain(new_expr, - InvalidOid, -1, - att_tup->atttypid, - COERCION_IMPLICIT, - COERCE_IMPLICIT_CAST, - -1, - false); - } + new_expr = coerce_null_to_domain(att_tup->atttypid, + att_tup->atttypmod, + att_tup->attcollation, + att_tup->attlen, + att_tup->attbyval); } if (new_expr) @@ -1575,21 +1563,11 @@ rewriteValuesRTE(Query *parsetree, RangeTblEntry *rte, int rti, continue; } - new_expr = (Node *) makeConst(att_tup->atttypid, - -1, - att_tup->attcollation, - att_tup->attlen, - (Datum) 0, - true, /* isnull */ - att_tup->attbyval); - /* this is to catch a NOT NULL domain constraint */ - new_expr = coerce_to_domain(new_expr, - InvalidOid, -1, - att_tup->atttypid, - COERCION_IMPLICIT, - COERCE_IMPLICIT_CAST, - -1, - false); + new_expr = coerce_null_to_domain(att_tup->atttypid, + att_tup->atttypmod, + att_tup->attcollation, + att_tup->attlen, + att_tup->attbyval); } newList = lappend(newList, new_expr); } diff --git a/src/backend/rewrite/rewriteManip.c b/src/backend/rewrite/rewriteManip.c index 7f40d1dc806..8cf58291ec0 100644 --- a/src/backend/rewrite/rewriteManip.c +++ b/src/backend/rewrite/rewriteManip.c @@ -22,6 +22,7 @@ #include "parser/parse_relation.h" #include "parser/parsetree.h" #include "rewrite/rewriteManip.h" +#include "utils/lsyscache.h" typedef struct @@ -1466,20 +1467,21 @@ ReplaceVarsFromTargetList_callback(Var *var, return (Node *) var; case REPLACEVARS_SUBSTITUTE_NULL: - - /* - * If Var is of domain type, we should add a CoerceToDomain - * node, in case there is a NOT NULL domain constraint. - */ - return coerce_to_domain((Node *) makeNullConst(var->vartype, - var->vartypmod, - var->varcollid), - InvalidOid, -1, - var->vartype, - COERCION_IMPLICIT, - COERCE_IMPLICIT_CAST, - -1, - false); + { + /* + * If Var is of domain type, we must add a CoerceToDomain + * node, in case there is a NOT NULL domain constraint. + */ + int16 vartyplen; + bool vartypbyval; + + get_typlenbyval(var->vartype, &vartyplen, &vartypbyval); + return coerce_null_to_domain(var->vartype, + var->vartypmod, + var->varcollid, + vartyplen, + vartypbyval); + } } elog(ERROR, "could not find replacement targetlist entry for attno %d", var->varattno); diff --git a/src/include/parser/parse_coerce.h b/src/include/parser/parse_coerce.h index 96c230c3870..ed0c92b9e21 100644 --- a/src/include/parser/parse_coerce.h +++ b/src/include/parser/parse_coerce.h @@ -61,6 +61,9 @@ extern Node *coerce_to_specific_type_typmod(ParseState *pstate, Node *node, Oid targetTypeId, int32 targetTypmod, const char *constructName); +extern Node *coerce_null_to_domain(Oid typid, int32 typmod, Oid collation, + int typlen, bool typbyval); + extern int parser_coercion_errposition(ParseState *pstate, int coerce_location, Node *input_expr); From 6a33bb35c0411e298c99dfd4b40772c3f91f08ad Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 30 Jan 2025 15:36:07 -0500 Subject: [PATCH 72/90] Avoid integer overflow while testing wal_skip_threshold condition. smgrDoPendingSyncs had two distinct risks of integer overflow while deciding which way to ensure durability of a newly-created relation. First, it accumulated the total size of all forks in a variable of type BlockNumber (uint32). While we restrict an individual fork's size to fit in that, I don't believe there's such a restriction on all of them added together. Second, it proceeded to multiply the sum by BLCKSZ, which most certainly could overflow a uint32. (The exact expression is total_blocks * BLCKSZ / 1024. The compiler might choose to optimize that to total_blocks * 8, which is not at quite as much risk of overflow as a literal reading would be, but it's still wrong.) If an overflow did occur it could lead to a poor choice to shove a very large relation into WAL instead of fsync'ing it. This wouldn't be fatal, but it could be inefficient. Change total_blocks to uint64 which should be plenty, and rearrange the comparison calculation to be overflow-safe. I noticed this while looking for ramifications of the proposed change in MAX_KILOBYTES. It's not entirely clear to me why wal_skip_threshold is limited to MAX_KILOBYTES in the first place, but in any case this code is unsafe regardless of the range of wal_skip_threshold. Oversight in c6b92041d which introduced wal_skip_threshold, so back-patch to v13. Discussion: https://postgr.es/m/1a01f0-66ec2d80-3b-68487680@27595217 Backpatch-through: 13 --- src/backend/catalog/storage.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/catalog/storage.c b/src/backend/catalog/storage.c index f563f2a1690..f5d566dac87 100644 --- a/src/backend/catalog/storage.c +++ b/src/backend/catalog/storage.c @@ -773,7 +773,7 @@ smgrDoPendingSyncs(bool isCommit, bool isParallelWorker) { ForkNumber fork; BlockNumber nblocks[MAX_FORKNUM + 1]; - BlockNumber total_blocks = 0; + uint64 total_blocks = 0; SMgrRelation srel; srel = smgropen(pendingsync->rnode, InvalidBackendId); @@ -817,7 +817,7 @@ smgrDoPendingSyncs(bool isCommit, bool isParallelWorker) * main fork is longer than ever but FSM fork gets shorter. */ if (pendingsync->is_truncated || - total_blocks * BLCKSZ / 1024 >= wal_skip_threshold) + total_blocks >= wal_skip_threshold * (uint64) 1024 / BLCKSZ) { /* allocate the initial array, or extend it, if needed */ if (maxrels == 0) From 71832a189b198d483fab61a529d48a417e64619c Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 31 Jan 2025 11:06:12 +0900 Subject: [PATCH 73/90] Fix comment of StrategySyncStart() The top comment of StrategySyncStart() mentions BufferSync(), but this function calls BgBufferSync(), not BufferSync(). Oversight in 9cd00c457e6a. Author: Ashutosh Bapat Discussion: https://postgr.es/m/CAExHW5tgkjag8i-s=RFrCn5KAWDrC4zEPPkfUKczfccPOxBRQQ@mail.gmail.com Backpatch-through: 13 --- src/backend/storage/buffer/freelist.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/storage/buffer/freelist.c b/src/backend/storage/buffer/freelist.c index 6be80476dbd..f6bd07425d9 100644 --- a/src/backend/storage/buffer/freelist.c +++ b/src/backend/storage/buffer/freelist.c @@ -381,10 +381,10 @@ StrategyFreeBuffer(BufferDesc *buf) } /* - * StrategySyncStart -- tell BufferSync where to start syncing + * StrategySyncStart -- tell BgBufferSync where to start syncing * * The result is the buffer index of the best buffer to sync first. - * BufferSync() will proceed circularly around the buffer array from there. + * BgBufferSync() will proceed circularly around the buffer array from there. * * In addition, we return the completed-pass count (which is effectively * the higher-order bits of nextVictimBuffer) and the count of recent buffer From d7260f92adea66791b027ad46b44b2cb7d77b555 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Sun, 2 Feb 2025 11:31:32 +0900 Subject: [PATCH 74/90] Mention jsonlog in description of logging_collector in GUC table logging_collector was only mentioning stderr and csvlog, and forgot about jsonlog. Oversight in dc686681e079, that has added support for jsonlog in log_destination. While on it, the description in the GUC table is tweaked to be more consistent with the documentation and postgresql.conf.sample. Author: Umar Hayat Reviewed-by: Ashutosh Bapat, Tom Lane Discussion: https://postgr.es/m/CAD68Dp1K_vBYqBEukHw=1jF7e76t8aszGZTFL2ugi=H7r=a7MA@mail.gmail.com Backpatch-through: 13 --- 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 405623fd527..c8a837245ff 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -1766,7 +1766,7 @@ static struct config_bool ConfigureNamesBool[] = }, { {"logging_collector", PGC_POSTMASTER, LOGGING_WHERE, - gettext_noop("Start a subprocess to capture stderr output and/or csvlogs into log files."), + gettext_noop("Start a subprocess to capture stderr, csvlog and/or jsonlog into log files."), NULL }, &Logging_collector, From eeaf6891be48ac2940361717525c277a02c97e63 Mon Sep 17 00:00:00 2001 From: Nathan Bossart Date: Tue, 4 Feb 2025 13:26:57 -0600 Subject: [PATCH 75/90] vacuumdb: Add missing PQfinish() calls to vacuum_one_database(). A few of the version checks in vacuum_one_database() do not call PQfinish() before exiting. This precedent was unintentionally established in commit 00d1e88d36, and while it's probably not too problematic, it seems better to properly close the connection. Reviewed-by: Daniel Gustafsson Discussion: https://postgr.es/m/Z6JAwqN1I8ljTuXp%40nathan Backpatch-through: 13 --- src/bin/scripts/vacuumdb.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/bin/scripts/vacuumdb.c b/src/bin/scripts/vacuumdb.c index dac0eac71b9..d6f36bbed26 100644 --- a/src/bin/scripts/vacuumdb.c +++ b/src/bin/scripts/vacuumdb.c @@ -514,6 +514,7 @@ vacuum_one_database(ConnParams *cparams, if (vacopts->min_xid_age != 0 && PQserverVersion(conn) < 90600) { + PQfinish(conn); pg_log_error("cannot use the \"%s\" option on server versions older than PostgreSQL %s", "--min-xid-age", "9.6"); exit(1); @@ -521,6 +522,7 @@ vacuum_one_database(ConnParams *cparams, if (vacopts->min_mxid_age != 0 && PQserverVersion(conn) < 90600) { + PQfinish(conn); pg_log_error("cannot use the \"%s\" option on server versions older than PostgreSQL %s", "--min-mxid-age", "9.6"); exit(1); @@ -528,6 +530,7 @@ vacuum_one_database(ConnParams *cparams, if (vacopts->parallel_workers >= 0 && PQserverVersion(conn) < 130000) { + PQfinish(conn); pg_log_error("cannot use the \"%s\" option on server versions older than PostgreSQL %s", "--parallel", "13"); exit(1); From f2205448b15e991478e8ba717732fc02b5a55d09 Mon Sep 17 00:00:00 2001 From: Alexander Korotkov Date: Wed, 5 Feb 2025 00:15:17 +0200 Subject: [PATCH 76/90] pg_controldata: Fix possible errors on corrupted pg_control Protect against malformed timestamps. Also protect against negative WalSegSz as it triggers division by zero: ((0x100000000UL) / (WalSegSz)) can turn into zero in XLogFileName(xlogfilename, ControlFile->checkPointCopy.ThisTimeLineID, segno, WalSegSz); because if WalSegSz is -1 then by arithmetic rules in C we get 0x100000000UL / 0xFFFFFFFFFFFFFFFFUL == 0. Author: Ilyasov Ian Author: Anton Voloshin Backpatch-through: 13 --- src/bin/pg_controldata/pg_controldata.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/bin/pg_controldata/pg_controldata.c b/src/bin/pg_controldata/pg_controldata.c index f911f98d946..408561464ae 100644 --- a/src/bin/pg_controldata/pg_controldata.c +++ b/src/bin/pg_controldata/pg_controldata.c @@ -97,6 +97,7 @@ main(int argc, char *argv[]) bool crc_ok; char *DataDir = NULL; time_t time_tmp; + struct tm *tm_tmp; char pgctime_str[128]; char ckpttime_str[128]; char mock_auth_nonce_str[MOCK_AUTH_NONCE_LEN * 2 + 1]; @@ -197,20 +198,30 @@ main(int argc, char *argv[]) * about %c */ time_tmp = (time_t) ControlFile->time; - strftime(pgctime_str, sizeof(pgctime_str), strftime_fmt, - localtime(&time_tmp)); + tm_tmp = localtime(&time_tmp); + + if (tm_tmp != NULL) + strftime(pgctime_str, sizeof(pgctime_str), strftime_fmt, tm_tmp); + else + snprintf(pgctime_str, sizeof(pgctime_str), _("???")); + time_tmp = (time_t) ControlFile->checkPointCopy.time; - strftime(ckpttime_str, sizeof(ckpttime_str), strftime_fmt, - localtime(&time_tmp)); + tm_tmp = localtime(&time_tmp); + + if (tm_tmp != NULL) + strftime(ckpttime_str, sizeof(ckpttime_str), strftime_fmt, tm_tmp); + else + snprintf(ckpttime_str, sizeof(ckpttime_str), _("???")); /* * Calculate name of the WAL file containing the latest checkpoint's REDO * start point. * - * A corrupted control file could report a WAL segment size of 0, and to - * guard against division by zero, we need to treat that specially. + * A corrupted control file could report a WAL segment size of 0 or + * negative value, and to guard against division by zero, we need to treat + * that specially. */ - if (WalSegSz != 0) + if (WalSegSz > 0) { XLogSegNo segno; From ceeae767042f67e548c8792262aa9f7aefb58d00 Mon Sep 17 00:00:00 2001 From: Daniel Gustafsson Date: Wed, 5 Feb 2025 13:58:40 +0100 Subject: [PATCH 77/90] doc: Update links which returned 404 Two links in the isn module documentation were pointing to tools which had been moved, resulting in 404 error responses. Update to the new URLs for the tools. The link to the Sequoia 2000 page in the history section was no longer working, and since the page is no longer available online update our link to point at the paper instead which is on a stable URL. These links exist in all versions of the documentation so backpatch to all supported branches. Author: Daniel Gustafsson Reported-by: charukiewicz@protonmail.com Discussion: https://postgr.es/m/173679670185.705.8565555804465055355@wrigleys.postgresql.org Backpatch-through: 13 --- doc/src/sgml/biblio.sgml | 18 ++++++++++++++++++ doc/src/sgml/history.sgml | 5 ++--- doc/src/sgml/isn.sgml | 4 ++-- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/doc/src/sgml/biblio.sgml b/doc/src/sgml/biblio.sgml index cd8aa3e8aad..4674544461d 100644 --- a/doc/src/sgml/biblio.sgml +++ b/doc/src/sgml/biblio.sgml @@ -546,5 +546,23 @@ ssimkovi@ag.or.at + + + <ulink url="https://dsf.berkeley.edu/papers/S2K-91-05.pdf"> + An overview of the Sequoia 2000 project + </ulink> + + + M. + Stonebraker + + + + + Digest of Papers COMPCON Spring 1992 + 1992 + 383–388 + + diff --git a/doc/src/sgml/history.sgml b/doc/src/sgml/history.sgml index 120b4b3c047..ff094eb4014 100644 --- a/doc/src/sgml/history.sgml +++ b/doc/src/sgml/history.sgml @@ -69,9 +69,8 @@ url="https://www.ibm.com/">IBM) picked up the code and commercialized it. In late 1992, POSTGRES became the primary data manager - for the - - Sequoia 2000 scientific computing project. + for the Sequoia 2000 scientific computing project described in + . diff --git a/doc/src/sgml/isn.sgml b/doc/src/sgml/isn.sgml index 709bc8345c7..ef7819ecffe 100644 --- a/doc/src/sgml/isn.sgml +++ b/doc/src/sgml/isn.sgml @@ -398,9 +398,9 @@ SELECT isbn13(id) FROM test; - + - + Care was taken during the creation of the algorithms and they From 9f6ad2f43c2fd94cfca99bb178d4eb03754cdd9d Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 7 Feb 2025 12:40:41 -0500 Subject: [PATCH 78/90] Doc: clarify behavior of timestamptz input some more. Try to make it absolutely plain that we don't retain the originally specified time zone, only the UTC timestamp. While at it, make glossary entries for "UTC" and "GMT". Author: Robert Treat Co-authored-by: Tom Lane Discussion: https://postgr.es/m/173796426022.1064.9135167366862649513@wrigleys.postgresql.org Backpatch-through: 13 --- doc/src/sgml/datatype.sgml | 17 ++++++++++------- doc/src/sgml/glossary.sgml | 16 ++++++++++++++++ 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml index bdc3c27c04b..c65eee7cdcd 100644 --- a/doc/src/sgml/datatype.sgml +++ b/doc/src/sgml/datatype.sgml @@ -2184,24 +2184,27 @@ TIMESTAMP '2004-10-19 10:23:54+02' TIMESTAMP WITH TIME ZONE '2004-10-19 10:23:54+02' + - In a literal that has been determined to be timestamp without time + + In a value that has been determined to be timestamp without time zone, PostgreSQL will silently ignore any time zone indication. That is, the resulting value is derived from the date/time - fields in the input value, and is not adjusted for time zone. + fields in the input string, and is not adjusted for time zone. - For timestamp with time zone, the internally stored - value is always in UTC (Universal - Coordinated Time, traditionally known as Greenwich Mean Time, - GMT). An input value that has an explicit - time zone specified is converted to UTC using the appropriate offset + For timestamp with time zone values, an input string + that includes an explicit time zone will be converted to UTC + (Universal Coordinated + Time) using the appropriate offset for that time zone. If no time zone is stated in the input string, then it is assumed to be in the time zone indicated by the system's parameter, and is converted to UTC using the offset for the timezone zone. + In either case, the value is stored internally as UTC, and the + originally stated or assumed time zone is not retained. diff --git a/doc/src/sgml/glossary.sgml b/doc/src/sgml/glossary.sgml index c8d0440e80f..e98a13df834 100644 --- a/doc/src/sgml/glossary.sgml +++ b/doc/src/sgml/glossary.sgml @@ -687,6 +687,11 @@ + + GMT + + + Grant @@ -1782,6 +1787,17 @@ + + UTC + + + Universal Coordinated Time, the primary global time reference, + approximately the time prevailing at the zero meridian of longitude. + Often but inaccurately referred to as GMT (Greenwich Mean Time). + + + + Vacuum From 5addea71c7c7693ed9aa071e122038e2dd7011ab Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 7 Feb 2025 13:41:43 -0500 Subject: [PATCH 79/90] Fix pgbench performance issue induced by commit af35fe501. Commit af35fe501 caused "pgbench -i" to emit a '\r' character for each data row loaded (when stderr is a terminal). That's effectively invisible on-screen, but it causes the connected terminal program to consume a lot of cycles. It's even worse if you're connected over ssh, as the data then has to pass through the ssh tunnel. Simplest fix is to move the added logic inside the if-tests that check whether to print a progress line. We could do it another way that avoids duplicating these few lines, but on the whole this seems the most transparent way to write it. Like the previous commit, back-patch to all supported versions. Reported-by: Andres Freund Author: Tom Lane Reviewed-by: Nathan Bossart Discussion: https://postgr.es/m/4k4drkh7bcmdezq6zbkhp25mnrzpswqi2o75d5uv2eeg3aq6q7@b7kqdmzzwzgb Backpatch-through: 13 --- src/bin/pgbench/pgbench.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index 1f6cb0e6038..bef07be3925 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -4312,6 +4312,16 @@ initGenerateDataClientSide(PGconn *con) j, (int64) naccounts * scale, (int) (((int64) j * 100) / (naccounts * (int64) scale)), elapsed_sec, remaining_sec); + + /* + * If the previous progress message is longer than the current + * one, add spaces to the current line to fully overwrite any + * remaining characters from the previous message. + */ + if (prev_chars > chars) + fprintf(stderr, "%*c", prev_chars - chars, ' '); + fputc(eol, stderr); + prev_chars = chars; } /* let's not call the timing for each row, but only each 100 rows */ else if (use_quiet && (j % 100 == 0)) @@ -4326,20 +4336,20 @@ initGenerateDataClientSide(PGconn *con) j, (int64) naccounts * scale, (int) (((int64) j * 100) / (naccounts * (int64) scale)), elapsed_sec, remaining_sec); + /* + * If the previous progress message is longer than the current + * one, add spaces to the current line to fully overwrite any + * remaining characters from the previous message. + */ + if (prev_chars > chars) + fprintf(stderr, "%*c", prev_chars - chars, ' '); + fputc(eol, stderr); + prev_chars = chars; + /* skip to the next interval */ log_interval = (int) ceil(elapsed_sec / LOG_STEP_SECONDS); } } - - /* - * If the previous progress message is longer than the current one, - * add spaces to the current line to fully overwrite any remaining - * characters from the previous message. - */ - if (prev_chars > chars) - fprintf(stderr, "%*c", prev_chars - chars, ' '); - fputc(eol, stderr); - prev_chars = chars; } if (eol != '\n') From 2e44eefb9dd93d3f05deb57edb5597df41c7cdde Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 9 Feb 2025 13:58:53 -0500 Subject: [PATCH 80/90] Release notes for 17.3, 16.7, 15.11, 14.16, 13.19. --- doc/src/sgml/release-14.sgml | 1097 ++++++++++++++++++++++++++++++++++ 1 file changed, 1097 insertions(+) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 70adcf4c333..34f4b610a83 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -1,6 +1,1103 @@ + + Release 14.16 + + + Release date: + 2025-02-13 + + + + This release contains a variety of fixes from 14.15. + For information about new features in major release 14, see + . + + + + Migration to Version 14.16 + + + A dump/restore is not required for those running 14.X. + + + + However, if you are upgrading from a version earlier than 14.14, + see . + + + + + Changes + + + + + + + Exclude parallel workers from connection privilege checks and limits + (Tom Lane) + § + + + + Do not + check datallowconn, rolcanlogin, + and ACL_CONNECT privileges when starting a + parallel worker, instead assuming that it's enough for the leader + process to have passed similar checks originally. This avoids, for + example, unexpected failures of parallelized queries when the leader + is running as a role that lacks login privilege. In the same vein, + enforce ReservedConnections, + datconnlimit, and rolconnlimit + limits only against regular backends, and count only regular + backends while checking if the limits were already reached. Those + limits are meant to prevent excessive consumption of process slots + for regular backends --- but parallel workers and other special + processes have their own pools of process slots with their own limit + checks. + + + + + + + Keep TransactionXmin in sync + with MyProc->xmin (Heikki Linnakangas) + § + + + + This oversight could permit a process to try to access data that had + already been vacuumed away. One known consequence is + transient could not access status of transaction + errors. + + + + + + + Fix race condition that could cause failure to add a newly-inserted + catalog entry to a catalog cache list (Heikki Linnakangas) + § + + + + This could result, for example, in failure to use a newly-created + function within an existing session. + + + + + + + Prevent possible catalog corruption when a system catalog is + vacuumed concurrently with an update (Noah Misch) + § + + + + + + + Fix data corruption when relation truncation fails (Thomas Munro) + § + § + § + + + + The filesystem calls needed to perform relation truncation could + fail, leaving inconsistent state on disk (for example, effectively + reviving deleted data). We can't really prevent that, but we can + recover by dint of making such failures into PANICs, so that + consistency is restored by replaying from WAL up to just before the + attempted truncation. This isn't a hugely desirable behavior, but + such failures are rare enough that it seems an acceptable solution. + + + + + + + Prevent checkpoints from starting during relation truncation + (Robert Haas) + § + + + + This avoids a race condition wherein the modified file might not get + fsync'd before completing the checkpoint, creating a risk of data + corruption if the operating system crashes soon after. + + + + + + + Use rename() + not link()/unlink() to + rename files (Nathan Bossart) + § + + + + The previous coding was intended to assure that the operation could + not accidentally overwrite an existing file. However a failure + could leave two links to the same file in existence, confusing + subsequent operations and creating a risk of data corruption. + In practice we do not use this functionality in places where the + target filename could already exist, so it seems better to give up + the no-overwrite guarantee to remove the multiple-link hazard. + + + + + + + Avoid possibly losing an update of + pg_database.datfrozenxid + when VACUUM runs concurrently with + a REASSIGN OWNED that changes that database's + owner (Kirill Reshke) + § + + + + + + + Fix incorrect tg_updatedcols values + passed to AFTER UPDATE triggers (Tom Lane) + § + + + + In some cases the tg_updatedcols bitmap + could describe the set of columns updated by an earlier command in + the same transaction, fooling the trigger into doing the wrong + thing. + + + + Also, prevent memory bloat caused by making too many copies of + the tg_updatedcols bitmap. + + + + + + + Fix mis-processing of to_timestamp's + FFn format codes + (Tom Lane) + § + + + + An integer format code immediately + preceding FFn would + consume all available digits, leaving none + for FFn. + + + + + + + When deparsing an XMLTABLE() expression, ensure + that XML namespace names are double-quoted when necessary (Dean + Rasheed) + § + + + + + + + Include the ldapscheme option + in pg_hba_file_rules() output (Laurenz Albe) + § + § + + + + + + + Don't merge UNION operations if their column + collations aren't consistent (Tom Lane) + § + + + + Previously we ignored collations when deciding if it's safe to + merge UNION steps into a single + N-way UNION operation. This was arguably valid + before the introduction of nondeterministic collations, but it's not + anymore, since the collation in use can affect the definition of + uniqueness. + + + + + + + Fix missed expression processing for partition pruning steps + (Tom Lane) + § + + + + This oversight could lead to unrecognized node type + errors, and perhaps other problems, in queries accessing partitioned + tables. + + + + + + + Allow dshash tables to grow past 1GB (Matthias van de Meent) + § + + + + This avoids errors like invalid DSA memory alloc request + size. The case can occur for example in transactions that + process several million tables. + + + + + + + Avoid possible integer overflow + in bringetbitmap() (James Hunter, Evgeniy + Gorbanyov) + § + + + + Since the result is only used for statistical purposes, the effects + of this error were mostly cosmetic. + + + + + + + Prevent streaming standby servers from looping infinitely when + reading a WAL record that crosses pages (Kyotaro Horiguchi, + Alexander Kukushkin) + § + + + + This would happen when the record's continuation is on a page that + needs to be read from a different WAL source. + + + + + + + Improve performance of archiver process with many status files + (Nathan Bossart) + § + + + + This change back-patches a fix originally made in v15, in response + to reports of extremely poor archiving performance leading to + downtime or loss of replicas. + + + + + + + Fix unintended promotion of FATAL errors to PANIC during early + process startup (Noah Misch) + § + + + + This fixes some unlikely cases that would result in PANIC: + proc_exit() called in child process. + + + + + + + Fix cases where an operator family member operator or support + procedure could become a dangling reference (Tom Lane) + § + § + + + + In some cases a data type could be dropped while references to its + OID still remain in pg_amop + or pg_amproc. While that caused no + immediate issues, an attempt to drop the owning operator family + would fail, and pg_dump would produce + bogus output when dumping the operator family. This fix causes + creation and modification of operator families/classes to add + needed dependency entries so that dropping a data type will also + drop any dependent operator family elements. That does not help + vulnerable pre-existing operator families, though, so a band-aid has + also been added to DROP OPERATOR FAMILY to + prevent failure when dropping a family that has dangling members. + + + + + + + Fix multiple memory leaks in logical decoding output (Vignesh C, + Masahiko Sawada, Boyu Yang) + § + § + + + + + + + Avoid low-probability crash on out-of-memory, due to missing check + for failure return from malloc() + (Karina Litskevich) + § + + + + + + + Avoid integer overflow while + testing wal_skip_threshold condition (Tom Lane) + § + + + + A transaction that created a very large relation could mistakenly + decide to ensure durability by copying the relation into WAL instead + of fsync'ing it, thereby negating the point + of wal_skip_threshold. (This only matters + when wal_level is set + to minimal, else a WAL copy is required anyway.) + + + + + + + Fix unsafe order of operations during cache lookups (Noah Misch) + § + + + + The only known consequence was a usually-harmless you don't + own a lock of type ExclusiveLock warning + during GRANT TABLESPACE. + + + + + + + Fix possible failed to resolve name failures when + using JIT on older ARM platforms (Thomas Munro) + § + + + + This could occur as a consequence of inconsistency about the default + setting of between gcc and clang. + At least Debian and Ubuntu are known to ship gcc and clang compilers + that target armv8-a but differ on the use of outline atomics by + default. + + + + + + + Fix handling of Windows junction points that are not + of PostgreSQL origin (Thomas Munro) + § + § + + + + Previously, initdb would fail if the path + to the data directory included junction points whose expansion isn't + in drive absolute format, or whose expansion points + to another junction point. + + + + + + + Fix assertion failure in WITH RECURSIVE ... UNION + queries (David Rowley) + § + + + + + + + Avoid assertion failure in rule deparsing if a set operation leaf + query contains set operations (Man Zeng, Tom Lane) + § + + + + + + + Avoid edge-case assertion failure in parallel query startup (Tom Lane) + § + + + + + + + In NULLIF(), avoid passing a read-write + expanded object pointer to the data type's equality function + (Tom Lane) + § + + + + The equality function could modify or delete the object if it's + given a read-write pointer, which would be bad if we decide to + return it as the NULLIF() result. There is + probably no problem with any built-in equality function, but it's + easy to demonstrate a failure with one coded in PL/pgSQL. + + + + + + + Ensure that expression preprocessing is applied to a default null + value in INSERT (Tom Lane) + § + + + + If the target column is of a domain type, the planner must insert a + coerce-to-domain step not just a null constant, and this expression + missed going through some required processing steps. There is no + known consequence with domains based on core data types, but in + theory an error could occur with domains based on extension types. + + + + + + + Repair memory leaks in PL/Python (Mat Arye, Tom Lane) + § + + + + Repeated use of PLyPlan.execute + or plpy.cursor resulted in memory leakage for + the duration of the calling PL/Python function. + + + + + + + Fix PL/Tcl to compile with Tcl 9 (Peter Eisentraut) + § + + + + + + + In the ecpg preprocessor, fix possible + misprocessing of cursors that reference out-of-scope variables + (Tom Lane) + § + + + + + + + In ecpg, fix compile-time warnings about + unsupported use of COPY ... FROM STDIN (Ryo + Kanbayashi) + § + + + + Previously, the intended warning was not issued due to a typo. + + + + + + + Fix psql to safely handle file path names + that are encoded in SJIS (Tom Lane) + § + + + + Some two-byte characters in SJIS have a second byte that is equal to + ASCII backslash (\). These characters were + corrupted by path name normalization, preventing access to files + whose names include such characters. + + + + + + + Fix use of wrong version of pqsignal() + in pgbench + and psql (Fujii Masao, Tom Lane) + § + + + + This error could lead to misbehavior when using + the option in pgbench + or the \watch command + in psql, due to interrupted system calls + not being resumed as expected. + + + + + + + Fix misexecution of some nested \if constructs + in pgbench (Michail Nikolaev) + § + + + + An \if command appearing within a false + (not-being-executed) \if branch was incorrectly + treated the same as \elif. + + + + + + + In pgbench, fix possible misdisplay of + progress messages during table initialization (Yushi Ogiwara, Tatsuo + Ishii, Fujii Masao) + § + § + + + + + + + Make pg_controldata more robust against + corrupted pg_control files (Ilyasov Ian, Anton + Voloshin) + § + + + + Since pg_controldata will attempt to + print the contents of pg_control even if the + CRC check fails, it must take care not to misbehave for invalid + field values. This patch fixes some issues triggered by invalid + timestamps and apparently-negative WAL segment sizes. + + + + + + + Fix possible crash in pg_dump with + identity sequences attached to tables that are extension members + (Tom Lane) + § + + + + + + + Fix pg_basebackup to correctly + handle pg_wal.tar files exceeding 2GB on + Windows (Davinder Singh, Thomas Munro) + § + § + + + + + + + Update configuration probes that determine the compiler switches + needed to access ARM CRC instructions (Tom Lane) + § + + + + On ARM platforms where the baseline CPU target lacks CRC + instructions, we need to supply a switch to + persuade the compiler to compile such instructions. Recent versions + of gcc reject the value we were trying, leading to silently falling + back to software CRC. + + + + + + + During configure, if a C23 compiler is + detected, try asking for C17 (Thomas Munro) + § + + + + PostgreSQL versions before v16 will not + compile under C23 rules. If the chosen compiler defaults to C23 or + later, try adding a -std=gnu17 switch to change + that. (If this won't work for your compiler, manually + specify CFLAGS with a suitable switch.) + + + + + + + Update time zone data files to tzdata + release 2025a for DST law changes in Paraguay, plus historical + corrections for the Philippines (Tom Lane) + § + + + + + + + + Release 14.15 From 04f31c8d0d0f07cfd600e9a51496481da6fc14ed Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 10 Feb 2025 15:16:57 +0100 Subject: [PATCH 81/90] Translation updates Source-Git-URL: https://git.postgresql.org/git/pgtranslation/messages.git Source-Git-Hash: 7ebf0f8af5adf2da3fd838965b89fbfe5850f208 --- src/backend/po/de.po | 1921 +++++++++++++------------- src/backend/po/es.po | 662 +++++---- src/backend/po/fr.po | 1707 +++++++++++------------ src/backend/po/ja.po | 1716 +++++++++++------------ src/backend/po/ru.po | 1917 ++++++++++++------------- src/bin/pg_basebackup/po/fr.po | 2 +- src/bin/pg_basebackup/po/ja.po | 2 +- src/bin/pg_controldata/po/ru.po | 131 +- src/bin/pg_ctl/po/ru.po | 6 +- src/bin/pg_dump/po/ru.po | 124 +- src/bin/pg_rewind/po/ru.po | 88 +- src/bin/psql/po/ru.po | 8 +- src/bin/psql/po/tr.po | 4 +- src/bin/scripts/po/ru.po | 88 +- src/interfaces/ecpg/preproc/po/ru.po | 16 +- src/interfaces/libpq/po/de.po | 396 +++--- src/interfaces/libpq/po/es.po | 106 +- src/interfaces/libpq/po/ru.po | 108 +- src/pl/plpython/po/ru.po | 24 +- src/pl/tcl/po/ru.po | 40 +- 20 files changed, 4551 insertions(+), 4515 deletions(-) diff --git a/src/backend/po/de.po b/src/backend/po/de.po index 02122d6088a..1f9206ea139 100644 --- a/src/backend/po/de.po +++ b/src/backend/po/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-11-08 07:42+0000\n" +"POT-Creation-Date: 2025-02-05 14:30+0000\n" "PO-Revision-Date: 2022-11-03 23:31+0100\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" @@ -33,10 +33,10 @@ msgstr "konnte Datei »%s« nicht zum Lesen öffnen: %m" #: ../common/controldata_utils.c:96 ../common/controldata_utils.c:99 #: access/transam/timeline.c:143 access/transam/timeline.c:362 #: access/transam/twophase.c:1329 access/transam/xlog.c:3576 -#: access/transam/xlog.c:4820 access/transam/xlog.c:11665 -#: access/transam/xlog.c:11678 access/transam/xlog.c:12133 -#: access/transam/xlog.c:12213 access/transam/xlog.c:12250 -#: access/transam/xlog.c:12310 access/transam/xlogfuncs.c:703 +#: access/transam/xlog.c:4817 access/transam/xlog.c:11662 +#: access/transam/xlog.c:11675 access/transam/xlog.c:12130 +#: access/transam/xlog.c:12210 access/transam/xlog.c:12247 +#: access/transam/xlog.c:12307 access/transam/xlogfuncs.c:703 #: access/transam/xlogfuncs.c:722 commands/extension.c:3492 libpq/hba.c:534 #: replication/basebackup.c:2016 replication/logical/origin.c:729 #: replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4959 @@ -50,7 +50,7 @@ msgid "could not read file \"%s\": %m" msgstr "konnte Datei »%s« nicht lesen: %m" #: ../common/controldata_utils.c:107 ../common/controldata_utils.c:111 -#: access/transam/xlog.c:3581 access/transam/xlog.c:4825 +#: access/transam/xlog.c:3581 access/transam/xlog.c:4822 #: replication/basebackup.c:2020 replication/logical/origin.c:734 #: replication/logical/origin.c:773 replication/logical/snapbuild.c:1877 #: replication/logical/snapbuild.c:1919 replication/logical/snapbuild.c:1946 @@ -64,11 +64,11 @@ msgstr "konnte Datei »%s« nicht lesen: %d von %zu gelesen" #: ../common/controldata_utils.c:286 ../common/controldata_utils.c:289 #: access/heap/rewriteheap.c:1178 access/heap/rewriteheap.c:1281 #: access/transam/timeline.c:392 access/transam/timeline.c:438 -#: access/transam/timeline.c:516 access/transam/twophase.c:1341 +#: access/transam/timeline.c:512 access/transam/twophase.c:1341 #: access/transam/twophase.c:1753 access/transam/xlog.c:3445 #: access/transam/xlog.c:3616 access/transam/xlog.c:3621 -#: access/transam/xlog.c:3949 access/transam/xlog.c:4790 -#: access/transam/xlog.c:5715 access/transam/xlogfuncs.c:728 +#: access/transam/xlog.c:3946 access/transam/xlog.c:4787 +#: access/transam/xlog.c:5712 access/transam/xlogfuncs.c:728 #: commands/copyfrom.c:1586 commands/copyto.c:328 libpq/be-fsstubs.c:455 #: libpq/be-fsstubs.c:525 replication/logical/origin.c:667 #: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:5017 @@ -105,9 +105,9 @@ msgstr "" #: access/transam/timeline.c:111 access/transam/timeline.c:251 #: access/transam/timeline.c:348 access/transam/twophase.c:1285 #: access/transam/xlog.c:3331 access/transam/xlog.c:3487 -#: access/transam/xlog.c:3531 access/transam/xlog.c:3729 -#: access/transam/xlog.c:3814 access/transam/xlog.c:3917 -#: access/transam/xlog.c:4810 access/transam/xlogutils.c:803 +#: access/transam/xlog.c:3531 access/transam/xlog.c:3726 +#: access/transam/xlog.c:3811 access/transam/xlog.c:3914 +#: access/transam/xlog.c:4807 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:3612 @@ -119,17 +119,17 @@ msgstr "" #: storage/file/fd.c:713 storage/file/fd.c:3306 storage/file/fd.c:3524 #: storage/file/fd.c:3611 storage/smgr/md.c:506 utils/cache/relmapper.c:724 #: utils/cache/relmapper.c:842 utils/error/elog.c:1958 -#: utils/init/miscinit.c:1359 utils/init/miscinit.c:1493 -#: utils/init/miscinit.c:1570 utils/misc/guc.c:8643 utils/misc/guc.c:8675 +#: utils/init/miscinit.c:1403 utils/init/miscinit.c:1537 +#: utils/init/miscinit.c:1614 utils/misc/guc.c:8682 utils/misc/guc.c:8714 #, c-format msgid "could not open file \"%s\": %m" msgstr "konnte Datei »%s« nicht öffnen: %m" #: ../common/controldata_utils.c:251 ../common/controldata_utils.c:254 #: access/transam/twophase.c:1726 access/transam/twophase.c:1735 -#: access/transam/xlog.c:11422 access/transam/xlog.c:11460 -#: access/transam/xlog.c:11873 access/transam/xlogfuncs.c:782 -#: postmaster/postmaster.c:5684 postmaster/syslogger.c:1499 +#: access/transam/xlog.c:11419 access/transam/xlog.c:11457 +#: access/transam/xlog.c:11870 access/transam/xlogfuncs.c:782 +#: postmaster/postmaster.c:5686 postmaster/syslogger.c:1499 #: postmaster/syslogger.c:1512 utils/cache/relmapper.c:876 #, c-format msgid "could not write file \"%s\": %m" @@ -139,40 +139,40 @@ msgstr "konnte Datei »%s« nicht schreiben: %m" #: ../common/file_utils.c:298 ../common/file_utils.c:368 #: access/heap/rewriteheap.c:960 access/heap/rewriteheap.c:1172 #: access/heap/rewriteheap.c:1275 access/transam/timeline.c:432 -#: access/transam/timeline.c:510 access/transam/twophase.c:1747 +#: access/transam/timeline.c:506 access/transam/twophase.c:1747 #: access/transam/xlog.c:3438 access/transam/xlog.c:3610 -#: access/transam/xlog.c:4783 access/transam/xlog.c:10905 -#: access/transam/xlog.c:10946 replication/logical/snapbuild.c:1774 +#: access/transam/xlog.c:4780 access/transam/xlog.c:10902 +#: access/transam/xlog.c:10943 replication/logical/snapbuild.c:1774 #: replication/slot.c:1604 replication/slot.c:1709 storage/file/fd.c:730 -#: storage/file/fd.c:3632 storage/smgr/md.c:954 storage/smgr/md.c:995 -#: storage/sync/sync.c:454 utils/cache/relmapper.c:891 utils/misc/guc.c:8430 +#: storage/file/fd.c:3632 storage/smgr/md.c:956 storage/smgr/md.c:997 +#: storage/sync/sync.c:454 utils/cache/relmapper.c:891 utils/misc/guc.c:8469 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "konnte Datei »%s« nicht fsyncen: %m" #: ../common/cryptohash_openssl.c:104 ../common/exec.c:560 ../common/exec.c:605 #: ../common/exec.c:697 ../common/hmac_openssl.c:101 ../common/psprintf.c:143 -#: ../common/stringinfo.c:305 ../port/path.c:630 ../port/path.c:668 -#: ../port/path.c:685 access/transam/twophase.c:1399 access/transam/xlog.c:6695 +#: ../common/stringinfo.c:305 ../port/path.c:707 ../port/path.c:745 +#: ../port/path.c:762 access/transam/twophase.c:1399 access/transam/xlog.c:6692 #: lib/dshash.c:245 libpq/auth.c:1489 libpq/auth.c:1557 libpq/auth.c:2115 #: libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:349 -#: postmaster/bgworker.c:948 postmaster/postmaster.c:2550 -#: postmaster/postmaster.c:4208 postmaster/postmaster.c:5609 -#: postmaster/postmaster.c:5973 +#: postmaster/bgworker.c:948 postmaster/postmaster.c:2552 +#: postmaster/postmaster.c:4209 postmaster/postmaster.c:5611 +#: postmaster/postmaster.c:5975 #: replication/libpqwalreceiver/libpqwalreceiver.c:287 #: replication/logical/logical.c:206 replication/walsender.c:592 #: storage/buffer/localbuf.c:442 storage/file/fd.c:888 storage/file/fd.c:1360 #: storage/file/fd.c:1521 storage/file/fd.c:2329 storage/ipc/procarray.c:1472 #: storage/ipc/procarray.c:2293 storage/ipc/procarray.c:2300 #: storage/ipc/procarray.c:2805 storage/ipc/procarray.c:3482 -#: 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 +#: tcop/postgres.c:3655 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:5061 -#: utils/misc/guc.c:5077 utils/misc/guc.c:5090 utils/misc/guc.c:8408 +#: utils/misc/guc.c:5077 utils/misc/guc.c:5090 utils/misc/guc.c:8447 #: utils/misc/tzparser.c:476 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:702 #: utils/mmgr/dsa.c:724 utils/mmgr/dsa.c:805 utils/mmgr/generation.c:234 #: utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 @@ -203,12 +203,12 @@ msgstr "konnte Programmdatei »%s« nicht lesen" msgid "could not find a \"%s\" to execute" msgstr "konnte kein »%s« zum Ausführen finden" -#: ../common/exec.c:282 ../common/exec.c:321 utils/init/miscinit.c:424 +#: ../common/exec.c:282 ../common/exec.c:321 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:299 access/transam/xlog.c:11296 +#: ../common/exec.c:299 access/transam/xlog.c:11293 #: replication/basebackup.c:1428 utils/adt/misc.c:362 #, c-format msgid "could not read symbolic link \"%s\": %m" @@ -223,8 +223,8 @@ msgstr "%s() fehlgeschlagen: %m" #: ../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:208 utils/misc/ps_status.c:216 +#: ../common/psprintf.c:145 ../port/path.c:709 ../port/path.c:747 +#: ../port/path.c:764 utils/misc/ps_status.c:208 utils/misc/ps_status.c:216 #: utils/misc/ps_status.c:246 utils/misc/ps_status.c:254 #, c-format msgid "out of memory\n" @@ -237,23 +237,23 @@ msgstr "kann NULL-Zeiger nicht kopieren (interner Fehler)\n" #: ../common/file_utils.c:86 ../common/file_utils.c:446 #: ../common/file_utils.c:450 access/transam/twophase.c:1297 -#: access/transam/xlog.c:11398 access/transam/xlog.c:11436 -#: access/transam/xlog.c:11653 access/transam/xlogarchive.c:110 +#: access/transam/xlog.c:11395 access/transam/xlog.c:11433 +#: access/transam/xlog.c:11650 access/transam/xlogarchive.c:110 #: access/transam/xlogarchive.c:227 commands/copyfrom.c:1536 #: commands/copyto.c:730 commands/extension.c:3471 commands/tablespace.c:805 -#: commands/tablespace.c:894 guc-file.l:1062 replication/basebackup.c:439 -#: replication/basebackup.c:622 replication/basebackup.c:698 -#: replication/logical/snapbuild.c:1653 storage/file/copydir.c:68 -#: storage/file/copydir.c:107 storage/file/fd.c:1871 storage/file/fd.c:1957 -#: storage/file/fd.c:3157 storage/file/fd.c:3360 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 utils/adt/misc.c:348 +#: commands/tablespace.c:894 guc-file.l:1062 postmaster/pgarch.c:696 +#: replication/basebackup.c:439 replication/basebackup.c:622 +#: replication/basebackup.c:698 replication/logical/snapbuild.c:1653 +#: storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1871 +#: storage/file/fd.c:1957 storage/file/fd.c:3157 storage/file/fd.c:3360 +#: 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 utils/adt/misc.c:348 #, c-format msgid "could not stat file \"%s\": %m" msgstr "konnte »stat« für Datei »%s« nicht ausführen: %m" #: ../common/file_utils.c:161 ../common/pgfnames.c:48 commands/tablespace.c:729 -#: commands/tablespace.c:739 postmaster/postmaster.c:1518 +#: commands/tablespace.c:739 postmaster/postmaster.c:1520 #: storage/file/fd.c:2732 storage/file/reinit.c:122 utils/adt/misc.c:263 #: utils/misc/tzparser.c:338 #, c-format @@ -550,7 +550,7 @@ msgstr "Versuche werden für 30 Sekunden wiederholt." msgid "You might have antivirus, backup, or similar software interfering with the database system." msgstr "Möglicherweise stört eine Antivirus-, Datensicherungs- oder ähnliche Software das Datenbanksystem." -#: ../port/path.c:654 +#: ../port/path.c:731 #, c-format msgid "could not get current working directory: %s\n" msgstr "konnte aktuelles Arbeitsverzeichnis nicht ermitteln: %s\n" @@ -581,7 +581,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:1036 access/brin/brin.c:1146 access/gin/ginfast.c:1042 -#: access/transam/xlog.c:11067 access/transam/xlog.c:11604 +#: access/transam/xlog.c:11064 access/transam/xlog.c:11601 #: 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 @@ -771,7 +771,7 @@ msgstr "RESET darf keinen Parameterwert enthalten" msgid "unrecognized parameter namespace \"%s\"" msgstr "unbekannter Parameter-Namensraum »%s«" -#: access/common/reloptions.c:1294 utils/misc/guc.c:12571 +#: access/common/reloptions.c:1294 utils/misc/guc.c:12604 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "Tabellen mit WITH OIDS werden nicht unterstützt" @@ -883,7 +883,7 @@ 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:2169 +#: access/gin/ginutil.c:145 executor/execExpr.c:2177 #: utils/adt/arrayfuncs.c:3873 utils/adt/arrayfuncs.c:6541 #: utils/adt/rowtypes.c:957 #, c-format @@ -971,7 +971,7 @@ msgstr "konnte die für das Zeichenketten-Hashing zu verwendende Sortierfolge ni #: access/hash/hashfunc.c:279 access/hash/hashfunc.c:336 catalog/heap.c:714 #: catalog/heap.c:720 commands/createas.c:206 commands/createas.c:515 -#: commands/indexcmds.c:1964 commands/tablecmds.c:17155 commands/view.c:86 +#: commands/indexcmds.c:1971 commands/tablecmds.c:17155 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:1004 utils/adt/varchar.c:733 @@ -1026,38 +1026,38 @@ 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:2298 +#: access/heap/heapam.c:2299 #, 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:2769 +#: access/heap/heapam.c:2770 #, 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:2815 +#: access/heap/heapam.c:2816 #, c-format msgid "attempted to delete invisible tuple" msgstr "Versuch ein unsichtbares Tupel zu löschen" -#: access/heap/heapam.c:3261 access/heap/heapam.c:6486 access/index/genam.c:816 +#: access/heap/heapam.c:3262 access/heap/heapam.c:6529 access/index/genam.c:816 #, 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:3406 +#: access/heap/heapam.c:3449 #, c-format msgid "attempted to update invisible tuple" msgstr "Versuch ein unsichtbares Tupel zu aktualisieren" -#: access/heap/heapam.c:4893 access/heap/heapam.c:4931 -#: access/heap/heapam.c:5196 access/heap/heapam_handler.c:457 +#: access/heap/heapam.c:4936 access/heap/heapam.c:4974 +#: access/heap/heapam.c:5239 access/heap/heapam_handler.c:457 #, 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.c:6299 commands/trigger.c:3122 +#: access/heap/heapam.c:6342 commands/trigger.c:3122 #: executor/nodeModifyTable.c:1968 executor/nodeModifyTable.c:2058 #, c-format msgid "tuple to be updated was already modified by an operation triggered by the current command" @@ -1079,12 +1079,12 @@ 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:1013 access/heap/rewriteheap.c:1131 -#: access/transam/timeline.c:329 access/transam/timeline.c:485 +#: access/transam/timeline.c:329 access/transam/timeline.c:481 #: access/transam/xlog.c:3354 access/transam/xlog.c:3545 -#: access/transam/xlog.c:4762 access/transam/xlog.c:11413 -#: access/transam/xlog.c:11451 access/transam/xlog.c:11856 -#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4633 -#: postmaster/postmaster.c:5671 replication/logical/origin.c:587 +#: access/transam/xlog.c:4759 access/transam/xlog.c:11410 +#: access/transam/xlog.c:11448 access/transam/xlog.c:11853 +#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4634 +#: postmaster/postmaster.c:5673 replication/logical/origin.c:587 #: replication/slot.c:1551 storage/file/copydir.c:167 storage/smgr/md.c:218 #: utils/time/snapmgr.c:1261 #, c-format @@ -1097,16 +1097,16 @@ msgid "could not truncate file \"%s\" to %u: %m" msgstr "konnte Datei »%s« nicht auf %u kürzen: %m" #: access/heap/rewriteheap.c:1159 access/transam/timeline.c:384 -#: access/transam/timeline.c:424 access/transam/timeline.c:502 +#: access/transam/timeline.c:424 access/transam/timeline.c:498 #: access/transam/xlog.c:3426 access/transam/xlog.c:3601 -#: access/transam/xlog.c:4774 postmaster/postmaster.c:4643 -#: postmaster/postmaster.c:4653 replication/logical/origin.c:599 +#: access/transam/xlog.c:4771 postmaster/postmaster.c:4644 +#: postmaster/postmaster.c:4654 replication/logical/origin.c:599 #: replication/logical/origin.c:641 replication/logical/origin.c:660 #: replication/logical/snapbuild.c:1750 replication/slot.c:1586 #: storage/file/buffile.c:506 storage/file/copydir.c:207 -#: utils/init/miscinit.c:1434 utils/init/miscinit.c:1445 -#: utils/init/miscinit.c:1453 utils/misc/guc.c:8391 utils/misc/guc.c:8422 -#: utils/misc/guc.c:10349 utils/misc/guc.c:10363 utils/time/snapmgr.c:1266 +#: utils/init/miscinit.c:1478 utils/init/miscinit.c:1489 +#: utils/init/miscinit.c:1497 utils/misc/guc.c:8430 utils/misc/guc.c:8461 +#: utils/misc/guc.c:10388 utils/misc/guc.c:10402 utils/time/snapmgr.c:1266 #: utils/time/snapmgr.c:1273 #, c-format msgid "could not write to file \"%s\": %m" @@ -1245,8 +1245,8 @@ msgid_plural "%u frozen pages.\n" msgstr[0] "%u eingefrorene Seite.\n" msgstr[1] "%u eingefrorene Seiten.\n" -#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4128 -#: commands/indexcmds.c:4147 +#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4135 +#: commands/indexcmds.c:4154 #, c-format msgid "%s." msgstr "%s." @@ -1403,7 +1403,7 @@ msgid "cannot access index \"%s\" while it is being reindexed" msgstr "auf Index »%s« kann nicht zugegriffen werden, während er reindiziert wird" #: access/index/indexam.c:208 catalog/objectaddress.c:1355 -#: commands/indexcmds.c:2792 commands/tablecmds.c:267 commands/tablecmds.c:291 +#: commands/indexcmds.c:2799 commands/tablecmds.c:267 commands/tablecmds.c:291 #: commands/tablecmds.c:16851 commands/tablecmds.c:18645 #, c-format msgid "\"%s\" is not an index" @@ -1517,7 +1517,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:12495 +#: access/table/tableamapi.c:122 utils/misc/guc.c:12528 #, c-format msgid "%s is too long (maximum %d characters)." msgstr "%s ist zu lang (maximal %d Zeichen)." @@ -1666,36 +1666,36 @@ msgstr "kann nicht bis MultiXact %u trunkieren, weil sie nicht auf der Festplatt msgid "invalid MultiXactId: %u" msgstr "ungültige MultiXactId: %u" -#: access/transam/parallel.c:718 access/transam/parallel.c:837 +#: access/transam/parallel.c:737 access/transam/parallel.c:856 #, c-format msgid "parallel worker failed to initialize" msgstr "Initialisierung von parallelem Arbeitsprozess fehlgeschlagen" -#: access/transam/parallel.c:719 access/transam/parallel.c:838 +#: access/transam/parallel.c:738 access/transam/parallel.c:857 #, 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:899 +#: access/transam/parallel.c:918 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "Postmaster beendete während einer parallelen Transaktion" -#: access/transam/parallel.c:1086 +#: access/transam/parallel.c:1105 #, c-format msgid "lost connection to parallel worker" msgstr "Verbindung mit parallelem Arbeitsprozess verloren" -#: access/transam/parallel.c:1152 access/transam/parallel.c:1154 +#: access/transam/parallel.c:1171 access/transam/parallel.c:1173 msgid "parallel worker" msgstr "paralleler Arbeitsprozess" -#: access/transam/parallel.c:1307 +#: access/transam/parallel.c:1326 #, c-format msgid "could not map dynamic shared memory segment" msgstr "konnte dynamisches Shared-Memory-Segment nicht mappen" -#: access/transam/parallel.c:1312 +#: access/transam/parallel.c:1331 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "ungültige magische Zahl in dynamischem Shared-Memory-Segment" @@ -1793,7 +1793,7 @@ msgstr "ungültige Daten in History-Datei »%s«" 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:597 +#: access/transam/timeline.c:589 #, c-format msgid "requested timeline %u is not in this server's history" msgstr "angeforderte Zeitleiste %u ist nicht in der History dieses Servers" @@ -1895,7 +1895,7 @@ 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:1400 access/transam/xlog.c:6696 +#: access/transam/twophase.c:1400 access/transam/xlog.c:6693 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Fehlgeschlagen beim Anlegen eines WAL-Leseprozessors." @@ -2137,438 +2137,438 @@ msgstr "konnte nicht in Logdatei %s bei Position %u, Länge %zu schreiben: %m" msgid "This is known to fail occasionally during archive recovery, where it is harmless." msgstr "Es ist bekannt, dass dies gelegentlich während der Archivwiederherstellung fehlschlägt, ist da aber harmlos." -#: access/transam/xlog.c:4017 access/transam/xlogutils.c:798 +#: access/transam/xlog.c:4014 access/transam/xlogutils.c:798 #: replication/walsender.c:2557 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "das angeforderte WAL-Segment %s wurde schon entfernt" -#: access/transam/xlog.c:4292 +#: access/transam/xlog.c:4289 #, c-format msgid "could not rename file \"%s\": %m" msgstr "konnte Datei »%s« nicht umbenennen: %m" -#: access/transam/xlog.c:4334 access/transam/xlog.c:4344 +#: access/transam/xlog.c:4331 access/transam/xlog.c:4341 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "benötigtes WAL-Verzeichnis »%s« existiert nicht" -#: access/transam/xlog.c:4350 +#: access/transam/xlog.c:4347 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "erzeuge fehlendes WAL-Verzeichnis »%s«" -#: access/transam/xlog.c:4353 commands/dbcommands.c:2295 +#: access/transam/xlog.c:4350 commands/dbcommands.c:2295 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "konnte fehlendes Verzeichnis »%s« nicht erzeugen: %m" -#: access/transam/xlog.c:4475 +#: access/transam/xlog.c:4472 #, 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:4613 +#: access/transam/xlog.c:4610 #, 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:4627 +#: access/transam/xlog.c:4624 #, 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:4646 +#: access/transam/xlog.c:4643 #, c-format msgid "new target timeline is %u" msgstr "neue Zielzeitleiste ist %u" -#: access/transam/xlog.c:4682 +#: access/transam/xlog.c:4679 #, c-format msgid "could not generate secret authorization token" msgstr "konnte geheimes Autorisierungstoken nicht erzeugen" -#: access/transam/xlog.c:4841 access/transam/xlog.c:4850 -#: access/transam/xlog.c:4874 access/transam/xlog.c:4881 -#: access/transam/xlog.c:4888 access/transam/xlog.c:4893 -#: access/transam/xlog.c:4900 access/transam/xlog.c:4907 -#: access/transam/xlog.c:4914 access/transam/xlog.c:4921 -#: access/transam/xlog.c:4928 access/transam/xlog.c:4935 -#: access/transam/xlog.c:4944 access/transam/xlog.c:4951 -#: utils/init/miscinit.c:1591 +#: access/transam/xlog.c:4838 access/transam/xlog.c:4847 +#: access/transam/xlog.c:4871 access/transam/xlog.c:4878 +#: access/transam/xlog.c:4885 access/transam/xlog.c:4890 +#: access/transam/xlog.c:4897 access/transam/xlog.c:4904 +#: access/transam/xlog.c:4911 access/transam/xlog.c:4918 +#: access/transam/xlog.c:4925 access/transam/xlog.c:4932 +#: access/transam/xlog.c:4941 access/transam/xlog.c:4948 +#: utils/init/miscinit.c:1635 #, c-format msgid "database files are incompatible with server" msgstr "Datenbankdateien sind inkompatibel mit Server" -#: access/transam/xlog.c:4842 +#: access/transam/xlog.c:4839 #, 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:4846 +#: access/transam/xlog.c:4843 #, 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:4851 +#: access/transam/xlog.c:4848 #, 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:4854 access/transam/xlog.c:4878 -#: access/transam/xlog.c:4885 access/transam/xlog.c:4890 +#: access/transam/xlog.c:4851 access/transam/xlog.c:4875 +#: access/transam/xlog.c:4882 access/transam/xlog.c:4887 #, 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:4865 +#: access/transam/xlog.c:4862 #, c-format msgid "incorrect checksum in control file" msgstr "falsche Prüfsumme in Kontrolldatei" -#: access/transam/xlog.c:4875 +#: access/transam/xlog.c:4872 #, 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:4882 +#: access/transam/xlog.c:4879 #, 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:4889 +#: access/transam/xlog.c:4886 #, 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:4894 +#: access/transam/xlog.c:4891 #, 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:4897 access/transam/xlog.c:4904 -#: access/transam/xlog.c:4911 access/transam/xlog.c:4918 -#: access/transam/xlog.c:4925 access/transam/xlog.c:4932 -#: access/transam/xlog.c:4939 access/transam/xlog.c:4947 -#: access/transam/xlog.c:4954 +#: access/transam/xlog.c:4894 access/transam/xlog.c:4901 +#: access/transam/xlog.c:4908 access/transam/xlog.c:4915 +#: access/transam/xlog.c:4922 access/transam/xlog.c:4929 +#: access/transam/xlog.c:4936 access/transam/xlog.c:4944 +#: access/transam/xlog.c:4951 #, 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:4901 +#: access/transam/xlog.c:4898 #, 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:4908 +#: access/transam/xlog.c:4905 #, 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:4915 +#: access/transam/xlog.c:4912 #, 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:4922 +#: access/transam/xlog.c:4919 #, 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:4929 +#: access/transam/xlog.c:4926 #, 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:4936 +#: access/transam/xlog.c:4933 #, 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:4945 +#: access/transam/xlog.c:4942 #, 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:4952 +#: access/transam/xlog.c:4949 #, 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:4961 +#: access/transam/xlog.c:4958 #, 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:4973 +#: access/transam/xlog.c:4970 #, 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:4977 +#: access/transam/xlog.c:4974 #, 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:5411 +#: access/transam/xlog.c:5408 #, 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:5419 +#: access/transam/xlog.c:5416 #, 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:5425 +#: access/transam/xlog.c:5422 #, 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:5486 +#: access/transam/xlog.c:5483 #, 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:5551 +#: access/transam/xlog.c:5548 #, 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:5568 +#: access/transam/xlog.c:5565 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "weder primary_conninfo noch restore_command angegeben" -#: access/transam/xlog.c:5569 +#: access/transam/xlog.c:5566 #, 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:5577 +#: access/transam/xlog.c:5574 #, 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:5615 +#: access/transam/xlog.c:5612 #, c-format msgid "recovery target timeline %u does not exist" msgstr "recovery_target_timeline %u existiert nicht" -#: access/transam/xlog.c:5737 +#: access/transam/xlog.c:5734 #, c-format msgid "archive recovery complete" msgstr "Wiederherstellung aus Archiv abgeschlossen" -#: access/transam/xlog.c:5803 access/transam/xlog.c:6079 +#: access/transam/xlog.c:5800 access/transam/xlog.c:6076 #, c-format msgid "recovery stopping after reaching consistency" msgstr "Wiederherstellung beendet nachdem Konsistenz erreicht wurde" -#: access/transam/xlog.c:5824 +#: access/transam/xlog.c:5821 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "Wiederherstellung beendet vor WAL-Position (LSN) »%X/%X«" -#: access/transam/xlog.c:5914 +#: access/transam/xlog.c:5911 #, 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:5921 +#: access/transam/xlog.c:5918 #, 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:5974 +#: access/transam/xlog.c:5971 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "Wiederherstellung beendet bei Restore-Punkt »%s«, Zeit %s" -#: access/transam/xlog.c:5992 +#: access/transam/xlog.c:5989 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "Wiederherstellung beendet nach WAL-Position (LSN) »%X/%X«" -#: access/transam/xlog.c:6059 +#: access/transam/xlog.c:6056 #, 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:6067 +#: access/transam/xlog.c:6064 #, 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:6112 +#: access/transam/xlog.c:6109 #, c-format msgid "pausing at the end of recovery" msgstr "pausiere am Ende der Wiederherstellung" -#: access/transam/xlog.c:6113 +#: access/transam/xlog.c:6110 #, 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:6116 access/transam/xlog.c:6398 +#: access/transam/xlog.c:6113 access/transam/xlog.c:6395 #, c-format msgid "recovery has paused" msgstr "Wiederherstellung wurde pausiert" -#: access/transam/xlog.c:6117 +#: access/transam/xlog.c:6114 #, 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:6389 +#: access/transam/xlog.c:6386 #, 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:6390 access/transam/xlog.c:6417 -#: access/transam/xlog.c:6447 +#: access/transam/xlog.c:6387 access/transam/xlog.c:6414 +#: access/transam/xlog.c:6444 #, 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:6399 +#: access/transam/xlog.c:6396 #, 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:6400 +#: access/transam/xlog.c:6397 #, 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:6411 +#: access/transam/xlog.c:6408 #, 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:6421 +#: access/transam/xlog.c:6418 #, 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:6445 +#: access/transam/xlog.c:6442 #, c-format msgid "recovery aborted because of insufficient parameter settings" msgstr "Wiederherstellung abgebrochen wegen unzureichender Parametereinstellungen" -#: access/transam/xlog.c:6451 +#: access/transam/xlog.c:6448 #, 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:6473 +#: access/transam/xlog.c:6470 #, 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:6474 +#: access/transam/xlog.c:6471 #, 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:6475 +#: access/transam/xlog.c:6472 #, 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:6544 +#: access/transam/xlog.c:6541 #, c-format msgid "control file contains invalid checkpoint location" msgstr "Kontrolldatei enthält ungültige Checkpoint-Position" -#: access/transam/xlog.c:6555 +#: access/transam/xlog.c:6552 #, c-format msgid "database system was shut down at %s" msgstr "Datenbanksystem wurde am %s heruntergefahren" -#: access/transam/xlog.c:6561 +#: access/transam/xlog.c:6558 #, 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:6567 +#: access/transam/xlog.c:6564 #, 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:6573 +#: access/transam/xlog.c:6570 #, 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:6575 +#: access/transam/xlog.c:6572 #, 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:6581 +#: access/transam/xlog.c:6578 #, 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:6583 +#: access/transam/xlog.c:6580 #, 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:6589 +#: access/transam/xlog.c:6586 #, 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:6595 +#: access/transam/xlog.c:6592 #, c-format msgid "control file contains invalid database cluster state" msgstr "Kontrolldatei enthält ungültigen Datenbankclusterstatus" -#: access/transam/xlog.c:6652 +#: access/transam/xlog.c:6649 #, c-format msgid "entering standby mode" msgstr "Standby-Modus eingeschaltet" -#: access/transam/xlog.c:6655 +#: access/transam/xlog.c:6652 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "starte Point-in-Time-Recovery bis XID %u" -#: access/transam/xlog.c:6659 +#: access/transam/xlog.c:6656 #, c-format msgid "starting point-in-time recovery to %s" msgstr "starte Point-in-Time-Recovery bis %s" -#: access/transam/xlog.c:6663 +#: access/transam/xlog.c:6660 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "starte Point-in-Time-Recovery bis »%s«" -#: access/transam/xlog.c:6667 +#: access/transam/xlog.c:6664 #, 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:6671 +#: access/transam/xlog.c:6668 #, 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:6674 +#: access/transam/xlog.c:6671 #, c-format msgid "starting archive recovery" msgstr "starte Wiederherstellung aus Archiv" -#: access/transam/xlog.c:6748 +#: access/transam/xlog.c:6745 #, 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:6749 access/transam/xlog.c:6759 +#: access/transam/xlog.c:6746 access/transam/xlog.c:6756 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" @@ -2579,300 +2579,300 @@ 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:6758 +#: access/transam/xlog.c:6755 #, c-format msgid "could not locate required checkpoint record" msgstr "konnte den nötigen Checkpoint-Datensatz nicht finden" -#: access/transam/xlog.c:6787 commands/tablespace.c:665 +#: access/transam/xlog.c:6784 commands/tablespace.c:665 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "konnte symbolische Verknüpfung »%s« nicht erstellen: %m" -#: access/transam/xlog.c:6819 access/transam/xlog.c:6825 +#: access/transam/xlog.c:6816 access/transam/xlog.c:6822 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "ignoriere Datei »%s«, weil keine Datei »%s« existiert" -#: access/transam/xlog.c:6821 access/transam/xlog.c:12389 +#: access/transam/xlog.c:6818 access/transam/xlog.c:12386 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "Datei »%s« wurde in »%s« umbenannt." -#: access/transam/xlog.c:6827 +#: access/transam/xlog.c:6824 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "Konnte Datei »%s« nicht in »%s« umbenennen: %m." -#: access/transam/xlog.c:6878 +#: access/transam/xlog.c:6875 #, c-format msgid "could not locate a valid checkpoint record" msgstr "konnte keinen gültigen Checkpoint-Datensatz finden" -#: access/transam/xlog.c:6916 +#: access/transam/xlog.c:6913 #, 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:6918 +#: access/transam/xlog.c:6915 #, 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:6932 +#: access/transam/xlog.c:6929 #, 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:6962 +#: access/transam/xlog.c:6959 #, c-format msgid "invalid next transaction ID" msgstr "ungültige nächste Transaktions-ID" -#: access/transam/xlog.c:7062 +#: access/transam/xlog.c:7059 #, c-format msgid "invalid redo in checkpoint record" msgstr "ungültiges Redo im Checkpoint-Datensatz" -#: access/transam/xlog.c:7073 +#: access/transam/xlog.c:7070 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "ungültiger Redo-Datensatz im Shutdown-Checkpoint" -#: access/transam/xlog.c:7113 +#: access/transam/xlog.c:7110 #, 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:7117 +#: access/transam/xlog.c:7114 #, 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:7164 +#: access/transam/xlog.c:7161 #, 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:7165 +#: access/transam/xlog.c:7162 #, 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:7392 +#: access/transam/xlog.c:7389 #, c-format msgid "redo starts at %X/%X" msgstr "Redo beginnt bei %X/%X" -#: access/transam/xlog.c:7617 +#: access/transam/xlog.c:7614 #, 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:7655 +#: access/transam/xlog.c:7652 #, c-format msgid "redo done at %X/%X system usage: %s" msgstr "Redo fertig bei %X/%X Systembenutzung: %s" -#: access/transam/xlog.c:7661 +#: access/transam/xlog.c:7658 #, c-format msgid "last completed transaction was at log time %s" msgstr "letzte vollständige Transaktion war bei Logzeit %s" -#: access/transam/xlog.c:7670 +#: access/transam/xlog.c:7667 #, c-format msgid "redo is not required" msgstr "Redo nicht nötig" -#: access/transam/xlog.c:7682 +#: access/transam/xlog.c:7679 #, c-format msgid "recovery ended before configured recovery target was reached" msgstr "Wiederherstellung endete bevor das konfigurierte Wiederherstellungsziel erreicht wurde" -#: access/transam/xlog.c:7766 access/transam/xlog.c:7770 +#: access/transam/xlog.c:7763 access/transam/xlog.c:7767 #, c-format msgid "WAL ends before end of online backup" msgstr "WAL endet vor dem Ende der Online-Sicherung" -#: access/transam/xlog.c:7767 +#: access/transam/xlog.c:7764 #, 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:7771 +#: access/transam/xlog.c:7768 #, 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:7774 +#: access/transam/xlog.c:7771 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL endet vor einem konsistenten Wiederherstellungspunkt" -#: access/transam/xlog.c:7809 +#: access/transam/xlog.c:7806 #, c-format msgid "selected new timeline ID: %u" msgstr "gewählte neue Zeitleisten-ID: %u" -#: access/transam/xlog.c:8277 +#: access/transam/xlog.c:8274 #, c-format msgid "unexpected directory entry \"%s\" found in %s" msgstr "unerwarteter Verzeichniseintrag »%s« in %s gefunden" -#: access/transam/xlog.c:8279 +#: access/transam/xlog.c:8276 #, c-format msgid "All directory entries in pg_tblspc/ should be symbolic links." msgstr "Alle Verzeichniseinträge in pg_tblspc/ sollten symbolische Verknüpfungen sein." -#: access/transam/xlog.c:8280 +#: access/transam/xlog.c:8277 #, c-format msgid "Remove those directories, or set allow_in_place_tablespaces to ON transiently to let recovery complete." msgstr "Entfernen Sie diese Verzeichnisse oder setzen Sie allow_in_place_tablespaces vorrübergehend auf ON, damit die Wiederherstellung abschließen kann." -#: access/transam/xlog.c:8364 +#: access/transam/xlog.c:8361 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "konsistenter Wiederherstellungszustand erreicht bei %X/%X" -#: access/transam/xlog.c:8573 +#: access/transam/xlog.c:8570 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "ungültige primäre Checkpoint-Verknüpfung in Kontrolldatei" -#: access/transam/xlog.c:8577 +#: access/transam/xlog.c:8574 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "ungültige Checkpoint-Verknüpfung in backup_label-Datei" -#: access/transam/xlog.c:8595 +#: access/transam/xlog.c:8592 #, c-format msgid "invalid primary checkpoint record" msgstr "ungültiger primärer Checkpoint-Datensatz" -#: access/transam/xlog.c:8599 +#: access/transam/xlog.c:8596 #, c-format msgid "invalid checkpoint record" msgstr "ungültiger Checkpoint-Datensatz" -#: access/transam/xlog.c:8610 +#: access/transam/xlog.c:8607 #, 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:8614 +#: access/transam/xlog.c:8611 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "ungültige Resource-Manager-ID im Checkpoint-Datensatz" -#: access/transam/xlog.c:8627 +#: access/transam/xlog.c:8624 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "ungültige xl_info im primären Checkpoint-Datensatz" -#: access/transam/xlog.c:8631 +#: access/transam/xlog.c:8628 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "ungültige xl_info im Checkpoint-Datensatz" -#: access/transam/xlog.c:8642 +#: access/transam/xlog.c:8639 #, c-format msgid "invalid length of primary checkpoint record" msgstr "ungültige Länge des primären Checkpoint-Datensatzes" -#: access/transam/xlog.c:8646 +#: access/transam/xlog.c:8643 #, c-format msgid "invalid length of checkpoint record" msgstr "ungültige Länge des Checkpoint-Datensatzes" -#: access/transam/xlog.c:8827 +#: access/transam/xlog.c:8824 #, c-format msgid "shutting down" msgstr "fahre herunter" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:8866 +#: access/transam/xlog.c:8863 #, 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:8878 +#: access/transam/xlog.c:8875 #, 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:8938 +#: access/transam/xlog.c:8935 #, 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 "Restart-Punkt komplett: %d Puffer geschrieben (%.1f%%); %d WAL-Datei(en) hinzugefügt, %d entfernt, %d wiederverwendet; Schreiben=%ld,%03d s, Sync=%ld,%03d s, gesamt=%ld,%03d s; sync. Dateien=%d, längste=%ld,%03d s, Durchschnitt=%ld.%03d s; Entfernung=%d kB, Schätzung=%d kB" -#: access/transam/xlog.c:8958 +#: access/transam/xlog.c:8955 #, 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 "Checkpoint komplett: %d Puffer geschrieben (%.1f%%); %d WAL-Datei(en) hinzugefügt, %d entfernt, %d wiederverwendet; Schreiben=%ld,%03d s, Sync=%ld,%03d s, gesamt=%ld,%03d s; sync. Dateien=%d, längste=%ld,%03d s, Durchschnitt=%ld.%03d s; Entfernung=%d kB, Schätzung=%d kB" -#: access/transam/xlog.c:9409 +#: access/transam/xlog.c:9406 #, 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:9942 +#: access/transam/xlog.c:9939 #, c-format msgid "recovery restart point at %X/%X" msgstr "Recovery-Restart-Punkt bei %X/%X" -#: access/transam/xlog.c:9944 +#: access/transam/xlog.c:9941 #, 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:10190 +#: access/transam/xlog.c:10187 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "Restore-Punkt »%s« erzeugt bei %X/%X" -#: access/transam/xlog.c:10335 +#: access/transam/xlog.c:10332 #, 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:10344 +#: access/transam/xlog.c:10341 #, 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:10360 +#: access/transam/xlog.c:10357 #, 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:10435 +#: access/transam/xlog.c:10432 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "Online-Sicherung wurde storniert, Wiederherstellung kann nicht fortgesetzt werden" -#: access/transam/xlog.c:10492 access/transam/xlog.c:10548 -#: access/transam/xlog.c:10578 +#: access/transam/xlog.c:10489 access/transam/xlog.c:10545 +#: access/transam/xlog.c:10575 #, 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:10736 +#: access/transam/xlog.c:10733 #, c-format msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s" msgstr "fehlender Contrecord bei %X/%X erfolgreich übersprungen, überschrieben am %s" -#: access/transam/xlog.c:10951 +#: access/transam/xlog.c:10948 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "konnte Write-Through-Logdatei »%s« nicht fsyncen: %m" -#: access/transam/xlog.c:10957 +#: access/transam/xlog.c:10954 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "konnte Datei »%s« nicht fdatasyncen: %m" -#: access/transam/xlog.c:11068 access/transam/xlog.c:11605 +#: access/transam/xlog.c:11065 access/transam/xlog.c:11602 #: 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 @@ -2880,186 +2880,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:11077 access/transam/xlog.c:11614 +#: access/transam/xlog.c:11074 access/transam/xlog.c:11611 #, 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:11078 access/transam/xlog.c:11615 +#: access/transam/xlog.c:11075 access/transam/xlog.c:11612 #: 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:11083 +#: access/transam/xlog.c:11080 #, c-format msgid "backup label too long (max %d bytes)" msgstr "Backup-Label zu lang (maximal %d Bytes)" -#: access/transam/xlog.c:11120 access/transam/xlog.c:11404 -#: access/transam/xlog.c:11442 +#: access/transam/xlog.c:11117 access/transam/xlog.c:11401 +#: access/transam/xlog.c:11439 #, c-format msgid "a backup is already in progress" msgstr "ein Backup läuft bereits" -#: access/transam/xlog.c:11121 +#: access/transam/xlog.c:11118 #, 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:11217 +#: access/transam/xlog.c:11214 #, 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:11219 access/transam/xlog.c:11810 +#: access/transam/xlog.c:11216 access/transam/xlog.c:11807 #, 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:11303 replication/basebackup.c:1433 +#: access/transam/xlog.c:11300 replication/basebackup.c:1433 #: utils/adt/misc.c:367 #, 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:11353 commands/tablespace.c:385 +#: access/transam/xlog.c:11350 commands/tablespace.c:385 #: commands/tablespace.c:561 replication/basebackup.c:1448 utils/adt/misc.c:375 #, c-format msgid "tablespaces are not supported on this platform" msgstr "Tablespaces werden auf dieser Plattform nicht unterstützt" -#: access/transam/xlog.c:11405 access/transam/xlog.c:11443 +#: access/transam/xlog.c:11402 access/transam/xlog.c:11440 #, 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:11630 +#: access/transam/xlog.c:11627 #, c-format msgid "exclusive backup not in progress" msgstr "es läuft kein exklusives Backup" -#: access/transam/xlog.c:11657 +#: access/transam/xlog.c:11654 #, c-format msgid "a backup is not in progress" msgstr "es läuft kein Backup" -#: access/transam/xlog.c:11743 access/transam/xlog.c:11756 -#: access/transam/xlog.c:12147 access/transam/xlog.c:12153 -#: access/transam/xlog.c:12201 access/transam/xlog.c:12281 -#: access/transam/xlog.c:12305 access/transam/xlogfuncs.c:733 +#: access/transam/xlog.c:11740 access/transam/xlog.c:11753 +#: access/transam/xlog.c:12144 access/transam/xlog.c:12150 +#: access/transam/xlog.c:12198 access/transam/xlog.c:12278 +#: access/transam/xlog.c:12302 access/transam/xlogfuncs.c:733 #, c-format msgid "invalid data in file \"%s\"" msgstr "ungültige Daten in Datei »%s«" -#: access/transam/xlog.c:11760 replication/basebackup.c:1287 +#: access/transam/xlog.c:11757 replication/basebackup.c:1287 #, 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:11761 replication/basebackup.c:1288 +#: access/transam/xlog.c:11758 replication/basebackup.c:1288 #, 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:11808 +#: access/transam/xlog.c:11805 #, 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:11928 +#: access/transam/xlog.c:11925 #, 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:11940 +#: access/transam/xlog.c:11937 #, 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:11942 +#: access/transam/xlog.c:11939 #, 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:11949 +#: access/transam/xlog.c:11946 #, c-format msgid "all required WAL segments have been archived" msgstr "alle benötigten WAL-Segmente wurden archiviert" -#: access/transam/xlog.c:11953 +#: access/transam/xlog.c:11950 #, 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:12008 +#: access/transam/xlog.c:12005 #, 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:12202 +#: access/transam/xlog.c:12199 #, 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:12330 +#: access/transam/xlog.c:12327 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "WAL-Redo bei %X/%X für %s" -#: access/transam/xlog.c:12378 +#: access/transam/xlog.c:12375 #, c-format msgid "online backup mode was not canceled" msgstr "Online-Sicherungsmodus wurde nicht storniert" -#: access/transam/xlog.c:12379 +#: access/transam/xlog.c:12376 #, 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:12388 access/transam/xlog.c:12400 -#: access/transam/xlog.c:12410 +#: access/transam/xlog.c:12385 access/transam/xlog.c:12397 +#: access/transam/xlog.c:12407 #, c-format msgid "online backup mode canceled" msgstr "Online-Sicherungsmodus storniert" -#: access/transam/xlog.c:12401 +#: access/transam/xlog.c:12398 #, 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:12411 +#: access/transam/xlog.c:12408 #, 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:12544 access/transam/xlogutils.c:967 +#: access/transam/xlog.c:12541 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:12550 access/transam/xlogutils.c:974 +#: access/transam/xlog.c:12547 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:13115 +#: access/transam/xlog.c:13112 #, c-format msgid "WAL receiver process shutdown requested" msgstr "Herunterfahren des WAL-Receiver-Prozesses verlangt" -#: access/transam/xlog.c:13210 +#: access/transam/xlog.c:13207 #, c-format msgid "received promote request" msgstr "Anforderung zum Befördern empfangen" -#: access/transam/xlog.c:13223 +#: access/transam/xlog.c:13220 #, c-format msgid "promote trigger file found: %s" msgstr "Promote-Triggerdatei gefunden: %s" -#: access/transam/xlog.c:13231 +#: access/transam/xlog.c:13228 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "konnte »stat« für Promote-Triggerdatei »%s« nicht ausführen: %m" @@ -3092,12 +3092,12 @@ msgstr "konnte Datei »%s« nicht aus Archiv wiederherstellen: %s" msgid "%s \"%s\": %s" msgstr "%s »%s«: %s" -#: access/transam/xlogarchive.c:479 access/transam/xlogarchive.c:543 +#: access/transam/xlogarchive.c:479 access/transam/xlogarchive.c:557 #, c-format msgid "could not create archive status file \"%s\": %m" msgstr "konnte Archivstatusdatei »%s« nicht erstellen: %m" -#: access/transam/xlogarchive.c:487 access/transam/xlogarchive.c:551 +#: access/transam/xlogarchive.c:487 access/transam/xlogarchive.c:565 #, c-format msgid "could not write archive status file \"%s\": %m" msgstr "konnte Archivstatusdatei »%s« nicht schreiben: %m" @@ -3120,8 +3120,8 @@ msgstr "Meinten Sie pg_stop_backup('f')?" #: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1311 #: commands/event_trigger.c:1869 commands/extension.c:1966 #: commands/extension.c:2074 commands/extension.c:2359 commands/prepare.c:713 -#: executor/execExpr.c:2510 executor/execSRF.c:738 executor/functions.c:1074 -#: foreign/foreign.c:530 libpq/hba.c:2722 replication/logical/launcher.c:937 +#: executor/execExpr.c:2518 executor/execSRF.c:738 executor/functions.c:1074 +#: foreign/foreign.c:530 libpq/hba.c:2726 replication/logical/launcher.c:937 #: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 #: replication/slotfuncs.c:255 replication/walsender.c:3328 #: storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:507 @@ -3130,7 +3130,7 @@ msgstr "Meinten Sie pg_stop_backup('f')?" #: utils/adt/jsonfuncs.c:2353 utils/adt/jsonfuncs.c:3814 #: utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:219 utils/adt/pgstatfuncs.c:477 #: utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 -#: utils/adt/varlena.c:4821 utils/fmgr/funcapi.c:74 utils/misc/guc.c:10049 +#: utils/adt/varlena.c:4821 utils/fmgr/funcapi.c:74 utils/misc/guc.c:10088 #: utils/mmgr/portalmem.c:1145 #, c-format msgid "set-valued function called in context that cannot accept a set" @@ -3139,13 +3139,13 @@ 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:1970 #: commands/extension.c:2078 commands/extension.c:2363 commands/prepare.c:717 -#: foreign/foreign.c:535 libpq/hba.c:2726 replication/logical/launcher.c:941 +#: foreign/foreign.c:535 libpq/hba.c:2730 replication/logical/launcher.c:941 #: replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 #: replication/slotfuncs.c:259 replication/walsender.c:3332 #: 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:223 #: utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 -#: utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4825 utils/misc/guc.c:10053 +#: utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4825 utils/misc/guc.c:10092 #: utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1149 #, c-format msgid "materialize mode required, but it is not allowed in this context" @@ -3352,12 +3352,12 @@ 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:847 tcop/postgres.c:3969 +#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3974 #, c-format msgid "--%s requires a value" msgstr "--%s benötigt einen Wert" -#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3974 +#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3979 #, c-format msgid "-c %s requires a value" msgstr "-c %s benötigt einen Wert" @@ -3544,9 +3544,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:402 -#: replication/pgoutput/pgoutput.c:190 replication/pgoutput/pgoutput.c:211 -#: replication/pgoutput/pgoutput.c:225 replication/pgoutput/pgoutput.c:235 -#: replication/pgoutput/pgoutput.c:245 replication/walsender.c:883 +#: replication/pgoutput/pgoutput.c:199 replication/pgoutput/pgoutput.c:220 +#: replication/pgoutput/pgoutput.c:234 replication/pgoutput/pgoutput.c:244 +#: replication/pgoutput/pgoutput.c:254 replication/walsender.c:883 #: replication/walsender.c:894 replication/walsender.c:904 #, c-format msgid "conflicting or redundant options" @@ -4178,9 +4178,9 @@ msgstr "kann %s nicht löschen, weil andere Objekte davon abhängen" #: commands/tablecmds.c:14021 commands/tablespace.c:464 commands/user.c:1095 #: commands/view.c:506 libpq/auth.c:338 replication/syncrep.c:1043 #: storage/lmgr/deadlock.c:1151 storage/lmgr/proc.c:1447 utils/misc/guc.c:7140 -#: utils/misc/guc.c:7176 utils/misc/guc.c:7246 utils/misc/guc.c:11457 -#: utils/misc/guc.c:11491 utils/misc/guc.c:11525 utils/misc/guc.c:11568 -#: utils/misc/guc.c:11610 +#: utils/misc/guc.c:7176 utils/misc/guc.c:7246 utils/misc/guc.c:11490 +#: utils/misc/guc.c:11524 utils/misc/guc.c:11558 utils/misc/guc.c:11601 +#: utils/misc/guc.c:11643 #, c-format msgid "%s" msgstr "%s" @@ -4346,14 +4346,14 @@ msgstr "Dadurch würde die generierte Spalte von ihrem eigenen Wert abhängen." msgid "generation expression is not immutable" msgstr "Generierungsausdruck ist nicht »immutable«" -#: catalog/heap.c:3142 rewrite/rewriteHandler.c:1291 +#: catalog/heap.c:3142 rewrite/rewriteHandler.c:1285 #, 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:3147 commands/prepare.c:368 parser/analyze.c:2695 #: parser/parse_target.c:594 parser/parse_target.c:891 -#: parser/parse_target.c:901 rewrite/rewriteHandler.c:1296 +#: parser/parse_target.c:901 rewrite/rewriteHandler.c:1290 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Sie müssen den Ausdruck umschreiben oder eine Typumwandlung vornehmen." @@ -4449,12 +4449,12 @@ msgstr "DROP INDEX CONCURRENTLY muss die erste Aktion in einer Transaktion sein" msgid "cannot reindex temporary tables of other sessions" msgstr "kann temporäre Tabellen anderer Sitzungen nicht reindizieren" -#: catalog/index.c:3664 commands/indexcmds.c:3548 +#: catalog/index.c:3664 commands/indexcmds.c:3555 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "ungültiger Index einer TOAST-Tabelle kann nicht reindiziert werden" -#: catalog/index.c:3680 commands/indexcmds.c:3428 commands/indexcmds.c:3572 +#: catalog/index.c:3680 commands/indexcmds.c:3435 commands/indexcmds.c:3579 #: commands/tablecmds.c:3282 #, c-format msgid "cannot move system relation \"%s\"" @@ -4471,7 +4471,7 @@ 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:259 catalog/namespace.c:463 catalog/namespace.c:555 -#: commands/trigger.c:5253 +#: commands/trigger.c:5251 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "Verweise auf andere Datenbanken sind nicht implementiert: »%s.%s.%s«" @@ -4607,7 +4607,7 @@ 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:4338 commands/tablespace.c:1211 commands/variable.c:64 -#: tcop/postgres.c:3624 utils/misc/guc.c:11642 utils/misc/guc.c:11720 +#: tcop/postgres.c:3624 utils/misc/guc.c:11675 utils/misc/guc.c:11753 #, c-format msgid "List syntax is invalid." msgstr "Die Listensyntax ist ungültig." @@ -4766,74 +4766,74 @@ msgid "unrecognized object type \"%s\"" msgstr "unbekannter Objekttyp »%s«" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2883 +#: catalog/objectaddress.c:2908 #, c-format msgid "column %s of %s" msgstr "Spalte %s von %s" -#: catalog/objectaddress.c:2898 +#: catalog/objectaddress.c:2923 #, c-format msgid "function %s" msgstr "Funktion %s" -#: catalog/objectaddress.c:2911 +#: catalog/objectaddress.c:2936 #, c-format msgid "type %s" msgstr "Typ %s" -#: catalog/objectaddress.c:2948 +#: catalog/objectaddress.c:2973 #, c-format msgid "cast from %s to %s" msgstr "Typumwandlung von %s in %s" -#: catalog/objectaddress.c:2981 +#: catalog/objectaddress.c:3006 #, c-format msgid "collation %s" msgstr "Sortierfolge %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3012 +#: catalog/objectaddress.c:3037 #, c-format msgid "constraint %s on %s" msgstr "Constraint %s für %s" -#: catalog/objectaddress.c:3018 +#: catalog/objectaddress.c:3043 #, c-format msgid "constraint %s" msgstr "Constraint %s" -#: catalog/objectaddress.c:3050 +#: catalog/objectaddress.c:3075 #, c-format msgid "conversion %s" msgstr "Konversion %s" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:3096 +#: catalog/objectaddress.c:3121 #, c-format msgid "default value for %s" msgstr "Vorgabewert für %s" -#: catalog/objectaddress.c:3110 +#: catalog/objectaddress.c:3135 #, c-format msgid "language %s" msgstr "Sprache %s" -#: catalog/objectaddress.c:3118 +#: catalog/objectaddress.c:3143 #, c-format msgid "large object %u" msgstr "Large Object %u" -#: catalog/objectaddress.c:3131 +#: catalog/objectaddress.c:3156 #, c-format msgid "operator %s" msgstr "Operator %s" -#: catalog/objectaddress.c:3168 +#: catalog/objectaddress.c:3193 #, c-format msgid "operator class %s for access method %s" msgstr "Operatorklasse %s für Zugriffsmethode %s" -#: catalog/objectaddress.c:3196 +#: catalog/objectaddress.c:3221 #, c-format msgid "access method %s" msgstr "Zugriffsmethode %s" @@ -4842,7 +4842,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:3245 +#: catalog/objectaddress.c:3276 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "Operator %d (%s, %s) von %s: %s" @@ -4851,221 +4851,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:3302 +#: catalog/objectaddress.c:3341 #, 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:3354 +#: catalog/objectaddress.c:3395 #, c-format msgid "rule %s on %s" msgstr "Regel %s für %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3400 +#: catalog/objectaddress.c:3441 #, c-format msgid "trigger %s on %s" msgstr "Trigger %s für %s" -#: catalog/objectaddress.c:3420 +#: catalog/objectaddress.c:3461 #, c-format msgid "schema %s" msgstr "Schema %s" -#: catalog/objectaddress.c:3448 +#: catalog/objectaddress.c:3489 #, c-format msgid "statistics object %s" msgstr "Statistikobjekt %s" -#: catalog/objectaddress.c:3479 +#: catalog/objectaddress.c:3520 #, c-format msgid "text search parser %s" msgstr "Textsucheparser %s" -#: catalog/objectaddress.c:3510 +#: catalog/objectaddress.c:3551 #, c-format msgid "text search dictionary %s" msgstr "Textsuchewörterbuch %s" -#: catalog/objectaddress.c:3541 +#: catalog/objectaddress.c:3582 #, c-format msgid "text search template %s" msgstr "Textsuchevorlage %s" -#: catalog/objectaddress.c:3572 +#: catalog/objectaddress.c:3613 #, c-format msgid "text search configuration %s" msgstr "Textsuchekonfiguration %s" -#: catalog/objectaddress.c:3585 +#: catalog/objectaddress.c:3626 #, c-format msgid "role %s" msgstr "Rolle %s" -#: catalog/objectaddress.c:3601 +#: catalog/objectaddress.c:3642 #, c-format msgid "database %s" msgstr "Datenbank %s" -#: catalog/objectaddress.c:3617 +#: catalog/objectaddress.c:3658 #, c-format msgid "tablespace %s" msgstr "Tablespace %s" -#: catalog/objectaddress.c:3628 +#: catalog/objectaddress.c:3669 #, c-format msgid "foreign-data wrapper %s" msgstr "Fremddaten-Wrapper %s" -#: catalog/objectaddress.c:3638 +#: catalog/objectaddress.c:3679 #, c-format msgid "server %s" msgstr "Server %s" -#: catalog/objectaddress.c:3671 +#: catalog/objectaddress.c:3712 #, c-format msgid "user mapping for %s on server %s" msgstr "Benutzerabbildung für %s auf Server %s" -#: catalog/objectaddress.c:3723 +#: catalog/objectaddress.c:3764 #, 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:3727 +#: catalog/objectaddress.c:3768 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "Vorgabeprivilegien für neue Relationen von Rolle %s" -#: catalog/objectaddress.c:3733 +#: catalog/objectaddress.c:3774 #, 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:3737 +#: catalog/objectaddress.c:3778 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "Vorgabeprivilegien für neue Sequenzen von Rolle %s" -#: catalog/objectaddress.c:3743 +#: catalog/objectaddress.c:3784 #, 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:3747 +#: catalog/objectaddress.c:3788 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "Vorgabeprivilegien für neue Funktionen von Rolle %s" -#: catalog/objectaddress.c:3753 +#: catalog/objectaddress.c:3794 #, 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:3757 +#: catalog/objectaddress.c:3798 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "Vorgabeprivilegien für neue Typen von Rolle %s" -#: catalog/objectaddress.c:3763 +#: catalog/objectaddress.c:3804 #, c-format msgid "default privileges on new schemas belonging to role %s" msgstr "Vorgabeprivilegien für neue Schemas von Rolle %s" -#: catalog/objectaddress.c:3770 +#: catalog/objectaddress.c:3811 #, c-format msgid "default privileges belonging to role %s in schema %s" msgstr "Vorgabeprivilegien von Rolle %s in Schema %s" -#: catalog/objectaddress.c:3774 +#: catalog/objectaddress.c:3815 #, c-format msgid "default privileges belonging to role %s" msgstr "Vorgabeprivilegien von Rolle %s" -#: catalog/objectaddress.c:3796 +#: catalog/objectaddress.c:3837 #, c-format msgid "extension %s" msgstr "Erweiterung %s" -#: catalog/objectaddress.c:3813 +#: catalog/objectaddress.c:3854 #, c-format msgid "event trigger %s" msgstr "Ereignistrigger %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3857 +#: catalog/objectaddress.c:3898 #, c-format msgid "policy %s on %s" msgstr "Policy %s für %s" -#: catalog/objectaddress.c:3871 +#: catalog/objectaddress.c:3912 #, c-format msgid "publication %s" msgstr "Publikation %s" #. translator: first %s is, e.g., "table %s" -#: catalog/objectaddress.c:3899 +#: catalog/objectaddress.c:3940 #, c-format msgid "publication of %s in publication %s" msgstr "Publikation von %s in Publikation %s" -#: catalog/objectaddress.c:3912 +#: catalog/objectaddress.c:3953 #, c-format msgid "subscription %s" msgstr "Subskription %s" -#: catalog/objectaddress.c:3933 +#: catalog/objectaddress.c:3974 #, c-format msgid "transform for %s language %s" msgstr "Transformation %s für Sprache %s" -#: catalog/objectaddress.c:4004 +#: catalog/objectaddress.c:4045 #, c-format msgid "table %s" msgstr "Tabelle %s" -#: catalog/objectaddress.c:4009 +#: catalog/objectaddress.c:4050 #, c-format msgid "index %s" msgstr "Index %s" -#: catalog/objectaddress.c:4013 +#: catalog/objectaddress.c:4054 #, c-format msgid "sequence %s" msgstr "Sequenz %s" -#: catalog/objectaddress.c:4017 +#: catalog/objectaddress.c:4058 #, c-format msgid "toast table %s" msgstr "TOAST-Tabelle %s" -#: catalog/objectaddress.c:4021 +#: catalog/objectaddress.c:4062 #, c-format msgid "view %s" msgstr "Sicht %s" -#: catalog/objectaddress.c:4025 +#: catalog/objectaddress.c:4066 #, c-format msgid "materialized view %s" msgstr "materialisierte Sicht %s" -#: catalog/objectaddress.c:4029 +#: catalog/objectaddress.c:4070 #, c-format msgid "composite type %s" msgstr "zusammengesetzter Typ %s" -#: catalog/objectaddress.c:4033 +#: catalog/objectaddress.c:4074 #, c-format msgid "foreign table %s" msgstr "Fremdtabelle %s" -#: catalog/objectaddress.c:4038 +#: catalog/objectaddress.c:4079 #, c-format msgid "relation %s" msgstr "Relation %s" -#: catalog/objectaddress.c:4079 +#: catalog/objectaddress.c:4120 #, c-format msgid "operator family %s for access method %s" msgstr "Operatorfamilie %s für Zugriffsmethode %s" @@ -5675,12 +5675,12 @@ msgstr "Fehler während der Erzeugung eines Multirange-Typs für Typ »%s«." msgid "You can manually specify a multirange type name using the \"multirange_type_name\" attribute." msgstr "Sie können einen Multirange-Typnamen manuell angeben, mit dem Attribut »multirange_type_name«." -#: catalog/storage.c:495 storage/buffer/bufmgr.c:1039 +#: catalog/storage.c:523 storage/buffer/bufmgr.c:1039 #, c-format msgid "invalid page in block %u of relation %s" msgstr "ungültige Seite in Block %u von Relation %s" -#: catalog/toasting.c:112 commands/indexcmds.c:692 commands/tablecmds.c:6142 +#: catalog/toasting.c:112 commands/indexcmds.c:699 commands/tablecmds.c:6142 #: commands/tablecmds.c:16694 #, c-format msgid "\"%s\" is not a table or materialized view" @@ -5776,72 +5776,72 @@ msgstr "Parameter »parallel« muss SAFE, RESTRICTED oder UNSAFE sein" 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:174 +#: commands/alter.c:85 commands/event_trigger.c:174 #, c-format msgid "event trigger \"%s\" already exists" msgstr "Ereignistrigger »%s« existiert bereits" -#: commands/alter.c:87 commands/foreigncmds.c:597 +#: commands/alter.c:88 commands/foreigncmds.c:597 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "Fremddaten-Wrapper »%s« existiert bereits" -#: commands/alter.c:90 commands/foreigncmds.c:888 +#: commands/alter.c:91 commands/foreigncmds.c:888 #, c-format msgid "server \"%s\" already exists" msgstr "Server »%s« existiert bereits" -#: commands/alter.c:93 commands/proclang.c:133 +#: commands/alter.c:94 commands/proclang.c:133 #, c-format msgid "language \"%s\" already exists" msgstr "Sprache »%s« existiert bereits" -#: commands/alter.c:96 commands/publicationcmds.c:180 +#: commands/alter.c:97 commands/publicationcmds.c:180 #, c-format msgid "publication \"%s\" already exists" msgstr "Publikation »%s« existiert bereits" -#: commands/alter.c:99 commands/subscriptioncmds.c:400 +#: commands/alter.c:100 commands/subscriptioncmds.c:400 #, c-format msgid "subscription \"%s\" already exists" msgstr "Subskription »%s« existiert bereits" -#: commands/alter.c:122 +#: commands/alter.c:123 #, c-format msgid "conversion \"%s\" already exists in schema \"%s\"" msgstr "Konversion »%s« existiert bereits in Schema »%s«" -#: commands/alter.c:126 +#: commands/alter.c:127 #, c-format msgid "statistics object \"%s\" already exists in schema \"%s\"" msgstr "Statistikobjekt »%s« existiert bereits in Schema »%s«" -#: commands/alter.c:130 +#: commands/alter.c:131 #, c-format msgid "text search parser \"%s\" already exists in schema \"%s\"" msgstr "Textsucheparser »%s« existiert bereits in Schema »%s«" -#: commands/alter.c:134 +#: commands/alter.c:135 #, c-format msgid "text search dictionary \"%s\" already exists in schema \"%s\"" msgstr "Textsuchewörterbuch »%s« existiert bereits in Schema »%s«" -#: commands/alter.c:138 +#: commands/alter.c:139 #, c-format msgid "text search template \"%s\" already exists in schema \"%s\"" msgstr "Textsuchevorlage »%s« existiert bereits in Schema »%s«" -#: commands/alter.c:142 +#: commands/alter.c:143 #, c-format msgid "text search configuration \"%s\" already exists in schema \"%s\"" msgstr "Textsuchekonfiguration »%s« existiert bereits in Schema »%s«" -#: commands/alter.c:215 +#: commands/alter.c:216 #, c-format msgid "must be superuser to rename %s" msgstr "nur Superuser können %s umbenennen" -#: commands/alter.c:744 +#: commands/alter.c:745 #, c-format msgid "must be superuser to set schema of %s" msgstr "nur Superuser können Schema von %s setzen" @@ -5861,8 +5861,8 @@ msgstr "Nur Superuser können Zugriffsmethoden anlegen." msgid "access method \"%s\" already exists" msgstr "Zugriffsmethode »%s« existiert bereits" -#: commands/amcmds.c:154 commands/indexcmds.c:213 commands/indexcmds.c:843 -#: commands/opclasscmds.c:375 commands/opclasscmds.c:833 +#: commands/amcmds.c:154 commands/indexcmds.c:214 commands/indexcmds.c:850 +#: commands/opclasscmds.c:376 commands/opclasscmds.c:834 #, c-format msgid "access method \"%s\" does not exist" msgstr "Zugriffsmethode »%s« existiert nicht" @@ -6127,8 +6127,8 @@ msgstr "keine brauchbaren System-Locales gefunden" #: commands/comment.c:61 commands/dbcommands.c:855 commands/dbcommands.c:1072 #: commands/dbcommands.c:1187 commands/dbcommands.c:1377 #: commands/dbcommands.c:1627 commands/dbcommands.c:1751 -#: commands/dbcommands.c:2194 utils/init/postinit.c:887 -#: utils/init/postinit.c:993 utils/init/postinit.c:1019 +#: commands/dbcommands.c:2194 utils/init/postinit.c:890 +#: utils/init/postinit.c:996 utils/init/postinit.c:1022 #, c-format msgid "database \"%s\" does not exist" msgstr "Datenbank »%s« existiert nicht" @@ -6339,7 +6339,7 @@ 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:749 commands/indexcmds.c:1835 commands/statscmds.c:245 +#: commands/copy.c:749 commands/indexcmds.c:1842 commands/statscmds.c:245 #: commands/tablecmds.c:2344 commands/tablecmds.c:3000 #: commands/tablecmds.c:3508 parser/parse_relation.c:3651 #: parser/parse_relation.c:3671 utils/adt/tsvector_op.c:2683 @@ -6758,7 +6758,7 @@ msgid "cannot use invalid database \"%s\" as template" msgstr "ungültige Datenbank »%s« kann nicht als Template verwendet werden" #: commands/dbcommands.c:368 commands/dbcommands.c:1638 -#: utils/init/postinit.c:1002 +#: utils/init/postinit.c:1005 #, c-format msgid "Use DROP DATABASE to drop invalid databases." msgstr "Verwenden Sie DROP DATABASE, um ungültige Datenbanken zu löschen." @@ -7977,293 +7977,293 @@ 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:634 +#: commands/indexcmds.c:641 #, c-format msgid "must specify at least one column" msgstr "mindestens eine Spalte muss angegeben werden" -#: commands/indexcmds.c:638 +#: commands/indexcmds.c:645 #, c-format msgid "cannot use more than %d columns in an index" msgstr "Index kann nicht mehr als %d Spalten enthalten" -#: commands/indexcmds.c:686 +#: commands/indexcmds.c:693 #, c-format msgid "cannot create index on foreign table \"%s\"" msgstr "kann keinen Index für Fremdtabelle »%s« erzeugen" -#: commands/indexcmds.c:717 +#: commands/indexcmds.c:724 #, 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:722 +#: commands/indexcmds.c:729 #, 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:732 +#: commands/indexcmds.c:739 #, 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:770 commands/tablecmds.c:755 commands/tablespace.c:1179 +#: commands/indexcmds.c:777 commands/tablecmds.c:755 commands/tablespace.c:1179 #, c-format msgid "cannot specify default tablespace for partitioned relations" msgstr "für partitionierte Relationen kann kein Standard-Tablespace angegeben werden" -#: commands/indexcmds.c:802 commands/tablecmds.c:786 commands/tablecmds.c:3289 +#: commands/indexcmds.c:809 commands/tablecmds.c:786 commands/tablecmds.c:3289 #, 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:835 +#: commands/indexcmds.c:842 #, c-format msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "ersetze Zugriffsmethode »gist« für obsolete Methode »rtree«" -#: commands/indexcmds.c:856 +#: commands/indexcmds.c:863 #, c-format msgid "access method \"%s\" does not support unique indexes" msgstr "Zugriffsmethode »%s« unterstützt keine Unique Indexe" -#: commands/indexcmds.c:861 +#: commands/indexcmds.c:868 #, c-format msgid "access method \"%s\" does not support included columns" msgstr "Zugriffsmethode »%s« unterstützt keine eingeschlossenen Spalten" -#: commands/indexcmds.c:866 +#: commands/indexcmds.c:873 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "Zugriffsmethode »%s« unterstützt keine mehrspaltigen Indexe" -#: commands/indexcmds.c:871 +#: commands/indexcmds.c:878 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "Zugriffsmethode »%s« unterstützt keine Exclusion-Constraints" -#: commands/indexcmds.c:995 +#: commands/indexcmds.c:1002 #, c-format msgid "cannot match partition key to an index using access method \"%s\"" msgstr "Partitionierungsschlüssel kann nicht mit Zugriffsmethode »%s« mit einem Index gepaart werden" -#: commands/indexcmds.c:1005 +#: commands/indexcmds.c:1012 #, c-format msgid "unsupported %s constraint with partition key definition" msgstr "nicht unterstützter %s-Constraint mit Partitionierungsschlüsseldefinition" -#: commands/indexcmds.c:1007 +#: commands/indexcmds.c:1014 #, c-format msgid "%s constraints cannot be used when partition keys include expressions." msgstr "%s-Constraints können nicht verwendet werden, wenn Partitionierungsschlüssel Ausdrücke enthalten." -#: commands/indexcmds.c:1049 +#: commands/indexcmds.c:1056 #, 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:1050 +#: commands/indexcmds.c:1057 #, c-format msgid "%s constraint on table \"%s\" lacks column \"%s\" which is part of the partition key." msgstr "Im %s-Constraint in Tabelle »%s« fehlt Spalte »%s«, welche Teil des Partitionierungsschlüssels ist." -#: commands/indexcmds.c:1069 commands/indexcmds.c:1088 +#: commands/indexcmds.c:1076 commands/indexcmds.c:1095 #, c-format msgid "index creation on system columns is not supported" msgstr "Indexerzeugung für Systemspalten wird nicht unterstützt" -#: commands/indexcmds.c:1288 tcop/utility.c:1510 +#: commands/indexcmds.c:1295 tcop/utility.c:1510 #, 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:1290 tcop/utility.c:1512 +#: commands/indexcmds.c:1297 tcop/utility.c:1512 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." msgstr "Tabelle »%s« enthält Partitionen, die Fremdtabellen sind." -#: commands/indexcmds.c:1752 +#: commands/indexcmds.c:1759 #, 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:1830 parser/parse_utilcmd.c:2533 +#: commands/indexcmds.c:1837 parser/parse_utilcmd.c:2533 #: parser/parse_utilcmd.c:2668 #, 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:1854 parser/parse_utilcmd.c:1821 +#: commands/indexcmds.c:1861 parser/parse_utilcmd.c:1821 #, c-format msgid "expressions are not supported in included columns" msgstr "in eingeschlossenen Spalten werden keine Ausdrücke unterstützt" -#: commands/indexcmds.c:1895 +#: commands/indexcmds.c:1902 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "Funktionen im Indexausdruck müssen als IMMUTABLE markiert sein" -#: commands/indexcmds.c:1910 +#: commands/indexcmds.c:1917 #, c-format msgid "including column does not support a collation" msgstr "inkludierte Spalte unterstützt keine Sortierfolge" -#: commands/indexcmds.c:1914 +#: commands/indexcmds.c:1921 #, c-format msgid "including column does not support an operator class" msgstr "inkludierte Spalte unterstützt keine Operatorklasse" -#: commands/indexcmds.c:1918 +#: commands/indexcmds.c:1925 #, c-format msgid "including column does not support ASC/DESC options" msgstr "inkludierte Spalte unterstützt die Optionen ASC/DESC nicht" -#: commands/indexcmds.c:1922 +#: commands/indexcmds.c:1929 #, c-format msgid "including column does not support NULLS FIRST/LAST options" msgstr "inkludierte Spalte unterstützt die Optionen NULLS FIRST/LAST nicht" -#: commands/indexcmds.c:1963 +#: commands/indexcmds.c:1970 #, 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:1971 commands/tablecmds.c:17162 commands/typecmds.c:810 +#: commands/indexcmds.c:1978 commands/tablecmds.c:17162 commands/typecmds.c:810 #: parser/parse_expr.c:2693 parser/parse_type.c:566 parser/parse_utilcmd.c:3783 #: utils/adt/misc.c:621 #, c-format msgid "collations are not supported by type %s" msgstr "Sortierfolgen werden von Typ %s nicht unterstützt" -#: commands/indexcmds.c:2036 +#: commands/indexcmds.c:2043 #, c-format msgid "operator %s is not commutative" msgstr "Operator %s ist nicht kommutativ" -#: commands/indexcmds.c:2038 +#: commands/indexcmds.c:2045 #, 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:2064 +#: commands/indexcmds.c:2071 #, 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:2067 +#: commands/indexcmds.c:2074 #, 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:2102 +#: commands/indexcmds.c:2109 #, 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:2107 +#: commands/indexcmds.c:2114 #, 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:2153 commands/tablecmds.c:17187 +#: commands/indexcmds.c:2160 commands/tablecmds.c:17187 #: commands/tablecmds.c:17193 commands/typecmds.c:2317 #, 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:2155 +#: commands/indexcmds.c:2162 #, 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:2184 commands/indexcmds.c:2192 -#: commands/opclasscmds.c:205 +#: commands/indexcmds.c:2191 commands/indexcmds.c:2199 +#: commands/opclasscmds.c:206 #, 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:2206 commands/typecmds.c:2305 +#: commands/indexcmds.c:2213 commands/typecmds.c:2305 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "Operatorklasse »%s« akzeptiert Datentyp %s nicht" -#: commands/indexcmds.c:2296 +#: commands/indexcmds.c:2303 #, 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:2624 +#: commands/indexcmds.c:2631 #, c-format msgid "unrecognized REINDEX option \"%s\"" msgstr "unbekannte REINDEX-Option »%s«" -#: commands/indexcmds.c:2848 +#: commands/indexcmds.c:2855 #, 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:2862 +#: commands/indexcmds.c:2869 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "Tabelle »%s« hat keine zu reindizierenden Indexe" -#: commands/indexcmds.c:2902 commands/indexcmds.c:3409 -#: commands/indexcmds.c:3537 +#: commands/indexcmds.c:2909 commands/indexcmds.c:3416 +#: commands/indexcmds.c:3544 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "Systemkataloge können nicht nebenläufig reindiziert werden" -#: commands/indexcmds.c:2925 +#: commands/indexcmds.c:2932 #, c-format msgid "can only reindex the currently open database" msgstr "nur die aktuell geöffnete Datenbank kann reindiziert werden" -#: commands/indexcmds.c:3013 +#: commands/indexcmds.c:3020 #, 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:3046 +#: commands/indexcmds.c:3053 #, c-format msgid "cannot move system relations, skipping all" msgstr "Systemrelationen können nicht verschoben werden, werden alle übersprungen" -#: commands/indexcmds.c:3093 +#: commands/indexcmds.c:3100 #, c-format msgid "while reindexing partitioned table \"%s.%s\"" msgstr "beim Reindizieren der partitionierten Tabelle »%s.%s«" -#: commands/indexcmds.c:3096 +#: commands/indexcmds.c:3103 #, c-format msgid "while reindexing partitioned index \"%s.%s\"" msgstr "beim Reindizieren des partitionierten Index »%s.%s«" -#: commands/indexcmds.c:3289 commands/indexcmds.c:4145 +#: commands/indexcmds.c:3296 commands/indexcmds.c:4152 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "Tabelle »%s.%s« wurde neu indiziert" -#: commands/indexcmds.c:3441 commands/indexcmds.c:3493 +#: commands/indexcmds.c:3448 commands/indexcmds.c:3500 #, 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:3447 +#: commands/indexcmds.c:3454 #, 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:3602 +#: commands/indexcmds.c:3609 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "diese Art Relation kann nicht nebenläufig reindiziert werden" -#: commands/indexcmds.c:3623 +#: commands/indexcmds.c:3630 #, c-format msgid "cannot move non-shared relation to tablespace \"%s\"" msgstr "nicht geteilte Relation kann nicht nach Tablespace »%s« verschoben werden" -#: commands/indexcmds.c:4126 commands/indexcmds.c:4138 +#: commands/indexcmds.c:4133 commands/indexcmds.c:4145 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "Index »%s.%s« wurde neu indiziert" @@ -8304,224 +8304,224 @@ msgstr "neue Daten für materialisierte Sicht »%s« enthalten doppelte Zeilen o msgid "Row: %s" msgstr "Zeile: %s" -#: commands/opclasscmds.c:124 +#: commands/opclasscmds.c:125 #, 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:267 +#: commands/opclasscmds.c:268 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists" msgstr "Operatorfamilie »%s« für Zugriffsmethode »%s« existiert bereits" -#: commands/opclasscmds.c:416 +#: commands/opclasscmds.c:417 #, c-format msgid "must be superuser to create an operator class" msgstr "nur Superuser können Operatorklassen erzeugen" -#: commands/opclasscmds.c:493 commands/opclasscmds.c:910 -#: commands/opclasscmds.c:1056 +#: commands/opclasscmds.c:494 commands/opclasscmds.c:911 +#: commands/opclasscmds.c:1057 #, 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:538 commands/opclasscmds.c:960 -#: commands/opclasscmds.c:1072 +#: commands/opclasscmds.c:539 commands/opclasscmds.c:961 +#: commands/opclasscmds.c:1073 #, 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:567 +#: commands/opclasscmds.c:568 #, c-format msgid "storage type specified more than once" msgstr "Storage-Typ mehrmals angegeben" -#: commands/opclasscmds.c:594 +#: commands/opclasscmds.c:595 #, 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:610 +#: commands/opclasscmds.c:611 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists" msgstr "Operatorklasse »%s« für Zugriffsmethode »%s« existiert bereits" -#: commands/opclasscmds.c:638 +#: commands/opclasscmds.c:639 #, 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:641 +#: commands/opclasscmds.c:642 #, c-format msgid "Operator class \"%s\" already is the default." msgstr "Operatorklasse »%s« ist bereits der Standard." -#: commands/opclasscmds.c:801 +#: commands/opclasscmds.c:802 #, c-format msgid "must be superuser to create an operator family" msgstr "nur Superuser können Operatorfamilien erzeugen" -#: commands/opclasscmds.c:861 +#: commands/opclasscmds.c:862 #, c-format msgid "must be superuser to alter an operator family" msgstr "nur Superuser können Operatorfamilien ändern" -#: commands/opclasscmds.c:919 +#: commands/opclasscmds.c:920 #, 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:994 +#: commands/opclasscmds.c:995 #, c-format msgid "STORAGE cannot be specified in ALTER OPERATOR FAMILY" msgstr "STORAGE kann in ALTER OPERATOR FAMILY nicht angegeben werden" -#: commands/opclasscmds.c:1128 +#: commands/opclasscmds.c:1129 #, c-format msgid "one or two argument types must be specified" msgstr "ein oder zwei Argumenttypen müssen angegeben werden" -#: commands/opclasscmds.c:1154 +#: commands/opclasscmds.c:1155 #, c-format msgid "index operators must be binary" msgstr "Indexoperatoren müssen binär sein" -#: commands/opclasscmds.c:1173 +#: commands/opclasscmds.c:1174 #, c-format msgid "access method \"%s\" does not support ordering operators" msgstr "Zugriffsmethode »%s« unterstützt keine Sortieroperatoren" -#: commands/opclasscmds.c:1184 +#: commands/opclasscmds.c:1185 #, c-format msgid "index search operators must return boolean" msgstr "Indexsuchoperatoren müssen Typ boolean zurückgeben" -#: commands/opclasscmds.c:1224 +#: commands/opclasscmds.c:1225 #, c-format 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:1231 +#: commands/opclasscmds.c:1232 #, 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:1239 +#: commands/opclasscmds.c:1240 #, c-format msgid "invalid operator class options parsing function" msgstr "ungültige Operatorklassenoptionsparsefunktion" -#: commands/opclasscmds.c:1240 +#: commands/opclasscmds.c:1241 #, c-format msgid "Valid signature of operator class options parsing function is %s." msgstr "Gültige Signatur einer Operatorklassenoptionsparsefunktion ist %s." -#: commands/opclasscmds.c:1259 +#: commands/opclasscmds.c:1260 #, c-format msgid "btree comparison functions must have two arguments" msgstr "btree-Vergleichsfunktionen müssen zwei Argumente haben" -#: commands/opclasscmds.c:1263 +#: commands/opclasscmds.c:1264 #, c-format msgid "btree comparison functions must return integer" msgstr "btree-Vergleichsfunktionen müssen Typ integer zurückgeben" -#: commands/opclasscmds.c:1280 +#: commands/opclasscmds.c:1281 #, c-format msgid "btree sort support functions must accept type \"internal\"" msgstr "btree-Sortierunterstützungsfunktionen müssen Typ »internal« akzeptieren" -#: commands/opclasscmds.c:1284 +#: commands/opclasscmds.c:1285 #, c-format msgid "btree sort support functions must return void" msgstr "btree-Sortierunterstützungsfunktionen müssen Typ void zurückgeben" -#: commands/opclasscmds.c:1295 +#: commands/opclasscmds.c:1296 #, 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:1299 +#: commands/opclasscmds.c:1300 #, c-format msgid "btree in_range functions must return boolean" msgstr "btree-in_range-Funktionen müssen Typ boolean zurückgeben" -#: commands/opclasscmds.c:1315 +#: commands/opclasscmds.c:1316 #, c-format msgid "btree equal image functions must have one argument" msgstr "btree-equal-image-Funktionen müssen ein Argument haben" -#: commands/opclasscmds.c:1319 +#: commands/opclasscmds.c:1320 #, c-format msgid "btree equal image functions must return boolean" msgstr "btree-equal-image-Funktionen müssen Typ boolean zurückgeben" -#: commands/opclasscmds.c:1332 +#: commands/opclasscmds.c:1333 #, c-format msgid "btree equal image functions must not be cross-type" msgstr "btree-equal-image-Funktionen dürfen nicht typübergreifend sein" -#: commands/opclasscmds.c:1342 +#: commands/opclasscmds.c:1343 #, c-format msgid "hash function 1 must have one argument" msgstr "Hash-Funktion 1 muss ein Argument haben" -#: commands/opclasscmds.c:1346 +#: commands/opclasscmds.c:1347 #, c-format msgid "hash function 1 must return integer" msgstr "Hash-Funktion 1 muss Typ integer zurückgeben" -#: commands/opclasscmds.c:1353 +#: commands/opclasscmds.c:1354 #, c-format msgid "hash function 2 must have two arguments" msgstr "Hash-Funktion 2 muss zwei Argumente haben" -#: commands/opclasscmds.c:1357 +#: commands/opclasscmds.c:1358 #, c-format msgid "hash function 2 must return bigint" msgstr "Hash-Funktion 2 muss Typ bigint zurückgeben" -#: commands/opclasscmds.c:1382 +#: commands/opclasscmds.c:1383 #, 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:1407 +#: commands/opclasscmds.c:1408 #, 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:1414 +#: commands/opclasscmds.c:1415 #, 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:1460 +#: commands/opclasscmds.c:1461 #, 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:1566 +#: commands/opclasscmds.c:1590 #, 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:1647 +#: commands/opclasscmds.c:1735 #, 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:1687 +#: commands/opclasscmds.c:1775 #, 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:1718 +#: commands/opclasscmds.c:1806 #, 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:1741 +#: commands/opclasscmds.c:1829 #, 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«" @@ -9330,11 +9330,11 @@ msgstr "geerbte Spalte »%s« hat Typkonflikt" #: commands/tablecmds.c:2535 commands/tablecmds.c:2558 #: commands/tablecmds.c:2575 commands/tablecmds.c:2831 #: commands/tablecmds.c:2861 commands/tablecmds.c:2875 -#: parser/parse_coerce.c:2155 parser/parse_coerce.c:2175 -#: parser/parse_coerce.c:2195 parser/parse_coerce.c:2216 -#: parser/parse_coerce.c:2271 parser/parse_coerce.c:2305 -#: parser/parse_coerce.c:2381 parser/parse_coerce.c:2412 -#: parser/parse_coerce.c:2451 parser/parse_coerce.c:2518 +#: parser/parse_coerce.c:2192 parser/parse_coerce.c:2212 +#: parser/parse_coerce.c:2232 parser/parse_coerce.c:2253 +#: parser/parse_coerce.c:2308 parser/parse_coerce.c:2342 +#: parser/parse_coerce.c:2418 parser/parse_coerce.c:2449 +#: parser/parse_coerce.c:2488 parser/parse_coerce.c:2555 #: parser/parse_param.c:227 #, c-format msgid "%s versus %s" @@ -10042,7 +10042,7 @@ msgstr "USING kann nicht angegeben werden, wenn der Typ einer generierten Spalte #: commands/tablecmds.c:11908 commands/tablecmds.c:17005 #: commands/tablecmds.c:17095 commands/trigger.c:653 -#: rewrite/rewriteHandler.c:930 rewrite/rewriteHandler.c:965 +#: rewrite/rewriteHandler.c:936 rewrite/rewriteHandler.c:971 #, c-format msgid "Column \"%s\" is a generated column." msgstr "Spalte »%s« ist eine generierte Spalte." @@ -10965,17 +10965,17 @@ msgstr "konnte Zugriff nicht serialisieren wegen gleichzeitiger Aktualisierung" msgid "could not serialize access due to concurrent delete" msgstr "konnte Zugriff nicht serialisieren wegen gleichzeitigem Löschen" -#: commands/trigger.c:4256 +#: commands/trigger.c:4254 #, 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:5304 +#: commands/trigger.c:5302 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "Constraint »%s« ist nicht aufschiebbar" -#: commands/trigger.c:5327 +#: commands/trigger.c:5325 #, c-format msgid "constraint \"%s\" does not exist" msgstr "Constraint »%s« existiert nicht" @@ -11511,10 +11511,10 @@ msgstr "keine Berechtigung, um Rolle zu entfernen" msgid "cannot use special role specifier in DROP ROLE" msgstr "in DROP ROLE kann kein Rollenplatzhalter verwendet werden" -#: commands/user.c:1040 commands/user.c:1197 commands/variable.c:778 -#: commands/variable.c:781 commands/variable.c:865 commands/variable.c:868 +#: commands/user.c:1040 commands/user.c:1197 commands/variable.c:793 +#: commands/variable.c:796 commands/variable.c:913 commands/variable.c:916 #: utils/adt/acl.c:5103 utils/adt/acl.c:5151 utils/adt/acl.c:5179 -#: utils/adt/acl.c:5198 utils/init/miscinit.c:710 +#: utils/adt/acl.c:5198 utils/init/miscinit.c:755 #, c-format msgid "role \"%s\" does not exist" msgstr "Rolle »%s« existiert nicht" @@ -11753,8 +11753,8 @@ 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 tcop/postgres.c:3640 utils/misc/guc.c:11682 -#: utils/misc/guc.c:11744 +#: commands/variable.c:165 tcop/postgres.c:3640 utils/misc/guc.c:11715 +#: utils/misc/guc.c:11777 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Unbekanntes Schlüsselwort: »%s«." @@ -11849,12 +11849,22 @@ 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:890 +#: commands/variable.c:818 +#, c-format +msgid "permission will be denied to set session authorization \"%s\"" +msgstr "es wird keine Berechtigung gegeben werden, um Sitzungsautorisierung »%s« zu setzen" + +#: commands/variable.c:823 +#, c-format +msgid "permission denied to set session authorization \"%s\"" +msgstr "keine Berechtigung, um Sitzungsautorisierung »%s« zu setzen" + +#: commands/variable.c:933 #, c-format msgid "permission will be denied to set role \"%s\"" msgstr "Berechtigung fehlt, um Rolle »%s« zu setzen" -#: commands/variable.c:895 +#: commands/variable.c:938 #, c-format msgid "permission denied to set role \"%s\"" msgstr "keine Berechtigung, um Rolle »%s« zu setzen" @@ -11940,19 +11950,19 @@ 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:2452 +#: executor/execCurrent.c:280 executor/execExprInterp.c:2464 #, 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:2464 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2476 #, c-format msgid "no value found for parameter %d" msgstr "kein Wert für Parameter %d gefunden" #: executor/execExpr.c:636 executor/execExpr.c:643 executor/execExpr.c:649 -#: executor/execExprInterp.c:4033 executor/execExprInterp.c:4050 -#: executor/execExprInterp.c:4149 executor/nodeModifyTable.c:127 +#: executor/execExprInterp.c:4045 executor/execExprInterp.c:4062 +#: executor/execExprInterp.c:4161 executor/nodeModifyTable.c:127 #: executor/nodeModifyTable.c:138 executor/nodeModifyTable.c:155 #: executor/nodeModifyTable.c:163 #, c-format @@ -11969,7 +11979,7 @@ msgstr "Anfrage hat zu viele Spalten." 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:650 executor/execExprInterp.c:4051 +#: executor/execExpr.c:650 executor/execExprInterp.c:4063 #: executor/nodeModifyTable.c:139 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." @@ -11980,17 +11990,17 @@ msgstr "Tabelle hat Typ %s auf Position %d, aber Anfrage erwartet %s." msgid "window function calls cannot be nested" msgstr "Aufrufe von Fensterfunktionen können nicht geschachtelt werden" -#: executor/execExpr.c:1618 +#: executor/execExpr.c:1626 #, c-format msgid "target type is not an array" msgstr "Zieltyp ist kein Array" -#: executor/execExpr.c:1958 +#: executor/execExpr.c:1966 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "ROW()-Spalte hat Typ %s statt Typ %s" -#: executor/execExpr.c:2483 executor/execSRF.c:718 parser/parse_func.c:138 +#: executor/execExpr.c:2491 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" @@ -11998,33 +12008,33 @@ 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:2916 parser/parse_node.c:277 parser/parse_node.c:327 +#: executor/execExpr.c:2924 parser/parse_node.c:277 parser/parse_node.c:327 #, c-format msgid "cannot subscript type %s because it does not support subscripting" msgstr "kann aus Typ %s kein Element auswählen, weil er Subscripting nicht unterstützt" -#: executor/execExpr.c:3044 executor/execExpr.c:3066 +#: executor/execExpr.c:3052 executor/execExpr.c:3074 #, c-format msgid "type %s does not support subscripted assignment" msgstr "Typ %s unterstützt Wertzuweisungen in Elemente nicht" -#: executor/execExprInterp.c:1916 +#: executor/execExprInterp.c:1928 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "Attribut %d von Typ %s wurde gelöscht" -#: executor/execExprInterp.c:1922 +#: executor/execExprInterp.c:1934 #, c-format msgid "attribute %d of type %s has wrong type" msgstr "Attribut %d von Typ %s hat falschen Typ" -#: executor/execExprInterp.c:1924 executor/execExprInterp.c:3058 -#: executor/execExprInterp.c:3104 +#: executor/execExprInterp.c:1936 executor/execExprInterp.c:3070 +#: executor/execExprInterp.c:3116 #, c-format msgid "Table has type %s, but query expects %s." msgstr "Tabelle hat Typ %s, aber Anfrage erwartet %s." -#: executor/execExprInterp.c:2004 utils/adt/expandedrecord.c:99 +#: executor/execExprInterp.c:2016 utils/adt/expandedrecord.c:99 #: utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1751 #: utils/cache/typcache.c:1907 utils/cache/typcache.c:2054 #: utils/fmgr/funcapi.c:500 @@ -12032,22 +12042,22 @@ 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:2542 +#: executor/execExprInterp.c:2554 #, 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:2755 +#: executor/execExprInterp.c:2767 #, c-format msgid "cannot merge incompatible arrays" msgstr "kann inkompatible Arrays nicht verschmelzen" -#: executor/execExprInterp.c:2756 +#: executor/execExprInterp.c:2768 #, 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:2777 utils/adt/arrayfuncs.c:264 +#: executor/execExprInterp.c:2789 utils/adt/arrayfuncs.c:264 #: utils/adt/arrayfuncs.c:564 utils/adt/arrayfuncs.c:1306 #: utils/adt/arrayfuncs.c:3429 utils/adt/arrayfuncs.c:5425 #: utils/adt/arrayfuncs.c:5942 utils/adt/arraysubs.c:150 @@ -12056,12 +12066,12 @@ msgstr "Arrayelement mit Typ %s kann nicht in ARRAY-Konstrukt mit Elementtyp %s msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "Anzahl der Arraydimensionen (%d) überschreitet erlaubtes Maximum (%d)" -#: executor/execExprInterp.c:2797 executor/execExprInterp.c:2832 +#: executor/execExprInterp.c:2809 executor/execExprInterp.c:2844 #, 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:2809 utils/adt/array_expanded.c:274 +#: executor/execExprInterp.c:2821 utils/adt/array_expanded.c:274 #: utils/adt/arrayfuncs.c:937 utils/adt/arrayfuncs.c:1545 #: utils/adt/arrayfuncs.c:2353 utils/adt/arrayfuncs.c:2368 #: utils/adt/arrayfuncs.c:2630 utils/adt/arrayfuncs.c:2646 @@ -12074,29 +12084,29 @@ msgstr "mehrdimensionale Arrays müssen Arraysausdrücke mit gleicher Anzahl Dim msgid "array size exceeds the maximum allowed (%d)" msgstr "Arraygröße überschreitet erlaubtes Maximum (%d)" -#: executor/execExprInterp.c:3057 executor/execExprInterp.c:3103 +#: executor/execExprInterp.c:3069 executor/execExprInterp.c:3115 #, c-format msgid "attribute %d has wrong type" msgstr "Attribut %d hat falschen Typ" -#: executor/execExprInterp.c:3662 utils/adt/domains.c:149 +#: executor/execExprInterp.c:3674 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:3677 utils/adt/domains.c:184 +#: executor/execExprInterp.c:3689 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:4034 +#: executor/execExprInterp.c:4046 #, 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:4150 executor/execSRF.c:977 +#: executor/execExprInterp.c:4162 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." @@ -12136,165 +12146,165 @@ msgstr "Schlüssel %s kollidiert mit vorhandenem Schlüssel %s." msgid "Key conflicts with existing key." msgstr "Der Schlüssel kollidiert mit einem vorhandenen Schlüssel." -#: executor/execMain.c:1014 +#: executor/execMain.c:1006 #, c-format msgid "cannot change sequence \"%s\"" msgstr "kann Sequenz »%s« nicht ändern" -#: executor/execMain.c:1020 +#: executor/execMain.c:1012 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "kann TOAST-Relation »%s« nicht ändern" -#: executor/execMain.c:1038 rewrite/rewriteHandler.c:3108 -#: rewrite/rewriteHandler.c:3953 +#: executor/execMain.c:1030 rewrite/rewriteHandler.c:3141 +#: rewrite/rewriteHandler.c:3986 #, c-format msgid "cannot insert into view \"%s\"" msgstr "kann nicht in Sicht »%s« einfügen" -#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3111 -#: rewrite/rewriteHandler.c:3956 +#: executor/execMain.c:1032 rewrite/rewriteHandler.c:3144 +#: rewrite/rewriteHandler.c:3989 #, 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:1046 rewrite/rewriteHandler.c:3116 -#: rewrite/rewriteHandler.c:3961 +#: executor/execMain.c:1038 rewrite/rewriteHandler.c:3149 +#: rewrite/rewriteHandler.c:3994 #, c-format msgid "cannot update view \"%s\"" msgstr "kann Sicht »%s« nicht aktualisieren" -#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3119 -#: rewrite/rewriteHandler.c:3964 +#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3152 +#: rewrite/rewriteHandler.c:3997 #, 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:1054 rewrite/rewriteHandler.c:3124 -#: rewrite/rewriteHandler.c:3969 +#: executor/execMain.c:1046 rewrite/rewriteHandler.c:3157 +#: rewrite/rewriteHandler.c:4002 #, c-format msgid "cannot delete from view \"%s\"" msgstr "kann nicht aus Sicht »%s« löschen" -#: executor/execMain.c:1056 rewrite/rewriteHandler.c:3127 -#: rewrite/rewriteHandler.c:3972 +#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3160 +#: rewrite/rewriteHandler.c:4005 #, 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:1067 +#: executor/execMain.c:1059 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "kann materialisierte Sicht »%s« nicht ändern" -#: executor/execMain.c:1079 +#: executor/execMain.c:1071 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "kann nicht in Fremdtabelle »%s« einfügen" -#: executor/execMain.c:1085 +#: executor/execMain.c:1077 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "Fremdtabelle »%s« erlaubt kein Einfügen" -#: executor/execMain.c:1092 +#: executor/execMain.c:1084 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "kann Fremdtabelle »%s« nicht aktualisieren" -#: executor/execMain.c:1098 +#: executor/execMain.c:1090 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "Fremdtabelle »%s« erlaubt kein Aktualisieren" -#: executor/execMain.c:1105 +#: executor/execMain.c:1097 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "kann nicht aus Fremdtabelle »%s« löschen" -#: executor/execMain.c:1111 +#: executor/execMain.c:1103 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "Fremdtabelle »%s« erlaubt kein Löschen" -#: executor/execMain.c:1122 +#: executor/execMain.c:1114 #, c-format msgid "cannot change relation \"%s\"" msgstr "kann Relation »%s« nicht ändern" -#: executor/execMain.c:1149 +#: executor/execMain.c:1141 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "kann Zeilen in Sequenz »%s« nicht sperren" -#: executor/execMain.c:1156 +#: executor/execMain.c:1148 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "kann Zeilen in TOAST-Relation »%s« nicht sperren" -#: executor/execMain.c:1163 +#: executor/execMain.c:1155 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "kann Zeilen in Sicht »%s« nicht sperren" -#: executor/execMain.c:1171 +#: executor/execMain.c:1163 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "kann Zeilen in materialisierter Sicht »%s« nicht sperren" -#: executor/execMain.c:1180 executor/execMain.c:2596 +#: executor/execMain.c:1172 executor/execMain.c:2591 #: executor/nodeLockRows.c:136 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "kann Zeilen in Fremdtabelle »%s« nicht sperren" -#: executor/execMain.c:1186 +#: executor/execMain.c:1178 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "kann Zeilen in Relation »%s« nicht sperren" -#: executor/execMain.c:1812 +#: executor/execMain.c:1807 #, c-format msgid "new row for relation \"%s\" violates partition constraint" msgstr "neue Zeile für Relation »%s« verletzt Partitions-Constraint" -#: executor/execMain.c:1814 executor/execMain.c:1897 executor/execMain.c:1947 -#: executor/execMain.c:2056 +#: executor/execMain.c:1809 executor/execMain.c:1892 executor/execMain.c:1942 +#: executor/execMain.c:2051 #, c-format msgid "Failing row contains %s." msgstr "Fehlgeschlagene Zeile enthält %s." -#: executor/execMain.c:1894 +#: executor/execMain.c:1889 #, c-format msgid "null value in column \"%s\" of relation \"%s\" violates not-null constraint" msgstr "NULL-Wert in Spalte »%s« von Relation »%s« verletzt Not-Null-Constraint" -#: executor/execMain.c:1945 +#: executor/execMain.c:1940 #, 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:2054 +#: executor/execMain.c:2049 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "neue Zeile verletzt Check-Option für Sicht »%s«" -#: executor/execMain.c:2064 +#: executor/execMain.c:2059 #, 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:2069 +#: executor/execMain.c:2064 #, 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:2076 +#: executor/execMain.c:2071 #, 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:2081 +#: executor/execMain.c:2076 #, 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«" @@ -13132,8 +13142,8 @@ msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %d" msgstr "unbekannter Konfigurationsparameter »%s« in Datei »%s« Zeile %d" #: guc-file.l:353 utils/misc/guc.c:7395 utils/misc/guc.c:7597 -#: utils/misc/guc.c:7691 utils/misc/guc.c:7785 utils/misc/guc.c:7905 -#: utils/misc/guc.c:8004 +#: utils/misc/guc.c:7691 utils/misc/guc.c:7785 utils/misc/guc.c:7907 +#: utils/misc/guc.c:8043 #, 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" @@ -13178,7 +13188,7 @@ msgstr "konnte Konfigurationsdatei »%s« nicht öffnen: maximale Verschachtelun msgid "configuration file recursion in \"%s\"" msgstr "Konfigurationsdateirekursion in »%s«" -#: guc-file.l:632 libpq/hba.c:2255 libpq/hba.c:2669 +#: guc-file.l:632 libpq/hba.c:2255 libpq/hba.c:2673 #, c-format msgid "could not open configuration file \"%s\": %m" msgstr "konnte Konfigurationsdatei »%s« nicht öffnen: %m" @@ -14699,32 +14709,32 @@ msgstr "unbekannter Authentifizierungsoptionsname: »%s«" msgid "configuration file \"%s\" contains no entries" msgstr "Konfigurationsdatei »%s« enthält keine Einträge" -#: libpq/hba.c:2824 +#: libpq/hba.c:2828 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "ungültiger regulärer Ausdruck »%s«: %s" -#: libpq/hba.c:2884 +#: libpq/hba.c:2888 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "Suche nach regulärem Ausdruck für »%s« fehlgeschlagen: %s" -#: libpq/hba.c:2903 +#: libpq/hba.c:2907 #, 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:2999 +#: libpq/hba.c:3003 #, 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:3019 +#: libpq/hba.c:3023 #, 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:3052 +#: libpq/hba.c:3056 #, c-format msgid "could not open usermap file \"%s\": %m" msgstr "konnte Usermap-Datei »%s« nicht öffnen: %m" @@ -14855,7 +14865,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:1179 tcop/postgres.c:4404 +#: libpq/pqcomm.c:1179 tcop/postgres.c:4409 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "Verbindung wird abgebrochen, weil Protokollsynchronisierung verloren wurde" @@ -14921,12 +14931,12 @@ msgstr "ungültige Zeichenkette in Message" msgid "invalid message format" msgstr "ungültiges Message-Format" -#: main/main.c:245 +#: main/main.c:247 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s: WSAStartup fehlgeschlagen: %d\n" -#: main/main.c:309 +#: main/main.c:311 #, c-format msgid "" "%s is the PostgreSQL server.\n" @@ -14935,7 +14945,7 @@ msgstr "" "%s ist der PostgreSQL-Server.\n" "\n" -#: main/main.c:310 +#: main/main.c:312 #, c-format msgid "" "Usage:\n" @@ -14946,107 +14956,107 @@ msgstr "" " %s [OPTION]...\n" "\n" -#: main/main.c:311 +#: main/main.c:313 #, c-format msgid "Options:\n" msgstr "Optionen:\n" -#: main/main.c:312 +#: main/main.c:314 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B ZAHL Anzahl der geteilten Puffer\n" -#: main/main.c:313 +#: main/main.c:315 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c NAME=WERT setze Konfigurationsparameter\n" -#: main/main.c:314 +#: main/main.c:316 #, 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:315 +#: main/main.c:317 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 Debug-Level\n" -#: main/main.c:316 +#: main/main.c:318 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D VERZEICHNIS Datenbankverzeichnis\n" -#: main/main.c:317 +#: main/main.c:319 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e verwende europäisches Datumseingabeformat (DMY)\n" -#: main/main.c:318 +#: main/main.c:320 #, c-format msgid " -F turn fsync off\n" msgstr " -F »fsync« ausschalten\n" -#: main/main.c:319 +#: main/main.c:321 #, 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:320 +#: main/main.c:322 #, c-format msgid " -i enable TCP/IP connections\n" msgstr " -i ermögliche TCP/IP-Verbindungen\n" -#: main/main.c:321 +#: main/main.c:323 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k VERZEICHNIS Ort der Unix-Domain-Socket\n" -#: main/main.c:323 +#: main/main.c:325 #, c-format msgid " -l enable SSL connections\n" msgstr " -l ermögliche SSL-Verbindungen\n" -#: main/main.c:325 +#: main/main.c:327 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N ZAHL Anzahl der erlaubten Verbindungen\n" -#: main/main.c:326 +#: main/main.c:328 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p PORT auf dieser Portnummer horchen\n" -#: main/main.c:327 +#: main/main.c:329 #, c-format msgid " -s show statistics after each query\n" msgstr " -s zeige Statistiken nach jeder Anfrage\n" -#: main/main.c:328 +#: main/main.c:330 #, 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:329 +#: main/main.c:331 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: main/main.c:330 +#: main/main.c:332 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --NAME=WERT setze Konfigurationsparameter\n" -#: main/main.c:331 +#: main/main.c:333 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr " --describe-config zeige Konfigurationsparameter und beende\n" -#: main/main.c:332 +#: main/main.c:334 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: main/main.c:334 +#: main/main.c:336 #, c-format msgid "" "\n" @@ -15055,42 +15065,42 @@ msgstr "" "\n" "Entwickleroptionen:\n" -#: main/main.c:335 +#: main/main.c:337 #, c-format msgid " -f s|i|o|b|t|n|m|h forbid use of some plan types\n" msgstr " -f s|i|o|b|t|n|m|h verbiete Verwendung einiger Plantypen\n" -#: main/main.c:336 +#: main/main.c:338 #, 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:337 +#: main/main.c:339 #, c-format msgid " -O allow system table structure changes\n" msgstr " -O erlaube Änderungen an Systemtabellenstruktur\n" -#: main/main.c:338 +#: main/main.c:340 #, c-format msgid " -P disable system indexes\n" msgstr " -P schalte Systemindexe aus\n" -#: main/main.c:339 +#: main/main.c:341 #, 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:340 +#: main/main.c:342 #, 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:341 +#: main/main.c:343 #, 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:343 +#: main/main.c:345 #, c-format msgid "" "\n" @@ -15099,39 +15109,39 @@ msgstr "" "\n" "Optionen für Einzelbenutzermodus:\n" -#: main/main.c:344 +#: main/main.c:346 #, 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:345 +#: main/main.c:347 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " DBNAME Datenbankname (Vorgabe: Benutzername)\n" -#: main/main.c:346 +#: main/main.c:348 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 Debug-Level setzen\n" -#: main/main.c:347 +#: main/main.c:349 #, c-format msgid " -E echo statement before execution\n" msgstr " -E gebe Befehl vor der Ausführung aus\n" -#: main/main.c:348 +#: main/main.c:350 #, 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:349 main/main.c:354 +#: main/main.c:351 main/main.c:356 #, 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:351 +#: main/main.c:353 #, c-format msgid "" "\n" @@ -15140,22 +15150,22 @@ msgstr "" "\n" "Optionen für Bootstrap-Modus:\n" -#: main/main.c:352 +#: main/main.c:354 #, 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:353 +#: main/main.c:355 #, c-format msgid " DBNAME database name (mandatory argument in bootstrapping mode)\n" msgstr " DBNAME Datenbankname (Pflichtangabe im Bootstrap-Modus)\n" -#: main/main.c:355 +#: main/main.c:357 #, c-format msgid " -x NUM internal use\n" msgstr " -x NUM interne Verwendung\n" -#: main/main.c:357 +#: main/main.c:359 #, c-format msgid "" "\n" @@ -15172,12 +15182,12 @@ msgstr "" "\n" "Berichten Sie Fehler an <%s>.\n" -#: main/main.c:361 +#: main/main.c:363 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Homepage: <%s>\n" -#: main/main.c:372 +#: main/main.c:374 #, c-format msgid "" "\"root\" execution of the PostgreSQL server is not permitted.\n" @@ -15191,12 +15201,12 @@ msgstr "" "Dokumentation finden Sie weitere Informationen darüber, wie der\n" "Server richtig gestartet wird.\n" -#: main/main.c:389 +#: main/main.c:391 #, 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:396 +#: main/main.c:398 #, c-format msgid "" "Execution of PostgreSQL by a user with administrative permissions is not\n" @@ -15226,8 +15236,8 @@ msgstr "ExtensibleNodeMethods »%s« wurde nicht registriert" 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:2567 -#: parser/parse_coerce.c:2705 parser/parse_coerce.c:2752 +#: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2604 +#: parser/parse_coerce.c:2742 parser/parse_coerce.c:2789 #: parser/parse_expr.c:2026 parser/parse_func.c:710 parser/parse_oper.c:883 #: utils/fmgr/funcapi.c:600 #, c-format @@ -15256,44 +15266,44 @@ 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:1322 parser/analyze.c:1720 parser/analyze.c:1976 +#: optimizer/plan/planner.c:1316 parser/analyze.c:1720 parser/analyze.c:1976 #: parser/analyze.c:3155 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s ist nicht in UNION/INTERSECT/EXCEPT erlaubt" -#: optimizer/plan/planner.c:1979 optimizer/plan/planner.c:3636 +#: optimizer/plan/planner.c:1973 optimizer/plan/planner.c:3630 #, c-format msgid "could not implement GROUP BY" msgstr "konnte GROUP BY nicht implementieren" -#: optimizer/plan/planner.c:1980 optimizer/plan/planner.c:3637 -#: optimizer/plan/planner.c:4394 optimizer/prep/prepunion.c:1046 +#: optimizer/plan/planner.c:1974 optimizer/plan/planner.c:3631 +#: optimizer/plan/planner.c:4388 optimizer/prep/prepunion.c:1045 #, 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:4393 +#: optimizer/plan/planner.c:4387 #, c-format msgid "could not implement DISTINCT" msgstr "konnte DISTINCT nicht implementieren" -#: optimizer/plan/planner.c:5241 +#: optimizer/plan/planner.c:5235 #, c-format msgid "could not implement window PARTITION BY" msgstr "konnte PARTITION BY für Fenster nicht implementieren" -#: optimizer/plan/planner.c:5242 +#: optimizer/plan/planner.c:5236 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "Fensterpartitionierungsspalten müssen sortierbare Datentypen haben." -#: optimizer/plan/planner.c:5246 +#: optimizer/plan/planner.c:5240 #, c-format msgid "could not implement window ORDER BY" msgstr "konnte ORDER BY für Fenster nicht implementieren" -#: optimizer/plan/planner.c:5247 +#: optimizer/plan/planner.c:5241 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "Fenstersortierspalten müssen sortierbare Datentypen haben." @@ -15314,7 +15324,7 @@ 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:1045 +#: optimizer/prep/prepunion.c:1044 #, c-format msgid "could not implement %s" msgstr "konnte %s nicht implementieren" @@ -16194,121 +16204,121 @@ 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:1383 +#: parser/parse_coerce.c:1420 #, c-format msgid "%s types %s and %s cannot be matched" msgstr "%s-Typen %s und %s passen nicht zusammen" -#: parser/parse_coerce.c:1499 +#: parser/parse_coerce.c:1536 #, c-format msgid "argument types %s and %s cannot be matched" msgstr "Argumenttypen %s und %s passen nicht zusammen" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1551 +#: parser/parse_coerce.c:1588 #, c-format msgid "%s could not convert type %s to %s" msgstr "%s konnte Typ %s nicht in %s umwandeln" -#: parser/parse_coerce.c:2154 parser/parse_coerce.c:2174 -#: parser/parse_coerce.c:2194 parser/parse_coerce.c:2215 -#: parser/parse_coerce.c:2270 parser/parse_coerce.c:2304 +#: parser/parse_coerce.c:2191 parser/parse_coerce.c:2211 +#: parser/parse_coerce.c:2231 parser/parse_coerce.c:2252 +#: parser/parse_coerce.c:2307 parser/parse_coerce.c:2341 #, c-format msgid "arguments declared \"%s\" are not all alike" msgstr "als »%s« deklarierte Argumente sind nicht alle gleich" -#: parser/parse_coerce.c:2249 parser/parse_coerce.c:2362 +#: parser/parse_coerce.c:2286 parser/parse_coerce.c:2399 #: utils/fmgr/funcapi.c:531 #, 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:2282 parser/parse_coerce.c:2432 +#: parser/parse_coerce.c:2319 parser/parse_coerce.c:2469 #: utils/fmgr/funcapi.c:545 #, 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:2316 parser/parse_coerce.c:2396 -#: parser/parse_coerce.c:2529 utils/fmgr/funcapi.c:563 utils/fmgr/funcapi.c:628 +#: parser/parse_coerce.c:2353 parser/parse_coerce.c:2433 +#: parser/parse_coerce.c:2566 utils/fmgr/funcapi.c:563 utils/fmgr/funcapi.c:628 #, 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:2353 +#: parser/parse_coerce.c:2390 #, c-format msgid "cannot determine element type of \"anyarray\" argument" msgstr "kann Elementtyp des Arguments mit Typ »anyarray« nicht bestimmen" -#: parser/parse_coerce.c:2379 parser/parse_coerce.c:2410 -#: parser/parse_coerce.c:2449 parser/parse_coerce.c:2515 +#: parser/parse_coerce.c:2416 parser/parse_coerce.c:2447 +#: parser/parse_coerce.c:2486 parser/parse_coerce.c:2552 #, 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:2474 +#: parser/parse_coerce.c:2511 #, 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:2488 +#: parser/parse_coerce.c:2525 #, 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:2498 +#: parser/parse_coerce.c:2535 #, 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:2559 +#: parser/parse_coerce.c:2596 #, c-format msgid "arguments of anycompatible family cannot be cast to a common type" msgstr "Argumente der anycompatible-Familie können nicht in einen gemeinsamen Typ umgewandelt werden" -#: parser/parse_coerce.c:2577 parser/parse_coerce.c:2598 -#: parser/parse_coerce.c:2648 parser/parse_coerce.c:2653 -#: parser/parse_coerce.c:2717 parser/parse_coerce.c:2729 +#: parser/parse_coerce.c:2614 parser/parse_coerce.c:2635 +#: parser/parse_coerce.c:2685 parser/parse_coerce.c:2690 +#: parser/parse_coerce.c:2754 parser/parse_coerce.c:2766 #, c-format msgid "could not determine polymorphic type %s because input has type %s" msgstr "konnte polymorphischen Typ %s nicht bestimmen, weil Eingabe Typ %s hat" -#: parser/parse_coerce.c:2587 +#: parser/parse_coerce.c:2624 #, 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:2608 +#: parser/parse_coerce.c:2645 #, c-format msgid "anycompatiblemultirange type %s does not match anycompatible type %s" msgstr "anycompatiblemultirange-Typ %s stimmt nicht mit anycompatible-Typ %s überein" -#: parser/parse_coerce.c:2622 +#: parser/parse_coerce.c:2659 #, 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:2857 +#: parser/parse_coerce.c:2894 #, c-format 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 anyrange oder anymultirange." -#: parser/parse_coerce.c:2874 +#: parser/parse_coerce.c:2911 #, c-format 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 anycompatiblerange oder anycompatiblemultirange." -#: parser/parse_coerce.c:2886 +#: parser/parse_coerce.c:2923 #, c-format 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, anyrange oder anymultirange." -#: parser/parse_coerce.c:2898 +#: parser/parse_coerce.c:2935 #, c-format msgid "A result of type %s requires at least one input of type anycompatible, anycompatiblearray, anycompatiblenonarray, anycompatiblerange, or anycompatiblemultirange." msgstr "Ein Ergebnis mit Typ %s benötigt mindestens eine Eingabe mit Typ anycompatible, anycompatiblearray, anycompatiblenonarray, anycompatiblerange oder anycompatiblemultirange." -#: parser/parse_coerce.c:2928 +#: parser/parse_coerce.c:2965 msgid "A result of type internal requires at least one input of type internal." msgstr "Ein Ergebnis mit Typ internal benötigt mindestens eine Eingabe mit Typ internal." @@ -17535,7 +17545,7 @@ msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELE msgstr "Regeln mit WHERE-Bedingungen können als Aktion nur SELECT, INSERT, UPDATE oder DELETE haben" #: parser/parse_utilcmd.c:3154 parser/parse_utilcmd.c:3255 -#: rewrite/rewriteHandler.c:533 rewrite/rewriteManip.c:1021 +#: rewrite/rewriteHandler.c:539 rewrite/rewriteManip.c:1022 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "UNION/INTERSECTION/EXCEPT mit Bedingung sind nicht implementiert" @@ -17845,12 +17855,12 @@ msgstr "Huge Pages werden auf dieser Plattform nicht unterstützt" msgid "huge pages not supported with the current shared_memory_type setting" msgstr "Huge Pages werden mit der aktuellen shared_memory_type-Einstellung nicht unterstützt" -#: port/pg_shmem.c:753 port/sysv_shmem.c:753 utils/init/miscinit.c:1180 +#: port/pg_shmem.c:753 port/sysv_shmem.c:753 utils/init/miscinit.c:1224 #, 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:756 port/sysv_shmem.c:756 utils/init/miscinit.c:1182 +#: port/pg_shmem.c:756 port/sysv_shmem.c:756 utils/init/miscinit.c:1226 #, 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." @@ -18009,32 +18019,32 @@ msgstr "konnte Autovacuum-Launcher-Prozess nicht starten (fork-Fehler): %m" msgid "could not fork autovacuum worker process: %m" msgstr "konnte Autovacuum-Worker-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/autovacuum.c:2317 +#: postmaster/autovacuum.c:2319 #, 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:2546 +#: postmaster/autovacuum.c:2548 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "automatisches Vacuum der Tabelle »%s.%s.%s«" -#: postmaster/autovacuum.c:2549 +#: postmaster/autovacuum.c:2551 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "automatisches Analysieren der Tabelle »%s.%s.%s«" -#: postmaster/autovacuum.c:2742 +#: postmaster/autovacuum.c:2744 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "verarbeite Arbeitseintrag für Relation »%s.%s.%s«" -#: postmaster/autovacuum.c:3428 +#: postmaster/autovacuum.c:3430 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "Autovacuum wegen Fehlkonfiguration nicht gestartet" -#: postmaster/autovacuum.c:3429 +#: postmaster/autovacuum.c:3431 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Schalten Sie die Option »track_counts« ein." @@ -18118,53 +18128,53 @@ msgstr "Checkpoint-Anforderung fehlgeschlagen" msgid "Consult recent messages in the server log for details." msgstr "Einzelheiten finden Sie in den letzten Meldungen im Serverlog." -#: postmaster/pgarch.c:365 +#: postmaster/pgarch.c:417 #, 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:387 +#: postmaster/pgarch.c:439 #, c-format msgid "removed orphan archive status file \"%s\"" msgstr "verwaiste Archivstatusdatei »%s« wurde entfernt" -#: postmaster/pgarch.c:397 +#: postmaster/pgarch.c:449 #, c-format msgid "removal of orphan archive status file \"%s\" failed too many times, will try again later" msgstr "Entfernen der verwaisten Archivstatusdatei »%s« schlug zu oft fehl, wird später erneut versucht" -#: postmaster/pgarch.c:433 +#: postmaster/pgarch.c:485 #, 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:534 +#: postmaster/pgarch.c:586 #, c-format msgid "archive command failed with exit code %d" msgstr "Archivbefehl ist fehlgeschlagen mit Statuscode %d" -#: postmaster/pgarch.c:536 postmaster/pgarch.c:546 postmaster/pgarch.c:552 -#: postmaster/pgarch.c:561 +#: postmaster/pgarch.c:588 postmaster/pgarch.c:598 postmaster/pgarch.c:604 +#: postmaster/pgarch.c:613 #, c-format msgid "The failed archive command was: %s" msgstr "Der fehlgeschlagene Archivbefehl war: %s" -#: postmaster/pgarch.c:543 +#: postmaster/pgarch.c:595 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "Archivbefehl wurde durch Ausnahme 0x%X beendet" -#: postmaster/pgarch.c:545 postmaster/postmaster.c:3758 +#: postmaster/pgarch.c:597 postmaster/postmaster.c:3759 #, 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:550 +#: postmaster/pgarch.c:602 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "Archivbefehl wurde von Signal %d beendet: %s" -#: postmaster/pgarch.c:559 +#: postmaster/pgarch.c:611 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "Archivbefehl hat mit unbekanntem Status %d beendet" @@ -18367,7 +18377,7 @@ msgid "starting %s" msgstr "%s startet" #: postmaster/postmaster.c:1161 postmaster/postmaster.c:1260 -#: utils/init/miscinit.c:1640 +#: utils/init/miscinit.c:1684 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "ungültige Listensyntax für Parameter »%s«" @@ -18417,32 +18427,32 @@ msgstr "%s: konnte externe PID-Datei »%s« nicht schreiben: %s\n" msgid "could not load pg_hba.conf" msgstr "konnte pg_hba.conf nicht laden" -#: postmaster/postmaster.c:1394 +#: postmaster/postmaster.c:1396 #, c-format msgid "postmaster became multithreaded during startup" msgstr "Postmaster ist während des Starts multithreaded geworden" -#: postmaster/postmaster.c:1395 +#: postmaster/postmaster.c:1397 postmaster/postmaster.c:5148 #, 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:1490 +#: postmaster/postmaster.c:1492 #, c-format msgid "%s: could not locate my own executable path" msgstr "%s: konnte Pfad des eigenen Programs nicht finden" -#: postmaster/postmaster.c:1497 +#: postmaster/postmaster.c:1499 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: konnte kein passendes Programm »postgres« finden" -#: postmaster/postmaster.c:1520 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1522 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:1547 +#: postmaster/postmaster.c:1549 #, c-format msgid "" "%s: could not find the database system\n" @@ -18453,476 +18463,476 @@ msgstr "" "Es wurde im Verzeichnis »%s« erwartet,\n" "aber die Datei »%s« konnte nicht geöffnet werden: %s\n" -#: postmaster/postmaster.c:1724 +#: postmaster/postmaster.c:1726 #, c-format msgid "select() failed in postmaster: %m" msgstr "select() fehlgeschlagen im Postmaster: %m" -#: postmaster/postmaster.c:1860 +#: postmaster/postmaster.c:1862 #, c-format msgid "issuing SIGKILL to recalcitrant children" msgstr "SIGKILL wird an ungehorsame Kinder gesendet" -#: postmaster/postmaster.c:1881 +#: postmaster/postmaster.c:1883 #, 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:1984 postmaster/postmaster.c:2012 +#: postmaster/postmaster.c:1986 postmaster/postmaster.c:2014 #, c-format msgid "incomplete startup packet" msgstr "unvollständiges Startpaket" -#: postmaster/postmaster.c:1996 postmaster/postmaster.c:2029 +#: postmaster/postmaster.c:1998 postmaster/postmaster.c:2031 #, c-format msgid "invalid length of startup packet" msgstr "ungültige Länge des Startpakets" -#: postmaster/postmaster.c:2058 +#: postmaster/postmaster.c:2060 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "konnte SSL-Verhandlungsantwort nicht senden: %m" -#: postmaster/postmaster.c:2076 +#: postmaster/postmaster.c:2078 #, c-format msgid "received unencrypted data after SSL request" msgstr "unverschlüsselte Daten nach SSL-Anforderung empfangen" -#: postmaster/postmaster.c:2077 postmaster/postmaster.c:2121 +#: postmaster/postmaster.c:2079 postmaster/postmaster.c:2123 #, c-format msgid "This could be either a client-software bug or evidence of an attempted man-in-the-middle attack." msgstr "Das könnte entweder ein Fehler in der Client-Software oder ein Hinweis auf einen versuchten Man-in-the-Middle-Angriff sein." -#: postmaster/postmaster.c:2102 +#: postmaster/postmaster.c:2104 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "konnte GSSAPI-Verhandlungsantwort nicht senden: %m" -#: postmaster/postmaster.c:2120 +#: postmaster/postmaster.c:2122 #, c-format msgid "received unencrypted data after GSSAPI encryption request" msgstr "unverschlüsselte Daten nach GSSAPI-Verschlüsselungsanforderung empfangen" -#: postmaster/postmaster.c:2144 +#: postmaster/postmaster.c:2146 #, 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:2208 utils/misc/guc.c:7138 utils/misc/guc.c:7174 -#: utils/misc/guc.c:7244 utils/misc/guc.c:8589 utils/misc/guc.c:11563 -#: utils/misc/guc.c:11604 +#: postmaster/postmaster.c:2210 utils/misc/guc.c:7138 utils/misc/guc.c:7174 +#: utils/misc/guc.c:7244 utils/misc/guc.c:8628 utils/misc/guc.c:11596 +#: utils/misc/guc.c:11637 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "ungültiger Wert für Parameter »%s«: »%s«" -#: postmaster/postmaster.c:2211 +#: postmaster/postmaster.c:2213 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "Gültige Werte sind: »false«, 0, »true«, 1, »database«." -#: postmaster/postmaster.c:2256 +#: postmaster/postmaster.c:2258 #, 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:2273 +#: postmaster/postmaster.c:2275 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "kein PostgreSQL-Benutzername im Startpaket angegeben" -#: postmaster/postmaster.c:2337 +#: postmaster/postmaster.c:2339 #, c-format msgid "the database system is starting up" msgstr "das Datenbanksystem startet" -#: postmaster/postmaster.c:2343 +#: postmaster/postmaster.c:2345 #, c-format msgid "the database system is not yet accepting connections" msgstr "das Datenbanksystem nimmt noch keine Verbindungen an" -#: postmaster/postmaster.c:2344 +#: postmaster/postmaster.c:2346 #, c-format msgid "Consistent recovery state has not been yet reached." msgstr "Konsistenter Wiederherstellungszustand wurde noch nicht erreicht." -#: postmaster/postmaster.c:2348 +#: postmaster/postmaster.c:2350 #, c-format msgid "the database system is not accepting connections" msgstr "das Datenbanksystem nimmt keine Verbindungen an" -#: postmaster/postmaster.c:2349 +#: postmaster/postmaster.c:2351 #, c-format msgid "Hot standby mode is disabled." msgstr "Hot-Standby-Modus ist deaktiviert." -#: postmaster/postmaster.c:2354 +#: postmaster/postmaster.c:2356 #, c-format msgid "the database system is shutting down" msgstr "das Datenbanksystem fährt herunter" -#: postmaster/postmaster.c:2359 +#: postmaster/postmaster.c:2361 #, c-format msgid "the database system is in recovery mode" msgstr "das Datenbanksystem ist im Wiederherstellungsmodus" -#: postmaster/postmaster.c:2364 storage/ipc/procarray.c:499 +#: postmaster/postmaster.c:2366 storage/ipc/procarray.c:499 #: 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:2454 +#: postmaster/postmaster.c:2456 #, c-format msgid "wrong key in cancel request for process %d" msgstr "falscher Schlüssel in Stornierungsanfrage für Prozess %d" -#: postmaster/postmaster.c:2466 +#: postmaster/postmaster.c:2468 #, 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:2720 +#: postmaster/postmaster.c:2721 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "SIGHUP empfangen, Konfigurationsdateien werden neu geladen" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2746 postmaster/postmaster.c:2750 +#: postmaster/postmaster.c:2747 postmaster/postmaster.c:2751 #, c-format msgid "%s was not reloaded" msgstr "%s wurde nicht neu geladen" -#: postmaster/postmaster.c:2760 +#: postmaster/postmaster.c:2761 #, c-format msgid "SSL configuration was not reloaded" msgstr "SSL-Konfiguration wurde nicht neu geladen" -#: postmaster/postmaster.c:2816 +#: postmaster/postmaster.c:2817 #, c-format msgid "received smart shutdown request" msgstr "intelligentes Herunterfahren verlangt" -#: postmaster/postmaster.c:2862 +#: postmaster/postmaster.c:2863 #, c-format msgid "received fast shutdown request" msgstr "schnelles Herunterfahren verlangt" -#: postmaster/postmaster.c:2880 +#: postmaster/postmaster.c:2881 #, c-format msgid "aborting any active transactions" msgstr "etwaige aktive Transaktionen werden abgebrochen" -#: postmaster/postmaster.c:2904 +#: postmaster/postmaster.c:2905 #, c-format msgid "received immediate shutdown request" msgstr "sofortiges Herunterfahren verlangt" -#: postmaster/postmaster.c:2981 +#: postmaster/postmaster.c:2982 #, c-format msgid "shutdown at recovery target" msgstr "Herunterfahren beim Wiederherstellungsziel" -#: postmaster/postmaster.c:2999 postmaster/postmaster.c:3035 +#: postmaster/postmaster.c:3000 postmaster/postmaster.c:3036 msgid "startup process" msgstr "Startprozess" -#: postmaster/postmaster.c:3002 +#: postmaster/postmaster.c:3003 #, c-format msgid "aborting startup due to startup process failure" msgstr "Serverstart abgebrochen wegen Startprozessfehler" -#: postmaster/postmaster.c:3077 +#: postmaster/postmaster.c:3078 #, c-format msgid "database system is ready to accept connections" msgstr "Datenbanksystem ist bereit, um Verbindungen anzunehmen" -#: postmaster/postmaster.c:3098 +#: postmaster/postmaster.c:3099 msgid "background writer process" msgstr "Background-Writer-Prozess" -#: postmaster/postmaster.c:3152 +#: postmaster/postmaster.c:3153 msgid "checkpointer process" msgstr "Checkpointer-Prozess" -#: postmaster/postmaster.c:3168 +#: postmaster/postmaster.c:3169 msgid "WAL writer process" msgstr "WAL-Schreibprozess" -#: postmaster/postmaster.c:3183 +#: postmaster/postmaster.c:3184 msgid "WAL receiver process" msgstr "WAL-Receiver-Prozess" -#: postmaster/postmaster.c:3198 +#: postmaster/postmaster.c:3199 msgid "autovacuum launcher process" msgstr "Autovacuum-Launcher-Prozess" -#: postmaster/postmaster.c:3216 +#: postmaster/postmaster.c:3217 msgid "archiver process" msgstr "Archivierprozess" -#: postmaster/postmaster.c:3231 +#: postmaster/postmaster.c:3232 msgid "statistics collector process" msgstr "Statistiksammelprozess" -#: postmaster/postmaster.c:3245 +#: postmaster/postmaster.c:3246 msgid "system logger process" msgstr "Systemlogger-Prozess" -#: postmaster/postmaster.c:3309 +#: postmaster/postmaster.c:3310 #, c-format msgid "background worker \"%s\"" msgstr "Background-Worker »%s«" -#: postmaster/postmaster.c:3393 postmaster/postmaster.c:3413 -#: postmaster/postmaster.c:3420 postmaster/postmaster.c:3438 +#: postmaster/postmaster.c:3394 postmaster/postmaster.c:3414 +#: postmaster/postmaster.c:3421 postmaster/postmaster.c:3439 msgid "server process" msgstr "Serverprozess" -#: postmaster/postmaster.c:3492 +#: postmaster/postmaster.c:3493 #, 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:3745 +#: postmaster/postmaster.c:3746 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) beendete mit Status %d" -#: postmaster/postmaster.c:3747 postmaster/postmaster.c:3759 -#: postmaster/postmaster.c:3769 postmaster/postmaster.c:3780 +#: postmaster/postmaster.c:3748 postmaster/postmaster.c:3760 +#: postmaster/postmaster.c:3770 postmaster/postmaster.c:3781 #, 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:3756 +#: postmaster/postmaster.c:3757 #, 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:3766 +#: postmaster/postmaster.c:3767 #, 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:3778 +#: postmaster/postmaster.c:3779 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) beendete mit unbekanntem Status %d" -#: postmaster/postmaster.c:3992 +#: postmaster/postmaster.c:3993 #, c-format msgid "abnormal database system shutdown" msgstr "abnormales Herunterfahren des Datenbanksystems" -#: postmaster/postmaster.c:4030 +#: postmaster/postmaster.c:4031 #, c-format msgid "shutting down due to startup process failure" msgstr "fahre herunter wegen Startprozessfehler" -#: postmaster/postmaster.c:4036 +#: postmaster/postmaster.c:4037 #, c-format msgid "shutting down because restart_after_crash is off" msgstr "fahre herunter, weil restart_after_crash aus ist" -#: postmaster/postmaster.c:4048 +#: postmaster/postmaster.c:4049 #, c-format msgid "all server processes terminated; reinitializing" msgstr "alle Serverprozesse beendet; initialisiere neu" -#: postmaster/postmaster.c:4222 postmaster/postmaster.c:5573 -#: postmaster/postmaster.c:5964 +#: postmaster/postmaster.c:4223 postmaster/postmaster.c:5575 +#: postmaster/postmaster.c:5966 #, c-format msgid "could not generate random cancel key" msgstr "konnte zufälligen Stornierungsschlüssel nicht erzeugen" -#: postmaster/postmaster.c:4276 +#: postmaster/postmaster.c:4277 #, 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:4318 +#: postmaster/postmaster.c:4319 msgid "could not fork new process for connection: " msgstr "konnte neuen Prozess für Verbindung nicht starten (fork-Fehler): " -#: postmaster/postmaster.c:4424 +#: postmaster/postmaster.c:4425 #, c-format msgid "connection received: host=%s port=%s" msgstr "Verbindung empfangen: Host=%s Port=%s" -#: postmaster/postmaster.c:4429 +#: postmaster/postmaster.c:4430 #, c-format msgid "connection received: host=%s" msgstr "Verbindung empfangen: Host=%s" -#: postmaster/postmaster.c:4672 +#: postmaster/postmaster.c:4673 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "konnte Serverprozess »%s« nicht ausführen: %m" -#: postmaster/postmaster.c:4730 +#: postmaster/postmaster.c:4731 #, c-format msgid "could not create backend parameter file mapping: error code %lu" msgstr "konnte Backend-Parameter-Datei-Mapping nicht erzeugen: Fehlercode %lu" -#: postmaster/postmaster.c:4739 +#: postmaster/postmaster.c:4740 #, c-format msgid "could not map backend parameter memory: error code %lu" msgstr "konnte Backend-Parameter-Speicher nicht mappen: Fehlercode %lu" -#: postmaster/postmaster.c:4766 +#: postmaster/postmaster.c:4767 #, c-format msgid "subprocess command line too long" msgstr "Kommandozeile für Subprozess zu lang" -#: postmaster/postmaster.c:4784 +#: postmaster/postmaster.c:4785 #, c-format msgid "CreateProcess() call failed: %m (error code %lu)" msgstr "Aufruf von CreateProcess() fehlgeschlagen: %m (Fehlercode %lu)" -#: postmaster/postmaster.c:4811 +#: postmaster/postmaster.c:4812 #, c-format msgid "could not unmap view of backend parameter file: error code %lu" msgstr "konnte Sicht der Backend-Parameter-Datei nicht unmappen: Fehlercode %lu" -#: postmaster/postmaster.c:4815 +#: postmaster/postmaster.c:4816 #, c-format msgid "could not close handle to backend parameter file: error code %lu" msgstr "konnte Handle für Backend-Parameter-Datei nicht schließen: Fehlercode %lu" -#: postmaster/postmaster.c:4837 +#: postmaster/postmaster.c:4838 #, 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:4838 +#: postmaster/postmaster.c:4839 #, 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:5020 +#: postmaster/postmaster.c:5021 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "SSL-Konfiguration konnte im Kindprozess nicht geladen werden" -#: postmaster/postmaster.c:5146 +#: postmaster/postmaster.c:5147 #, c-format -msgid "Please report this to <%s>." -msgstr "Bitte berichten Sie dies an <%s>." +msgid "postmaster became multithreaded" +msgstr "Postmaster ist multithreaded geworden" -#: postmaster/postmaster.c:5233 +#: postmaster/postmaster.c:5235 #, c-format msgid "database system is ready to accept read-only connections" msgstr "Datenbanksystem ist bereit, um lesende Verbindungen anzunehmen" -#: postmaster/postmaster.c:5497 +#: postmaster/postmaster.c:5499 #, c-format msgid "could not fork startup process: %m" msgstr "konnte Startprozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5501 +#: postmaster/postmaster.c:5503 #, c-format msgid "could not fork archiver process: %m" msgstr "konnte Archivierer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5505 +#: postmaster/postmaster.c:5507 #, c-format msgid "could not fork background writer process: %m" msgstr "konnte Background-Writer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5509 +#: postmaster/postmaster.c:5511 #, c-format msgid "could not fork checkpointer process: %m" msgstr "konnte Checkpointer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5513 +#: postmaster/postmaster.c:5515 #, c-format msgid "could not fork WAL writer process: %m" msgstr "konnte WAL-Writer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5517 +#: postmaster/postmaster.c:5519 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "konnte WAL-Receiver-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5521 +#: postmaster/postmaster.c:5523 #, c-format msgid "could not fork process: %m" msgstr "konnte Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5722 postmaster/postmaster.c:5745 +#: postmaster/postmaster.c:5724 postmaster/postmaster.c:5747 #, 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:5729 postmaster/postmaster.c:5752 +#: postmaster/postmaster.c:5731 postmaster/postmaster.c:5754 #, c-format msgid "invalid processing mode in background worker" msgstr "ungültiger Verarbeitungsmodus in Background-Worker" -#: postmaster/postmaster.c:5837 +#: postmaster/postmaster.c:5839 #, c-format msgid "could not fork worker process: %m" msgstr "konnte Worker-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5950 +#: postmaster/postmaster.c:5952 #, c-format msgid "no slot available for new worker process" msgstr "kein Slot für neuen Worker-Prozess verfügbar" -#: postmaster/postmaster.c:6284 +#: postmaster/postmaster.c:6286 #, 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:6316 +#: postmaster/postmaster.c:6318 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "konnte geerbtes Socket nicht erzeugen: Fehlercode %d\n" -#: postmaster/postmaster.c:6345 +#: postmaster/postmaster.c:6347 #, c-format msgid "could not open backend variables file \"%s\": %s\n" msgstr "konnte Servervariablendatei »%s« nicht öffnen: %s\n" -#: postmaster/postmaster.c:6352 +#: postmaster/postmaster.c:6354 #, 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:6361 +#: postmaster/postmaster.c:6363 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "konnte Datei »%s« nicht löschen: %s\n" -#: postmaster/postmaster.c:6378 +#: postmaster/postmaster.c:6380 #, 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:6387 +#: postmaster/postmaster.c:6389 #, 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:6394 +#: postmaster/postmaster.c:6396 #, 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:6556 +#: postmaster/postmaster.c:6558 #, c-format msgid "could not read exit code for process\n" msgstr "konnte Exitcode des Prozesses nicht lesen\n" -#: postmaster/postmaster.c:6598 +#: postmaster/postmaster.c:6600 #, c-format msgid "could not post child completion status\n" msgstr "konnte Child-Completion-Status nicht versenden\n" @@ -19716,42 +19726,42 @@ msgstr "Apply-Worker für logische Replikation für Subskription »%s« hat gest msgid "subscription has no replication slot set" msgstr "für die Subskription ist kein Replikations-Slot gesetzt" -#: replication/pgoutput/pgoutput.c:196 +#: replication/pgoutput/pgoutput.c:205 #, c-format msgid "invalid proto_version" msgstr "ungültige proto_version" -#: replication/pgoutput/pgoutput.c:201 +#: replication/pgoutput/pgoutput.c:210 #, c-format msgid "proto_version \"%s\" out of range" msgstr "proto_version »%s« ist außerhalb des gültigen Bereichs" -#: replication/pgoutput/pgoutput.c:218 +#: replication/pgoutput/pgoutput.c:227 #, c-format msgid "invalid publication_names syntax" msgstr "ungültige Syntax für publication_names" -#: replication/pgoutput/pgoutput.c:289 +#: replication/pgoutput/pgoutput.c:324 #, 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:295 +#: replication/pgoutput/pgoutput.c:330 #, 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:301 +#: replication/pgoutput/pgoutput.c:336 #, c-format msgid "publication_names parameter missing" msgstr "Parameter »publication_names« fehlt" -#: replication/pgoutput/pgoutput.c:314 +#: replication/pgoutput/pgoutput.c:349 #, c-format msgid "requested proto_version=%d does not support streaming, need %d or higher" msgstr "angeforderte proto_version=%d unterstützt Streaming nicht, benötigt %d oder höher" -#: replication/pgoutput/pgoutput.c:319 +#: replication/pgoutput/pgoutput.c:354 #, c-format msgid "streaming requested, but not supported by output plugin" msgstr "Streaming angefordert, aber wird vom Ausgabe-Plugin nicht unterstützt" @@ -20032,7 +20042,7 @@ msgstr "hole Zeitleisten-History-Datei für Zeitleiste %u vom Primärserver" 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:525 storage/smgr/md.c:1324 +#: replication/walsender.c:525 storage/smgr/md.c:1336 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "konnte Positionszeiger nicht ans Ende der Datei »%s« setzen: %m" @@ -20370,218 +20380,218 @@ msgstr "Regel »%s« für Relation »%s« existiert nicht" msgid "renaming an ON SELECT rule is not allowed" msgstr "Umbenennen einer ON-SELECT-Regel ist nicht erlaubt" -#: rewrite/rewriteHandler.c:577 +#: rewrite/rewriteHandler.c:583 #, 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:604 +#: rewrite/rewriteHandler.c:610 #, c-format msgid "INSERT...SELECT rule actions are not supported for queries having data-modifying statements in WITH" msgstr "INSTEAD...SELECT-Regelaktionen werden für Anfrangen mit datenmodifizierenden Anweisungen in WITH nicht unterstützt" -#: rewrite/rewriteHandler.c:657 +#: rewrite/rewriteHandler.c:663 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "RETURNING-Listen können nicht in mehreren Regeln auftreten" -#: rewrite/rewriteHandler.c:889 rewrite/rewriteHandler.c:928 +#: rewrite/rewriteHandler.c:895 rewrite/rewriteHandler.c:934 #, c-format msgid "cannot insert a non-DEFAULT value into column \"%s\"" msgstr "kann keinen Wert außer DEFAULT in Spalte »%s« einfügen" -#: rewrite/rewriteHandler.c:891 rewrite/rewriteHandler.c:957 +#: rewrite/rewriteHandler.c:897 rewrite/rewriteHandler.c:963 #, 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:893 +#: rewrite/rewriteHandler.c:899 #, 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:955 rewrite/rewriteHandler.c:963 +#: rewrite/rewriteHandler.c:961 rewrite/rewriteHandler.c:969 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "Spalte »%s« kann nur auf DEFAULT aktualisiert werden" -#: rewrite/rewriteHandler.c:1110 rewrite/rewriteHandler.c:1128 +#: rewrite/rewriteHandler.c:1104 rewrite/rewriteHandler.c:1122 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "mehrere Zuweisungen zur selben Spalte »%s«" -#: rewrite/rewriteHandler.c:1739 rewrite/rewriteHandler.c:3141 +#: rewrite/rewriteHandler.c:1723 rewrite/rewriteHandler.c:3174 #, c-format msgid "access to non-system view \"%s\" is restricted" msgstr "Zugriff auf Nicht-System-Sicht »%s« ist beschränkt" -#: rewrite/rewriteHandler.c:2148 rewrite/rewriteHandler.c:4027 +#: rewrite/rewriteHandler.c:2151 rewrite/rewriteHandler.c:4060 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "unendliche Rekursion entdeckt in Regeln für Relation »%s«" -#: rewrite/rewriteHandler.c:2233 +#: rewrite/rewriteHandler.c:2256 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "unendliche Rekursion entdeckt in Policys für Relation »%s«" -#: rewrite/rewriteHandler.c:2553 +#: rewrite/rewriteHandler.c:2586 msgid "Junk view columns are not updatable." msgstr "Junk-Sichtspalten sind nicht aktualisierbar." -#: rewrite/rewriteHandler.c:2558 +#: rewrite/rewriteHandler.c:2591 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:2561 +#: rewrite/rewriteHandler.c:2594 msgid "View columns that refer to system columns are not updatable." msgstr "Sichtspalten, die auf Systemspalten verweisen, sind nicht aktualisierbar." -#: rewrite/rewriteHandler.c:2564 +#: rewrite/rewriteHandler.c:2597 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:2625 +#: rewrite/rewriteHandler.c:2658 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Sichten, die DISTINCT enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2628 +#: rewrite/rewriteHandler.c:2661 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Sichten, die GROUP BY enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2631 +#: rewrite/rewriteHandler.c:2664 msgid "Views containing HAVING are not automatically updatable." msgstr "Sichten, die HAVING enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2634 +#: rewrite/rewriteHandler.c:2667 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:2637 +#: rewrite/rewriteHandler.c:2670 msgid "Views containing WITH are not automatically updatable." msgstr "Sichten, die WITH enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2640 +#: rewrite/rewriteHandler.c:2673 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Sichten, die LIMIT oder OFFSET enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2652 +#: rewrite/rewriteHandler.c:2685 msgid "Views that return aggregate functions are not automatically updatable." msgstr "Sichten, die Aggregatfunktionen zurückgeben, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2655 +#: rewrite/rewriteHandler.c:2688 msgid "Views that return window functions are not automatically updatable." msgstr "Sichten, die Fensterfunktionen zurückgeben, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2658 +#: rewrite/rewriteHandler.c:2691 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:2665 rewrite/rewriteHandler.c:2669 -#: rewrite/rewriteHandler.c:2677 +#: rewrite/rewriteHandler.c:2698 rewrite/rewriteHandler.c:2702 +#: rewrite/rewriteHandler.c:2710 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:2680 +#: rewrite/rewriteHandler.c:2713 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Sichten, die TABLESAMPLE enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2704 +#: rewrite/rewriteHandler.c:2737 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:3201 +#: rewrite/rewriteHandler.c:3234 #, 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:3209 +#: rewrite/rewriteHandler.c:3242 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "kann Spalte »%s« von Sicht »%s« nicht aktualisieren" -#: rewrite/rewriteHandler.c:3691 +#: rewrite/rewriteHandler.c:3724 #, c-format msgid "DO INSTEAD NOTIFY rules are not supported for data-modifying statements in WITH" msgstr "DO-INSTEAD-NOTIFY-Regeln werden für datenmodifizierende Anweisungen in WITH nicht unterstützt" -#: rewrite/rewriteHandler.c:3702 +#: rewrite/rewriteHandler.c:3735 #, 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:3716 +#: rewrite/rewriteHandler.c:3749 #, 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:3720 +#: rewrite/rewriteHandler.c:3753 #, 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:3725 +#: rewrite/rewriteHandler.c:3758 #, 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:3955 rewrite/rewriteHandler.c:3963 -#: rewrite/rewriteHandler.c:3971 +#: rewrite/rewriteHandler.c:3988 rewrite/rewriteHandler.c:3996 +#: rewrite/rewriteHandler.c:4004 #, 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:4076 +#: rewrite/rewriteHandler.c:4109 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "INSERT RETURNING kann in Relation »%s« nicht ausgeführt werden" -#: rewrite/rewriteHandler.c:4078 +#: rewrite/rewriteHandler.c:4111 #, 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:4083 +#: rewrite/rewriteHandler.c:4116 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "UPDATE RETURNING kann in Relation »%s« nicht ausgeführt werden" -#: rewrite/rewriteHandler.c:4085 +#: rewrite/rewriteHandler.c:4118 #, 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:4090 +#: rewrite/rewriteHandler.c:4123 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "DELETE RETURNING kann in Relation »%s« nicht ausgeführt werden" -#: rewrite/rewriteHandler.c:4092 +#: rewrite/rewriteHandler.c:4125 #, 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:4110 +#: rewrite/rewriteHandler.c:4143 #, 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:4167 +#: rewrite/rewriteHandler.c:4200 #, 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" -#: rewrite/rewriteManip.c:1009 +#: rewrite/rewriteManip.c:1010 #, c-format msgid "conditional utility statements are not implemented" msgstr "Utility-Anweisungen mit Bedingung sind nicht implementiert" -#: rewrite/rewriteManip.c:1175 +#: rewrite/rewriteManip.c:1176 #, c-format msgid "WHERE CURRENT OF on a view is not implemented" msgstr "WHERE CURRENT OF mit einer Sicht ist nicht implementiert" -#: rewrite/rewriteManip.c:1510 +#: rewrite/rewriteManip.c:1512 #, 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-Variablen in ON UPDATE-Regeln können nicht auf Spalten verweisen, die Teil einer Mehrfachzuweisung in dem UPDATE-Befehl sind" @@ -20796,7 +20806,7 @@ msgstr "konnte Größe von temporärer Datei »%s« von BufFile »%s« nicht bes msgid "could not delete shared fileset \"%s\": %m" msgstr "konnte geteiltes Datei-Set »%s« nicht löschen: %m" -#: storage/file/buffile.c:902 storage/smgr/md.c:309 storage/smgr/md.c:869 +#: storage/file/buffile.c:902 storage/smgr/md.c:309 storage/smgr/md.c:871 #, c-format msgid "could not truncate file \"%s\": %m" msgstr "kann Datei »%s« nicht kürzen: %m" @@ -21468,22 +21478,22 @@ msgstr "konnte Block %u in Datei »%s« nicht schreiben: %m" 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:840 +#: storage/smgr/md.c:842 #, 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:895 +#: storage/smgr/md.c:897 #, 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:1289 +#: storage/smgr/md.c:1301 #, 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:1303 +#: storage/smgr/md.c:1315 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "konnte Datei »%s« nicht öffnen (Zielblock %u): %m" @@ -21529,7 +21539,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:449 tcop/postgres.c:4831 +#: tcop/postgres.c:449 tcop/postgres.c:4836 #, c-format msgid "invalid frontend message type %d" msgstr "ungültiger Frontend-Message-Typ %d" @@ -21777,47 +21787,47 @@ msgstr "»max_stack_depth« darf %ldkB nicht überschreiten." 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:4008 +#: tcop/postgres.c:4013 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "ungültiges Kommandozeilenargument für Serverprozess: %s" -#: tcop/postgres.c:4009 tcop/postgres.c:4015 +#: tcop/postgres.c:4014 tcop/postgres.c:4020 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Versuchen Sie »%s --help« für weitere Informationen." -#: tcop/postgres.c:4013 +#: tcop/postgres.c:4018 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: ungültiges Kommandozeilenargument: %s" -#: tcop/postgres.c:4076 +#: tcop/postgres.c:4081 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: weder Datenbankname noch Benutzername angegeben" -#: tcop/postgres.c:4733 +#: tcop/postgres.c:4738 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "ungültiger Subtyp %d von CLOSE-Message" -#: tcop/postgres.c:4768 +#: tcop/postgres.c:4773 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "ungültiger Subtyp %d von DESCRIBE-Message" -#: tcop/postgres.c:4852 +#: tcop/postgres.c:4857 #, 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:4856 +#: tcop/postgres.c:4861 #, 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:5033 +#: tcop/postgres.c:5038 #, 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" @@ -21827,12 +21837,12 @@ msgstr "Verbindungsende: Sitzungszeit: %d:%02d:%02d.%03d Benutzer=%s Datenbank=% 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:941 tcop/pquery.c:1703 +#: tcop/pquery.c:939 tcop/pquery.c:1698 #, c-format msgid "cursor can only scan forward" msgstr "Cursor kann nur vorwärts scannen" -#: tcop/pquery.c:942 tcop/pquery.c:1704 +#: tcop/pquery.c:940 tcop/pquery.c:1699 #, 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." @@ -24547,7 +24557,7 @@ msgid "more than one operator named %s" msgstr "es gibt mehrere Operatoren namens %s" #: utils/adt/regproc.c:715 utils/adt/regproc.c:756 utils/adt/regproc.c:2055 -#: utils/adt/ruleutils.c:9822 utils/adt/ruleutils.c:9991 +#: utils/adt/ruleutils.c:9828 utils/adt/ruleutils.c:9997 #, c-format msgid "too many arguments" msgstr "zu viele Argumente" @@ -24733,7 +24743,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:12468 +#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12501 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp ist außerhalb des gültigen Bereichs: »%s«" @@ -25720,178 +25730,173 @@ msgstr "Spaltenalias fehlt" 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:314 +#: utils/init/miscinit.c:315 #, c-format msgid "data directory \"%s\" does not exist" msgstr "Datenverzeichnis »%s« existiert nicht" -#: utils/init/miscinit.c:319 +#: 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:327 +#: 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:343 +#: 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:345 +#: 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:363 +#: 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:365 +#: 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:650 utils/misc/guc.c:7520 +#: utils/init/miscinit.c:684 utils/misc/guc.c:7520 #, 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:718 +#: utils/init/miscinit.c:763 #, c-format msgid "role with OID %u does not exist" msgstr "Rolle mit OID %u existiert nicht" -#: utils/init/miscinit.c:748 +#: utils/init/miscinit.c:808 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "Rolle »%s« hat keine Berechtigung zum Einloggen" -#: utils/init/miscinit.c:766 +#: utils/init/miscinit.c:829 #, c-format msgid "too many connections for role \"%s\"" msgstr "zu viele Verbindungen von Rolle »%s«" -#: utils/init/miscinit.c:834 -#, c-format -msgid "permission denied to set session authorization" -msgstr "keine Berechtigung, um Sitzungsautorisierung zu setzen" - -#: utils/init/miscinit.c:917 +#: utils/init/miscinit.c:961 #, c-format msgid "invalid role OID: %u" msgstr "ungültige Rollen-OID: %u" -#: utils/init/miscinit.c:971 +#: utils/init/miscinit.c:1015 #, c-format msgid "database system is shut down" msgstr "Datenbanksystem ist heruntergefahren" -#: utils/init/miscinit.c:1058 +#: utils/init/miscinit.c:1102 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "konnte Sperrdatei »%s« nicht erstellen: %m" -#: utils/init/miscinit.c:1072 +#: utils/init/miscinit.c:1116 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "konnte Sperrdatei »%s« nicht öffnen: %m" -#: utils/init/miscinit.c:1079 +#: utils/init/miscinit.c:1123 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "konnte Sperrdatei »%s« nicht lesen: %m" -#: utils/init/miscinit.c:1088 +#: utils/init/miscinit.c:1132 #, c-format msgid "lock file \"%s\" is empty" msgstr "Sperrdatei »%s« ist leer" -#: utils/init/miscinit.c:1089 +#: utils/init/miscinit.c:1133 #, 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:1133 +#: utils/init/miscinit.c:1177 #, c-format msgid "lock file \"%s\" already exists" msgstr "Sperrdatei »%s« existiert bereits" -#: utils/init/miscinit.c:1137 +#: utils/init/miscinit.c:1181 #, 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:1139 +#: utils/init/miscinit.c:1183 #, 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:1142 +#: utils/init/miscinit.c:1186 #, 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:1144 +#: utils/init/miscinit.c:1188 #, 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:1195 +#: utils/init/miscinit.c:1239 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "konnte alte Sperrdatei »%s« nicht löschen: %m" -#: utils/init/miscinit.c:1197 +#: utils/init/miscinit.c:1241 #, 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:1234 utils/init/miscinit.c:1248 -#: utils/init/miscinit.c:1259 +#: utils/init/miscinit.c:1278 utils/init/miscinit.c:1292 +#: utils/init/miscinit.c:1303 #, c-format msgid "could not write lock file \"%s\": %m" msgstr "konnte Sperrdatei »%s« nicht schreiben: %m" -#: utils/init/miscinit.c:1370 utils/init/miscinit.c:1512 utils/misc/guc.c:10434 +#: utils/init/miscinit.c:1414 utils/init/miscinit.c:1556 utils/misc/guc.c:10473 #, c-format msgid "could not read from file \"%s\": %m" msgstr "konnte nicht aus Datei »%s« lesen: %m" -#: utils/init/miscinit.c:1500 +#: utils/init/miscinit.c:1544 #, 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:1525 +#: utils/init/miscinit.c:1569 #, 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:1564 utils/init/miscinit.c:1580 +#: utils/init/miscinit.c:1608 utils/init/miscinit.c:1624 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "»%s« ist kein gültiges Datenverzeichnis" -#: utils/init/miscinit.c:1566 +#: utils/init/miscinit.c:1610 #, c-format msgid "File \"%s\" is missing." msgstr "Die Datei »%s« fehlt." -#: utils/init/miscinit.c:1582 +#: utils/init/miscinit.c:1626 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "Die Datei »%s« enthält keine gültigen Daten." -#: utils/init/miscinit.c:1584 +#: utils/init/miscinit.c:1628 #, c-format msgid "You might need to initdb." msgstr "Sie müssen möglicherweise initdb ausführen." -#: utils/init/miscinit.c:1592 +#: utils/init/miscinit.c:1636 #, 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." @@ -25966,87 +25971,87 @@ msgstr "keine Berechtigung für Datenbank »%s«" msgid "User does not have CONNECT privilege." msgstr "Benutzer hat das CONNECT-Privileg nicht." -#: utils/init/postinit.c:376 +#: utils/init/postinit.c:379 #, c-format msgid "too many connections for database \"%s\"" msgstr "zu viele Verbindungen für Datenbank »%s«" -#: utils/init/postinit.c:398 utils/init/postinit.c:405 +#: utils/init/postinit.c:401 utils/init/postinit.c:408 #, c-format msgid "database locale is incompatible with operating system" msgstr "Datenbank-Locale ist inkompatibel mit Betriebssystem" -#: utils/init/postinit.c:399 +#: utils/init/postinit.c:402 #, 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:401 utils/init/postinit.c:408 +#: utils/init/postinit.c:404 utils/init/postinit.c:411 #, 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:406 +#: utils/init/postinit.c:409 #, 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:761 +#: utils/init/postinit.c:764 #, c-format msgid "no roles are defined in this database system" msgstr "in diesem Datenbanksystem sind keine Rollen definiert" -#: utils/init/postinit.c:762 +#: utils/init/postinit.c:765 #, 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:798 +#: utils/init/postinit.c:801 #, 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:802 +#: utils/init/postinit.c:805 #, 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:812 +#: utils/init/postinit.c:815 #, 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:825 +#: utils/init/postinit.c:828 #, 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:835 +#: utils/init/postinit.c:838 #, 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:904 +#: utils/init/postinit.c:907 #, c-format msgid "database %u does not exist" msgstr "Datenbank %u existiert nicht" -#: utils/init/postinit.c:994 +#: utils/init/postinit.c:997 #, 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:1001 +#: utils/init/postinit.c:1004 #, c-format msgid "cannot connect to invalid database \"%s\"" msgstr "mit ungültiger Datenbank »%s« kann nicht verbunden werden" -#: utils/init/postinit.c:1021 +#: utils/init/postinit.c:1024 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "Das Datenbankunterverzeichnis »%s« fehlt." -#: utils/init/postinit.c:1026 +#: utils/init/postinit.c:1029 #, c-format msgid "could not access directory \"%s\": %m" msgstr "konnte nicht auf Verzeichnis »%s« zugreifen: %m" @@ -26655,8 +26660,8 @@ 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:1769 -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." +msgid "Start a subprocess to capture stderr, csvlog and/or jsonlog into log files." +msgstr "Startet einen Subprozess, um stderr, csvlog und/oder jsonlog in Logdateien auszugeben." #: utils/misc/guc.c:1778 msgid "Truncate existing log files of same name during log rotation." @@ -28002,7 +28007,7 @@ msgstr "ungültiger Konfigurationsparametername »%s«" msgid "Custom parameter names must be two or more simple identifiers separated by dots." msgstr "Selbstdefinierte Parameternamen müssen zwei oder mehr einfache Bezeichner getrennt durch Punkte sein." -#: utils/misc/guc.c:5555 utils/misc/guc.c:9327 +#: utils/misc/guc.c:5555 utils/misc/guc.c:9366 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "unbekannter Konfigurationsparameter »%s«" @@ -28081,7 +28086,7 @@ msgstr "%g%s%s ist außerhalb des gültigen Bereichs für Parameter »%s« (%g . msgid "parameter \"%s\" cannot be set during a parallel operation" msgstr "Parameter »%s« kann nicht während einer parallelen Operation gesetzt werden" -#: utils/misc/guc.c:7372 utils/misc/guc.c:8572 +#: utils/misc/guc.c:7372 utils/misc/guc.c:8611 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "Parameter »%s« kann nicht geändert werden" @@ -28091,7 +28096,7 @@ msgstr "Parameter »%s« kann nicht geändert werden" msgid "parameter \"%s\" cannot be changed now" msgstr "Parameter »%s« kann jetzt nicht geändert werden" -#: utils/misc/guc.c:7423 utils/misc/guc.c:7474 utils/misc/guc.c:11390 +#: utils/misc/guc.c:7423 utils/misc/guc.c:7474 utils/misc/guc.c:11423 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "keine Berechtigung, um Parameter »%s« zu setzen" @@ -28106,142 +28111,142 @@ msgstr "Parameter »%s« kann nach Start der Verbindung nicht geändert werden" 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:8145 utils/misc/guc.c:8192 utils/misc/guc.c:9606 +#: utils/misc/guc.c:8184 utils/misc/guc.c:8231 utils/misc/guc.c:9645 #, 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:8276 +#: utils/misc/guc.c:8315 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s darf nur ein Argument haben" -#: utils/misc/guc.c:8524 +#: utils/misc/guc.c:8563 #, 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:8605 +#: utils/misc/guc.c:8644 #, 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:8650 +#: utils/misc/guc.c:8689 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "konnte Inhalt der Datei »%s« nicht parsen" -#: utils/misc/guc.c:8731 +#: utils/misc/guc.c:8770 #, 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:8807 +#: utils/misc/guc.c:8846 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT ist nicht implementiert" -#: utils/misc/guc.c:8891 +#: utils/misc/guc.c:8930 #, c-format msgid "SET requires parameter name" msgstr "SET benötigt Parameternamen" -#: utils/misc/guc.c:9024 +#: utils/misc/guc.c:9063 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "Versuch, den Parameter »%s« zu redefinieren" -#: utils/misc/guc.c:10837 +#: utils/misc/guc.c:10870 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "beim Setzen von Parameter »%s« auf »%s«" -#: utils/misc/guc.c:11002 +#: utils/misc/guc.c:11035 #, c-format msgid "parameter \"%s\" could not be set" msgstr "Parameter »%s« kann nicht gesetzt werden" -#: utils/misc/guc.c:11094 +#: utils/misc/guc.c:11127 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "konnte Wert von Parameter »%s« nicht lesen" -#: utils/misc/guc.c:11452 utils/misc/guc.c:11486 +#: utils/misc/guc.c:11485 utils/misc/guc.c:11519 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "ungültiger Wert für Parameter »%s«: %d" -#: utils/misc/guc.c:11520 +#: utils/misc/guc.c:11553 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "ungültiger Wert für Parameter »%s«: %g" -#: utils/misc/guc.c:11807 +#: utils/misc/guc.c:11840 #, 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:11819 +#: utils/misc/guc.c:11852 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour wird von dieser Installation nicht unterstützt" -#: utils/misc/guc.c:11832 +#: utils/misc/guc.c:11865 #, c-format msgid "SSL is not supported by this build" msgstr "SSL wird von dieser Installation nicht unterstützt" -#: utils/misc/guc.c:11844 +#: utils/misc/guc.c:11877 #, 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:11856 +#: utils/misc/guc.c:11889 #, 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:12086 +#: utils/misc/guc.c:12119 #, 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:12099 +#: utils/misc/guc.c:12132 #, 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:12113 +#: utils/misc/guc.c:12146 #, c-format msgid "huge_page_size must be 0 on this platform." msgstr "huge_page_size muss auf dieser Plattform 0 sein." -#: utils/misc/guc.c:12127 +#: utils/misc/guc.c:12160 #, c-format msgid "client_connection_check_interval must be set to 0 on platforms that lack POLLRDHUP." msgstr "client_connection_check_interval muss auf Plattformen ohne POLLRDHUP auf 0 gesetzt sein." -#: utils/misc/guc.c:12255 +#: utils/misc/guc.c:12288 #, c-format msgid "invalid character" msgstr "ungültiges Zeichen" -#: utils/misc/guc.c:12315 +#: utils/misc/guc.c:12348 #, c-format msgid "recovery_target_timeline is not a valid number." msgstr "recovery_target_timeline ist keine gültige Zahl." -#: utils/misc/guc.c:12355 +#: utils/misc/guc.c:12388 #, c-format msgid "multiple recovery targets specified" msgstr "mehrere Wiederherstellungsziele angegeben" -#: utils/misc/guc.c:12356 +#: utils/misc/guc.c:12389 #, 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:12364 +#: utils/misc/guc.c:12397 #, 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 209385bd1b0..3fc74ca6946 100644 --- a/src/backend/po/es.po +++ b/src/backend/po/es.po @@ -62,7 +62,7 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL server 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-11-09 06:30+0000\n" +"POT-Creation-Date: 2024-12-05 18:26+0000\n" "PO-Revision-Date: 2023-05-08 11:28+0200\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -175,8 +175,8 @@ msgstr "" #: storage/file/fd.c:713 storage/file/fd.c:3306 storage/file/fd.c:3524 #: storage/file/fd.c:3611 storage/smgr/md.c:506 utils/cache/relmapper.c:724 #: utils/cache/relmapper.c:842 utils/error/elog.c:1958 -#: utils/init/miscinit.c:1359 utils/init/miscinit.c:1493 -#: utils/init/miscinit.c:1570 utils/misc/guc.c:8643 utils/misc/guc.c:8675 +#: utils/init/miscinit.c:1406 utils/init/miscinit.c:1540 +#: utils/init/miscinit.c:1617 utils/misc/guc.c:8682 utils/misc/guc.c:8714 #, c-format msgid "could not open file \"%s\": %m" msgstr "no se pudo abrir el archivo «%s»: %m" @@ -201,7 +201,7 @@ msgstr "no se pudo escribir el archivo «%s»: %m" #: access/transam/xlog.c:10946 replication/logical/snapbuild.c:1774 #: replication/slot.c:1604 replication/slot.c:1709 storage/file/fd.c:730 #: storage/file/fd.c:3632 storage/smgr/md.c:954 storage/smgr/md.c:995 -#: storage/sync/sync.c:454 utils/cache/relmapper.c:891 utils/misc/guc.c:8430 +#: storage/sync/sync.c:454 utils/cache/relmapper.c:891 utils/misc/guc.c:8469 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "no se pudo sincronizar (fsync) archivo «%s»: %m" @@ -221,14 +221,14 @@ msgstr "no se pudo sincronizar (fsync) archivo «%s»: %m" #: storage/file/fd.c:1521 storage/file/fd.c:2329 storage/ipc/procarray.c:1472 #: storage/ipc/procarray.c:2293 storage/ipc/procarray.c:2300 #: storage/ipc/procarray.c:2805 storage/ipc/procarray.c:3482 -#: 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 +#: tcop/postgres.c:3655 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:5061 -#: utils/misc/guc.c:5077 utils/misc/guc.c:5090 utils/misc/guc.c:8408 +#: utils/misc/guc.c:5077 utils/misc/guc.c:5090 utils/misc/guc.c:8447 #: utils/misc/tzparser.c:476 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:702 #: utils/mmgr/dsa.c:724 utils/mmgr/dsa.c:805 utils/mmgr/generation.c:234 #: utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 @@ -259,7 +259,7 @@ msgstr "no se pudo leer el binario «%s»" msgid "could not find a \"%s\" to execute" msgstr "no se pudo encontrar un «%s» para ejecutar" -#: ../common/exec.c:282 ../common/exec.c:321 utils/init/miscinit.c:424 +#: ../common/exec.c:282 ../common/exec.c:321 utils/init/miscinit.c:425 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "no se pudo cambiar al directorio «%s»: %m" @@ -827,7 +827,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:1294 utils/misc/guc.c:12571 +#: access/common/reloptions.c:1294 utils/misc/guc.c:12604 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "las tablas declaradas WITH OIDS no están soportadas" @@ -939,7 +939,7 @@ 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:145 executor/execExpr.c:2169 +#: access/gin/ginutil.c:145 executor/execExpr.c:2177 #: utils/adt/arrayfuncs.c:3873 utils/adt/arrayfuncs.c:6541 #: utils/adt/rowtypes.c:957 #, c-format @@ -1027,7 +1027,7 @@ msgstr "no se pudo determinar qué ordenamiento usar para el hashing de cadenas" #: access/hash/hashfunc.c:279 access/hash/hashfunc.c:336 catalog/heap.c:714 #: catalog/heap.c:720 commands/createas.c:206 commands/createas.c:515 -#: commands/indexcmds.c:1964 commands/tablecmds.c:17155 commands/view.c:86 +#: commands/indexcmds.c:1971 commands/tablecmds.c:17155 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:1004 utils/adt/varchar.c:733 @@ -1160,9 +1160,9 @@ msgstr "no se pudo truncar el archivo «%s» a %u: %m" #: replication/logical/origin.c:641 replication/logical/origin.c:660 #: replication/logical/snapbuild.c:1750 replication/slot.c:1586 #: storage/file/buffile.c:506 storage/file/copydir.c:207 -#: utils/init/miscinit.c:1434 utils/init/miscinit.c:1445 -#: utils/init/miscinit.c:1453 utils/misc/guc.c:8391 utils/misc/guc.c:8422 -#: utils/misc/guc.c:10349 utils/misc/guc.c:10363 utils/time/snapmgr.c:1266 +#: utils/init/miscinit.c:1481 utils/init/miscinit.c:1492 +#: utils/init/miscinit.c:1500 utils/misc/guc.c:8430 utils/misc/guc.c:8461 +#: utils/misc/guc.c:10388 utils/misc/guc.c:10402 utils/time/snapmgr.c:1266 #: utils/time/snapmgr.c:1273 #, c-format msgid "could not write to file \"%s\": %m" @@ -1301,8 +1301,8 @@ 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:1666 commands/indexcmds.c:4128 -#: commands/indexcmds.c:4147 +#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4135 +#: commands/indexcmds.c:4154 #, c-format msgid "%s." msgstr "%s." @@ -1459,7 +1459,7 @@ msgid "cannot access index \"%s\" while it is being reindexed" msgstr "no se puede acceder al índice «%s» mientras está siendo reindexado" #: access/index/indexam.c:208 catalog/objectaddress.c:1355 -#: commands/indexcmds.c:2792 commands/tablecmds.c:267 commands/tablecmds.c:291 +#: commands/indexcmds.c:2799 commands/tablecmds.c:267 commands/tablecmds.c:291 #: commands/tablecmds.c:16851 commands/tablecmds.c:18645 #, c-format msgid "\"%s\" is not an index" @@ -1573,7 +1573,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:12495 +#: access/table/tableamapi.c:122 utils/misc/guc.c:12528 #, c-format msgid "%s is too long (maximum %d characters)." msgstr "%s es demasiado largo (máximo %d caracteres)." @@ -1722,36 +1722,36 @@ msgstr "no se puede truncar hasta el MultiXact %u porque no existe en disco, omi msgid "invalid MultiXactId: %u" msgstr "el MultiXactId no es válido: %u" -#: access/transam/parallel.c:731 access/transam/parallel.c:850 +#: access/transam/parallel.c:737 access/transam/parallel.c:856 #, c-format msgid "parallel worker failed to initialize" msgstr "el ayudante paralelo no pudo iniciar" -#: access/transam/parallel.c:732 access/transam/parallel.c:851 +#: access/transam/parallel.c:738 access/transam/parallel.c:857 #, 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:912 +#: access/transam/parallel.c:918 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "postmaster terminó durante una transacción paralela" -#: access/transam/parallel.c:1099 +#: access/transam/parallel.c:1105 #, c-format msgid "lost connection to parallel worker" msgstr "se ha perdido la conexión al ayudante paralelo" -#: access/transam/parallel.c:1165 access/transam/parallel.c:1167 +#: access/transam/parallel.c:1171 access/transam/parallel.c:1173 msgid "parallel worker" msgstr "ayudante paralelo" -#: access/transam/parallel.c:1320 +#: access/transam/parallel.c:1326 #, 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:1325 +#: access/transam/parallel.c:1331 #, 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" @@ -2251,7 +2251,7 @@ msgstr "no se pudo generar un token de autorización secreto" #: access/transam/xlog.c:4914 access/transam/xlog.c:4921 #: access/transam/xlog.c:4928 access/transam/xlog.c:4935 #: access/transam/xlog.c:4944 access/transam/xlog.c:4951 -#: utils/init/miscinit.c:1591 +#: utils/init/miscinit.c:1638 #, c-format msgid "database files are incompatible with server" msgstr "los archivos de base de datos son incompatibles con el servidor" @@ -3179,7 +3179,7 @@ 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:1966 #: commands/extension.c:2074 commands/extension.c:2359 commands/prepare.c:713 -#: executor/execExpr.c:2510 executor/execSRF.c:738 executor/functions.c:1074 +#: executor/execExpr.c:2518 executor/execSRF.c:738 executor/functions.c:1074 #: foreign/foreign.c:530 libpq/hba.c:2722 replication/logical/launcher.c:937 #: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 #: replication/slotfuncs.c:255 replication/walsender.c:3328 @@ -3189,7 +3189,7 @@ msgstr "¿Quiso usar pg_stop_backup('f')?" #: utils/adt/jsonfuncs.c:2353 utils/adt/jsonfuncs.c:3814 #: utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:219 utils/adt/pgstatfuncs.c:477 #: utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 -#: utils/adt/varlena.c:4821 utils/fmgr/funcapi.c:74 utils/misc/guc.c:10049 +#: utils/adt/varlena.c:4821 utils/fmgr/funcapi.c:74 utils/misc/guc.c:10088 #: utils/mmgr/portalmem.c:1145 #, c-format msgid "set-valued function called in context that cannot accept a set" @@ -3204,7 +3204,7 @@ msgstr "se llamó una función que retorna un conjunto en un contexto que no pue #: 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:223 #: utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 -#: utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4825 utils/misc/guc.c:10053 +#: utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4825 utils/misc/guc.c:10092 #: utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1149 #, c-format msgid "materialize mode required, but it is not allowed in this context" @@ -3411,12 +3411,12 @@ 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:847 tcop/postgres.c:3969 +#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3974 #, c-format msgid "--%s requires a value" msgstr "--%s requiere un valor" -#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3974 +#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3979 #, c-format msgid "-c %s requires a value" msgstr "-c %s requiere un valor" @@ -4237,9 +4237,9 @@ msgstr "no se puede eliminar %s porque otros objetos dependen de él" #: commands/tablecmds.c:14021 commands/tablespace.c:464 commands/user.c:1095 #: commands/view.c:506 libpq/auth.c:338 replication/syncrep.c:1043 #: storage/lmgr/deadlock.c:1151 storage/lmgr/proc.c:1447 utils/misc/guc.c:7140 -#: utils/misc/guc.c:7176 utils/misc/guc.c:7246 utils/misc/guc.c:11457 -#: utils/misc/guc.c:11491 utils/misc/guc.c:11525 utils/misc/guc.c:11568 -#: utils/misc/guc.c:11610 +#: utils/misc/guc.c:7176 utils/misc/guc.c:7246 utils/misc/guc.c:11490 +#: utils/misc/guc.c:11524 utils/misc/guc.c:11558 utils/misc/guc.c:11601 +#: utils/misc/guc.c:11643 #, c-format msgid "%s" msgstr "%s" @@ -4405,14 +4405,14 @@ msgstr "Esto causaría que la columna generada dependa de su propio valor." msgid "generation expression is not immutable" msgstr "la expresión de generación no es inmutable" -#: catalog/heap.c:3142 rewrite/rewriteHandler.c:1291 +#: catalog/heap.c:3142 rewrite/rewriteHandler.c:1297 #, 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:3147 commands/prepare.c:368 parser/analyze.c:2695 #: parser/parse_target.c:594 parser/parse_target.c:891 -#: parser/parse_target.c:901 rewrite/rewriteHandler.c:1296 +#: parser/parse_target.c:901 rewrite/rewriteHandler.c:1302 #, 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." @@ -4508,12 +4508,12 @@ msgstr "DROP INDEX CONCURRENTLY debe ser la primera acción en una transacción" msgid "cannot reindex temporary tables of other sessions" msgstr "no se puede hacer reindex de tablas temporales de otras sesiones" -#: catalog/index.c:3664 commands/indexcmds.c:3548 +#: catalog/index.c:3664 commands/indexcmds.c:3555 #, 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:3680 commands/indexcmds.c:3428 commands/indexcmds.c:3572 +#: catalog/index.c:3680 commands/indexcmds.c:3435 commands/indexcmds.c:3579 #: commands/tablecmds.c:3282 #, c-format msgid "cannot move system relation \"%s\"" @@ -4666,7 +4666,7 @@ msgid "cannot create temporary tables during a parallel operation" msgstr "no se pueden crear tablas temporales durante una operación paralela" #: catalog/namespace.c:4338 commands/tablespace.c:1211 commands/variable.c:64 -#: tcop/postgres.c:3624 utils/misc/guc.c:11642 utils/misc/guc.c:11720 +#: tcop/postgres.c:3624 utils/misc/guc.c:11675 utils/misc/guc.c:11753 #, c-format msgid "List syntax is invalid." msgstr "La sintaxis de lista no es válida." @@ -5734,12 +5734,12 @@ msgstr "Falla al crear un tipo de multirango para el tipo «%s»." msgid "You can manually specify a multirange type name using the \"multirange_type_name\" attribute." msgstr "Puede especificar manualmente un nombre para el tipo de multirango usando el atributo «multirange_type_name»." -#: catalog/storage.c:495 storage/buffer/bufmgr.c:1039 +#: catalog/storage.c:511 storage/buffer/bufmgr.c:1039 #, 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:112 commands/indexcmds.c:692 commands/tablecmds.c:6142 +#: catalog/toasting.c:112 commands/indexcmds.c:699 commands/tablecmds.c:6142 #: commands/tablecmds.c:16694 #, c-format msgid "\"%s\" is not a table or materialized view" @@ -5920,7 +5920,7 @@ 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:154 commands/indexcmds.c:213 commands/indexcmds.c:843 +#: commands/amcmds.c:154 commands/indexcmds.c:214 commands/indexcmds.c:850 #: commands/opclasscmds.c:375 commands/opclasscmds.c:833 #, c-format msgid "access method \"%s\" does not exist" @@ -6186,8 +6186,8 @@ msgstr "no se encontraron locales de sistema utilizables" #: commands/comment.c:61 commands/dbcommands.c:855 commands/dbcommands.c:1072 #: commands/dbcommands.c:1187 commands/dbcommands.c:1377 #: commands/dbcommands.c:1627 commands/dbcommands.c:1751 -#: commands/dbcommands.c:2194 utils/init/postinit.c:887 -#: utils/init/postinit.c:993 utils/init/postinit.c:1019 +#: commands/dbcommands.c:2194 utils/init/postinit.c:904 +#: utils/init/postinit.c:1010 utils/init/postinit.c:1036 #, c-format msgid "database \"%s\" does not exist" msgstr "no existe la base de datos «%s»" @@ -6398,7 +6398,7 @@ 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:749 commands/indexcmds.c:1835 commands/statscmds.c:245 +#: commands/copy.c:749 commands/indexcmds.c:1842 commands/statscmds.c:245 #: commands/tablecmds.c:2344 commands/tablecmds.c:3000 #: commands/tablecmds.c:3508 parser/parse_relation.c:3651 #: parser/parse_relation.c:3671 utils/adt/tsvector_op.c:2683 @@ -6817,7 +6817,7 @@ msgid "cannot use invalid database \"%s\" as template" msgstr "no se puede usar base de datos «%s» no válida como patrón" #: commands/dbcommands.c:368 commands/dbcommands.c:1638 -#: utils/init/postinit.c:1002 +#: utils/init/postinit.c:1019 #, c-format msgid "Use DROP DATABASE to drop invalid databases." msgstr "Use DROP DATABASE para eliminar una base de datos no válida." @@ -8036,293 +8036,293 @@ 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:634 +#: commands/indexcmds.c:641 #, c-format msgid "must specify at least one column" msgstr "debe especificar al menos una columna" -#: commands/indexcmds.c:638 +#: commands/indexcmds.c:645 #, 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:686 +#: commands/indexcmds.c:693 #, 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:717 +#: commands/indexcmds.c:724 #, 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:722 +#: commands/indexcmds.c:729 #, 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:732 +#: commands/indexcmds.c:739 #, 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:770 commands/tablecmds.c:755 commands/tablespace.c:1179 +#: commands/indexcmds.c:777 commands/tablecmds.c:755 commands/tablespace.c:1179 #, 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:802 commands/tablecmds.c:786 commands/tablecmds.c:3289 +#: commands/indexcmds.c:809 commands/tablecmds.c:786 commands/tablecmds.c:3289 #, 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:835 +#: commands/indexcmds.c:842 #, 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:856 +#: commands/indexcmds.c:863 #, 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:861 +#: commands/indexcmds.c:868 #, 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:866 +#: commands/indexcmds.c:873 #, 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:871 +#: commands/indexcmds.c:878 #, 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:995 +#: commands/indexcmds.c:1002 #, c-format 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:1005 +#: commands/indexcmds.c:1012 #, 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:1007 +#: commands/indexcmds.c:1014 #, 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:1049 +#: commands/indexcmds.c:1056 #, c-format msgid "unique constraint on partitioned table must include all partitioning columns" msgstr "las restricciones unique en tablas particionadas deben incluir todas las columnas de particionamiento" -#: commands/indexcmds.c:1050 +#: commands/indexcmds.c:1057 #, 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:1069 commands/indexcmds.c:1088 +#: commands/indexcmds.c:1076 commands/indexcmds.c:1095 #, 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:1288 tcop/utility.c:1510 +#: commands/indexcmds.c:1295 tcop/utility.c:1510 #, 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:1290 tcop/utility.c:1512 +#: commands/indexcmds.c:1297 tcop/utility.c:1512 #, 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:1752 +#: commands/indexcmds.c:1759 #, 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:1830 parser/parse_utilcmd.c:2533 +#: commands/indexcmds.c:1837 parser/parse_utilcmd.c:2533 #: parser/parse_utilcmd.c:2668 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "no existe la columna «%s» en la llave" -#: commands/indexcmds.c:1854 parser/parse_utilcmd.c:1821 +#: commands/indexcmds.c:1861 parser/parse_utilcmd.c:1821 #, c-format msgid "expressions are not supported in included columns" msgstr "las expresiones no están soportadas en columnas incluidas" -#: commands/indexcmds.c:1895 +#: commands/indexcmds.c:1902 #, 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:1910 +#: commands/indexcmds.c:1917 #, c-format msgid "including column does not support a collation" msgstr "la columna incluida no permite un ordenamiento (collation)" -#: commands/indexcmds.c:1914 +#: commands/indexcmds.c:1921 #, c-format msgid "including column does not support an operator class" msgstr "la columna incluida no permite una clase de operadores" -#: commands/indexcmds.c:1918 +#: commands/indexcmds.c:1925 #, c-format msgid "including column does not support ASC/DESC options" msgstr "la columna incluida no permite las opciones ASC/DESC" -#: commands/indexcmds.c:1922 +#: commands/indexcmds.c:1929 #, 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:1963 +#: commands/indexcmds.c:1970 #, 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:1971 commands/tablecmds.c:17162 commands/typecmds.c:810 +#: commands/indexcmds.c:1978 commands/tablecmds.c:17162 commands/typecmds.c:810 #: parser/parse_expr.c:2693 parser/parse_type.c:566 parser/parse_utilcmd.c:3783 #: utils/adt/misc.c:621 #, 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:2036 +#: commands/indexcmds.c:2043 #, c-format msgid "operator %s is not commutative" msgstr "el operador %s no es conmutativo" -#: commands/indexcmds.c:2038 +#: commands/indexcmds.c:2045 #, 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:2064 +#: commands/indexcmds.c:2071 #, 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:2067 +#: commands/indexcmds.c:2074 #, 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:2102 +#: commands/indexcmds.c:2109 #, 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:2107 +#: commands/indexcmds.c:2114 #, 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:2153 commands/tablecmds.c:17187 +#: commands/indexcmds.c:2160 commands/tablecmds.c:17187 #: commands/tablecmds.c:17193 commands/typecmds.c:2317 #, 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:2155 +#: commands/indexcmds.c:2162 #, 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:2184 commands/indexcmds.c:2192 +#: commands/indexcmds.c:2191 commands/indexcmds.c:2199 #: 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:2206 commands/typecmds.c:2305 +#: commands/indexcmds.c:2213 commands/typecmds.c:2305 #, 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:2296 +#: commands/indexcmds.c:2303 #, 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:2624 +#: commands/indexcmds.c:2631 #, c-format msgid "unrecognized REINDEX option \"%s\"" msgstr "opción de REINDEX «%s» no reconocida" -#: commands/indexcmds.c:2848 +#: commands/indexcmds.c:2855 #, 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:2862 +#: commands/indexcmds.c:2869 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "la tabla «%s» no tiene índices para reindexar" -#: commands/indexcmds.c:2902 commands/indexcmds.c:3409 -#: commands/indexcmds.c:3537 +#: commands/indexcmds.c:2909 commands/indexcmds.c:3416 +#: commands/indexcmds.c:3544 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "no se pueden reindexar catálogos de sistema concurrentemente" -#: commands/indexcmds.c:2925 +#: commands/indexcmds.c:2932 #, 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:3013 +#: commands/indexcmds.c:3020 #, 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:3046 +#: commands/indexcmds.c:3053 #, c-format msgid "cannot move system relations, skipping all" msgstr "no se puede mover las relaciones de sistema, omitiendo todas" -#: commands/indexcmds.c:3093 +#: commands/indexcmds.c:3100 #, c-format msgid "while reindexing partitioned table \"%s.%s\"" msgstr "al reindexar tabla particionada «%s.%s»" -#: commands/indexcmds.c:3096 +#: commands/indexcmds.c:3103 #, c-format msgid "while reindexing partitioned index \"%s.%s\"" msgstr "al reindexar índice particionado «%s.%s»" -#: commands/indexcmds.c:3289 commands/indexcmds.c:4145 +#: commands/indexcmds.c:3296 commands/indexcmds.c:4152 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "la tabla «%s.%s» fue reindexada" -#: commands/indexcmds.c:3441 commands/indexcmds.c:3493 +#: commands/indexcmds.c:3448 commands/indexcmds.c:3500 #, 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:3447 +#: commands/indexcmds.c:3454 #, 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:3602 +#: commands/indexcmds.c:3609 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "no se puede reindexar este tipo de relación concurrentemente" -#: commands/indexcmds.c:3623 +#: commands/indexcmds.c:3630 #, c-format msgid "cannot move non-shared relation to tablespace \"%s\"" msgstr "no se puede mover relación no compartida al tablespace «%s»" -#: commands/indexcmds.c:4126 commands/indexcmds.c:4138 +#: commands/indexcmds.c:4133 commands/indexcmds.c:4145 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "el índice «%s.%s» fue reindexado" @@ -10101,7 +10101,7 @@ msgstr "no se puede especificar USING al alterar el tipo de una columna generada #: commands/tablecmds.c:11908 commands/tablecmds.c:17005 #: commands/tablecmds.c:17095 commands/trigger.c:653 -#: rewrite/rewriteHandler.c:930 rewrite/rewriteHandler.c:965 +#: rewrite/rewriteHandler.c:936 rewrite/rewriteHandler.c:971 #, c-format msgid "Column \"%s\" is a generated column." msgstr "La columna «%s» es una columna generada." @@ -11570,10 +11570,10 @@ msgstr "se ha denegado el permiso para eliminar el rol" 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:1040 commands/user.c:1197 commands/variable.c:778 -#: commands/variable.c:781 commands/variable.c:865 commands/variable.c:868 +#: commands/user.c:1040 commands/user.c:1197 commands/variable.c:793 +#: commands/variable.c:796 commands/variable.c:913 commands/variable.c:916 #: utils/adt/acl.c:5103 utils/adt/acl.c:5151 utils/adt/acl.c:5179 -#: utils/adt/acl.c:5198 utils/init/miscinit.c:710 +#: utils/adt/acl.c:5198 utils/init/miscinit.c:752 #, c-format msgid "role \"%s\" does not exist" msgstr "no existe el rol «%s»" @@ -11812,8 +11812,8 @@ 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 tcop/postgres.c:3640 utils/misc/guc.c:11682 -#: utils/misc/guc.c:11744 +#: commands/variable.c:165 tcop/postgres.c:3640 utils/misc/guc.c:11715 +#: utils/misc/guc.c:11777 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Palabra clave no reconocida: «%s»." @@ -11908,12 +11908,22 @@ 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:890 +#: commands/variable.c:818 +#, c-format +msgid "permission will be denied to set session authorization \"%s\"" +msgstr "se denegará el permiso para definir autorización de sesión «%s»" + +#: commands/variable.c:823 +#, c-format +msgid "permission denied to set session authorization \"%s\"" +msgstr "se ha denegado el permiso para definir autorización de sesión «%s»" + +#: commands/variable.c:933 #, c-format msgid "permission will be denied to set role \"%s\"" msgstr "se denegará el permiso para definir el rol «%s»" -#: commands/variable.c:895 +#: commands/variable.c:938 #, c-format msgid "permission denied to set role \"%s\"" msgstr "se ha denegado el permiso para definir el rol «%s»" @@ -11999,19 +12009,19 @@ 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:2452 +#: executor/execCurrent.c:280 executor/execExprInterp.c:2464 #, 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:2464 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2476 #, c-format msgid "no value found for parameter %d" msgstr "no se encontró un valor para parámetro %d" #: executor/execExpr.c:636 executor/execExpr.c:643 executor/execExpr.c:649 -#: executor/execExprInterp.c:4033 executor/execExprInterp.c:4050 -#: executor/execExprInterp.c:4149 executor/nodeModifyTable.c:127 +#: executor/execExprInterp.c:4045 executor/execExprInterp.c:4062 +#: executor/execExprInterp.c:4161 executor/nodeModifyTable.c:127 #: executor/nodeModifyTable.c:138 executor/nodeModifyTable.c:155 #: executor/nodeModifyTable.c:163 #, c-format @@ -12028,7 +12038,7 @@ msgstr "La consulta tiene demasiadas columnas." 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:650 executor/execExprInterp.c:4051 +#: executor/execExpr.c:650 executor/execExprInterp.c:4063 #: executor/nodeModifyTable.c:139 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." @@ -12039,17 +12049,17 @@ msgstr "La tabla tiene tipo %s en posición ordinal %d, pero la consulta esperab msgid "window function calls cannot be nested" msgstr "no se pueden anidar llamadas a funciones de ventana deslizante" -#: executor/execExpr.c:1618 +#: executor/execExpr.c:1626 #, c-format msgid "target type is not an array" msgstr "el tipo de destino no es un array" -#: executor/execExpr.c:1958 +#: executor/execExpr.c:1966 #, 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:2483 executor/execSRF.c:718 parser/parse_func.c:138 +#: executor/execExpr.c:2491 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" @@ -12057,33 +12067,33 @@ 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:2916 parser/parse_node.c:277 parser/parse_node.c:327 +#: executor/execExpr.c:2924 parser/parse_node.c:277 parser/parse_node.c:327 #, c-format msgid "cannot subscript type %s because it does not support subscripting" msgstr "no se puede poner subíndices al tipo %s porque no soporta subíndices" -#: executor/execExpr.c:3044 executor/execExpr.c:3066 +#: executor/execExpr.c:3052 executor/execExpr.c:3074 #, c-format msgid "type %s does not support subscripted assignment" msgstr "el tipo %s no soporta asignación subindexada" -#: executor/execExprInterp.c:1916 +#: executor/execExprInterp.c:1928 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "El atributo %d de tipo %s ha sido eliminado" -#: executor/execExprInterp.c:1922 +#: executor/execExprInterp.c:1934 #, 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:1924 executor/execExprInterp.c:3058 -#: executor/execExprInterp.c:3104 +#: executor/execExprInterp.c:1936 executor/execExprInterp.c:3070 +#: executor/execExprInterp.c:3116 #, 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:2004 utils/adt/expandedrecord.c:99 +#: executor/execExprInterp.c:2016 utils/adt/expandedrecord.c:99 #: utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1751 #: utils/cache/typcache.c:1907 utils/cache/typcache.c:2054 #: utils/fmgr/funcapi.c:500 @@ -12091,22 +12101,22 @@ msgstr "La tabla tiene tipo %s, pero la consulta esperaba %s." msgid "type %s is not composite" msgstr "el tipo %s no es compuesto" -#: executor/execExprInterp.c:2542 +#: executor/execExprInterp.c:2554 #, 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:2755 +#: executor/execExprInterp.c:2767 #, c-format msgid "cannot merge incompatible arrays" msgstr "no se puede mezclar arrays incompatibles" -#: executor/execExprInterp.c:2756 +#: executor/execExprInterp.c:2768 #, 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:2777 utils/adt/arrayfuncs.c:264 +#: executor/execExprInterp.c:2789 utils/adt/arrayfuncs.c:264 #: utils/adt/arrayfuncs.c:564 utils/adt/arrayfuncs.c:1306 #: utils/adt/arrayfuncs.c:3429 utils/adt/arrayfuncs.c:5425 #: utils/adt/arrayfuncs.c:5942 utils/adt/arraysubs.c:150 @@ -12115,12 +12125,12 @@ msgstr "El array con tipo de elemento %s no puede ser incluido en una sentencia 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:2797 executor/execExprInterp.c:2832 +#: executor/execExprInterp.c:2809 executor/execExprInterp.c:2844 #, 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:2809 utils/adt/array_expanded.c:274 +#: executor/execExprInterp.c:2821 utils/adt/array_expanded.c:274 #: utils/adt/arrayfuncs.c:937 utils/adt/arrayfuncs.c:1545 #: utils/adt/arrayfuncs.c:2353 utils/adt/arrayfuncs.c:2368 #: utils/adt/arrayfuncs.c:2630 utils/adt/arrayfuncs.c:2646 @@ -12133,29 +12143,29 @@ msgstr "los arrays multidimensionales deben tener expresiones de arrays con dime msgid "array size exceeds the maximum allowed (%d)" msgstr "el tamaño del array excede el máximo permitido (%d)" -#: executor/execExprInterp.c:3057 executor/execExprInterp.c:3103 +#: executor/execExprInterp.c:3069 executor/execExprInterp.c:3115 #, c-format msgid "attribute %d has wrong type" msgstr "el atributo %d tiene tipo erróneo" -#: executor/execExprInterp.c:3662 utils/adt/domains.c:149 +#: executor/execExprInterp.c:3674 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:3677 utils/adt/domains.c:184 +#: executor/execExprInterp.c:3689 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:4034 +#: executor/execExprInterp.c:4046 #, 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:4150 executor/execSRF.c:977 +#: executor/execExprInterp.c:4162 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." @@ -12205,38 +12215,38 @@ msgstr "no se puede cambiar la secuencia «%s»" msgid "cannot change TOAST relation \"%s\"" msgstr "no se puede cambiar la relación TOAST «%s»" -#: executor/execMain.c:1038 rewrite/rewriteHandler.c:3108 -#: rewrite/rewriteHandler.c:3953 +#: executor/execMain.c:1038 rewrite/rewriteHandler.c:3163 +#: rewrite/rewriteHandler.c:4008 #, c-format msgid "cannot insert into view \"%s\"" msgstr "no se puede insertar en la vista «%s»" -#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3111 -#: rewrite/rewriteHandler.c:3956 +#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3166 +#: rewrite/rewriteHandler.c:4011 #, 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:1046 rewrite/rewriteHandler.c:3116 -#: rewrite/rewriteHandler.c:3961 +#: executor/execMain.c:1046 rewrite/rewriteHandler.c:3171 +#: rewrite/rewriteHandler.c:4016 #, c-format msgid "cannot update view \"%s\"" msgstr "no se puede actualizar la vista «%s»" -#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3119 -#: rewrite/rewriteHandler.c:3964 +#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3174 +#: rewrite/rewriteHandler.c:4019 #, 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:1054 rewrite/rewriteHandler.c:3124 -#: rewrite/rewriteHandler.c:3969 +#: executor/execMain.c:1054 rewrite/rewriteHandler.c:3179 +#: rewrite/rewriteHandler.c:4024 #, c-format msgid "cannot delete from view \"%s\"" msgstr "no se puede eliminar de la vista «%s»" -#: executor/execMain.c:1056 rewrite/rewriteHandler.c:3127 -#: rewrite/rewriteHandler.c:3972 +#: executor/execMain.c:1056 rewrite/rewriteHandler.c:3182 +#: rewrite/rewriteHandler.c:4027 #, 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." @@ -14435,7 +14445,7 @@ msgstr "no hay conexión de cliente" msgid "could not receive data from client: %m" msgstr "no se pudo recibir datos del cliente: %m" -#: libpq/pqcomm.c:1179 tcop/postgres.c:4404 +#: libpq/pqcomm.c:1179 tcop/postgres.c:4409 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "terminando la conexión por pérdida de sincronía del protocolo" @@ -14850,7 +14860,7 @@ msgid "could not implement GROUP BY" msgstr "no se pudo implementar GROUP BY" #: optimizer/plan/planner.c:1974 optimizer/plan/planner.c:3631 -#: optimizer/plan/planner.c:4388 optimizer/prep/prepunion.c:1046 +#: optimizer/plan/planner.c:4388 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." @@ -14896,7 +14906,7 @@ 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 +#: optimizer/prep/prepunion.c:1044 #, c-format msgid "could not implement %s" msgstr "no se pudo implementar %s" @@ -17117,7 +17127,7 @@ msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELE msgstr "las reglas con condiciones WHERE sólo pueden tener acciones SELECT, INSERT, UPDATE o DELETE" #: parser/parse_utilcmd.c:3154 parser/parse_utilcmd.c:3255 -#: rewrite/rewriteHandler.c:533 rewrite/rewriteManip.c:1021 +#: rewrite/rewriteHandler.c:539 rewrite/rewriteManip.c:1021 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "las sentencias UNION/INTERSECT/EXCEPT condicionales no están implementadas" @@ -17430,12 +17440,12 @@ msgstr "las huge pages no están soportadas en esta plataforma" msgid "huge pages not supported with the current shared_memory_type setting" msgstr "las huge pages no están soportadas con la configuración actual de shared_memory_type" -#: port/pg_shmem.c:753 port/sysv_shmem.c:753 utils/init/miscinit.c:1180 +#: port/pg_shmem.c:753 port/sysv_shmem.c:753 utils/init/miscinit.c:1227 #, 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:756 port/sysv_shmem.c:756 utils/init/miscinit.c:1182 +#: port/pg_shmem.c:756 port/sysv_shmem.c:756 utils/init/miscinit.c:1229 #, 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»." @@ -17955,7 +17965,7 @@ msgid "starting %s" msgstr "iniciando %s" #: postmaster/postmaster.c:1161 postmaster/postmaster.c:1260 -#: utils/init/miscinit.c:1640 +#: utils/init/miscinit.c:1687 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "la sintaxis de lista no es válida para el parámetro «%s»" @@ -18000,7 +18010,7 @@ msgstr "%s: no se pudo cambiar los permisos del archivo de PID externo «%s»: % 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:1368 utils/init/postinit.c:216 +#: postmaster/postmaster.c:1368 utils/init/postinit.c:217 #, c-format msgid "could not load pg_hba.conf" msgstr "no se pudo cargar pg_hba.conf" @@ -18097,8 +18107,8 @@ 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:2208 utils/misc/guc.c:7138 utils/misc/guc.c:7174 -#: utils/misc/guc.c:7244 utils/misc/guc.c:8589 utils/misc/guc.c:11563 -#: utils/misc/guc.c:11604 +#: utils/misc/guc.c:7244 utils/misc/guc.c:8628 utils/misc/guc.c:11596 +#: utils/misc/guc.c:11637 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "valor no válido para el parámetro «%s»: «%s»" @@ -19954,205 +19964,205 @@ msgstr "no existe la regla «%s» para la relación «%s»" msgid "renaming an ON SELECT rule is not allowed" msgstr "no se permite cambiar el nombre de una regla ON SELECT" -#: rewrite/rewriteHandler.c:577 +#: rewrite/rewriteHandler.c:583 #, 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:604 +#: rewrite/rewriteHandler.c:610 #, c-format msgid "INSERT...SELECT rule actions are not supported for queries having data-modifying statements in WITH" msgstr "las acciones de reglas INSERT...SELECT no están soportadas para consultas que tengan sentencias que modifiquen datos en WITH" -#: rewrite/rewriteHandler.c:657 +#: rewrite/rewriteHandler.c:663 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "no se puede usar RETURNING en múltiples reglas" -#: rewrite/rewriteHandler.c:889 rewrite/rewriteHandler.c:928 +#: rewrite/rewriteHandler.c:895 rewrite/rewriteHandler.c:934 #, c-format msgid "cannot insert a non-DEFAULT value into column \"%s\"" msgstr "no se puede insertar un valor no-predeterminado en la columna «%s»" -#: rewrite/rewriteHandler.c:891 rewrite/rewriteHandler.c:957 +#: rewrite/rewriteHandler.c:897 rewrite/rewriteHandler.c:963 #, 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:893 +#: rewrite/rewriteHandler.c:899 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "Use OVERRIDING SYSTEM VALUE para controlar manualmente." -#: rewrite/rewriteHandler.c:955 rewrite/rewriteHandler.c:963 +#: rewrite/rewriteHandler.c:961 rewrite/rewriteHandler.c:969 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "la columna «%s» sólo puede actualizarse a DEFAULT" -#: rewrite/rewriteHandler.c:1110 rewrite/rewriteHandler.c:1128 +#: rewrite/rewriteHandler.c:1116 rewrite/rewriteHandler.c:1134 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "hay múltiples asignaciones a la misma columna «%s»" -#: rewrite/rewriteHandler.c:1739 rewrite/rewriteHandler.c:3141 +#: rewrite/rewriteHandler.c:1745 rewrite/rewriteHandler.c:3196 #, c-format msgid "access to non-system view \"%s\" is restricted" msgstr "el acceso a la vista «%s» que no son de sistema está restringido" -#: rewrite/rewriteHandler.c:2148 rewrite/rewriteHandler.c:4027 +#: rewrite/rewriteHandler.c:2173 rewrite/rewriteHandler.c:4082 #, 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:2233 +#: rewrite/rewriteHandler.c:2278 #, 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:2553 +#: rewrite/rewriteHandler.c:2608 msgid "Junk view columns are not updatable." msgstr "Las columnas «basura» de vistas no son actualizables." -#: rewrite/rewriteHandler.c:2558 +#: rewrite/rewriteHandler.c:2613 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:2561 +#: rewrite/rewriteHandler.c:2616 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:2564 +#: rewrite/rewriteHandler.c:2619 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:2625 +#: rewrite/rewriteHandler.c:2680 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Las vistas que contienen DISTINCT no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2628 +#: rewrite/rewriteHandler.c:2683 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Las vistas que contienen GROUP BY no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2631 +#: rewrite/rewriteHandler.c:2686 msgid "Views containing HAVING are not automatically updatable." msgstr "Las vistas que contienen HAVING no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2634 +#: rewrite/rewriteHandler.c:2689 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:2637 +#: rewrite/rewriteHandler.c:2692 msgid "Views containing WITH are not automatically updatable." msgstr "Las vistas que contienen WITH no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2640 +#: rewrite/rewriteHandler.c:2695 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:2652 +#: rewrite/rewriteHandler.c:2707 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:2655 +#: rewrite/rewriteHandler.c:2710 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:2658 +#: rewrite/rewriteHandler.c:2713 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:2665 rewrite/rewriteHandler.c:2669 -#: rewrite/rewriteHandler.c:2677 +#: rewrite/rewriteHandler.c:2720 rewrite/rewriteHandler.c:2724 +#: rewrite/rewriteHandler.c:2732 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:2680 +#: rewrite/rewriteHandler.c:2735 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Las vistas que contienen TABLESAMPLE no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2704 +#: rewrite/rewriteHandler.c:2759 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:3201 +#: rewrite/rewriteHandler.c:3256 #, 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:3209 +#: rewrite/rewriteHandler.c:3264 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "no se puede actualizar la columna «%s» vista «%s»" -#: rewrite/rewriteHandler.c:3691 +#: rewrite/rewriteHandler.c:3746 #, c-format msgid "DO INSTEAD NOTIFY rules are not supported for data-modifying statements in WITH" msgstr "las reglas DO INSTEAD NOTIFY no están soportadas para sentencias que modifiquen datos en WITH" -#: rewrite/rewriteHandler.c:3702 +#: rewrite/rewriteHandler.c:3757 #, 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:3716 +#: rewrite/rewriteHandler.c:3771 #, 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:3720 +#: rewrite/rewriteHandler.c:3775 #, 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:3725 +#: rewrite/rewriteHandler.c:3780 #, 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:3955 rewrite/rewriteHandler.c:3963 -#: rewrite/rewriteHandler.c:3971 +#: rewrite/rewriteHandler.c:4010 rewrite/rewriteHandler.c:4018 +#: rewrite/rewriteHandler.c:4026 #, c-format msgid "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "Las vistas con reglas DO INSTEAD condicionales no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:4076 +#: rewrite/rewriteHandler.c:4131 #, 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:4078 +#: rewrite/rewriteHandler.c:4133 #, 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:4083 +#: rewrite/rewriteHandler.c:4138 #, 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:4085 +#: rewrite/rewriteHandler.c:4140 #, 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:4090 +#: rewrite/rewriteHandler.c:4145 #, 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:4092 +#: rewrite/rewriteHandler.c:4147 #, 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:4110 +#: rewrite/rewriteHandler.c:4165 #, 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:4167 +#: rewrite/rewriteHandler.c:4222 #, 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" @@ -21017,7 +21027,7 @@ msgstr "el tamaño de argumento %d no es válido en el mensaje de llamada a func 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:449 tcop/postgres.c:4831 +#: tcop/postgres.c:449 tcop/postgres.c:4836 #, c-format msgid "invalid frontend message type %d" msgstr "el tipo de mensaje de frontend %d no es válido" @@ -21265,47 +21275,47 @@ msgstr "«max_stack_depth» no debe exceder %ldkB." 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:4008 +#: tcop/postgres.c:4013 #, 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:4009 tcop/postgres.c:4015 +#: tcop/postgres.c:4014 tcop/postgres.c:4020 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Pruebe «%s --help» para mayor información." -#: tcop/postgres.c:4013 +#: tcop/postgres.c:4018 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: argumento de línea de órdenes no válido: %s" -#: tcop/postgres.c:4076 +#: tcop/postgres.c:4081 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: no se ha especificado base de datos ni usuario" -#: tcop/postgres.c:4733 +#: tcop/postgres.c:4738 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "subtipo %d de mensaje CLOSE no válido" -#: tcop/postgres.c:4768 +#: tcop/postgres.c:4773 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "subtipo %d de mensaje DESCRIBE no válido" -#: tcop/postgres.c:4852 +#: tcop/postgres.c:4857 #, 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:4856 +#: tcop/postgres.c:4861 #, 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:5033 +#: tcop/postgres.c:5038 #, 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" @@ -24067,7 +24077,7 @@ 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:715 utils/adt/regproc.c:756 utils/adt/regproc.c:2055 -#: utils/adt/ruleutils.c:9822 utils/adt/ruleutils.c:9991 +#: utils/adt/ruleutils.c:9828 utils/adt/ruleutils.c:9997 #, c-format msgid "too many arguments" msgstr "demasiados argumentos" @@ -24258,7 +24268,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:12468 +#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12501 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp fuera de rango: «%s»" @@ -25245,333 +25255,328 @@ msgstr "no se entregó alias de columna" 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:314 +#: 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:319 +#: 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:327 +#: 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:343 +#: 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:345 +#: 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:363 +#: 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:365 +#: 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:650 utils/misc/guc.c:7520 +#: utils/init/miscinit.c:684 utils/misc/guc.c:7520 #, 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:718 +#: utils/init/miscinit.c:764 #, c-format msgid "role with OID %u does not exist" msgstr "no existe el rol con OID %u" -#: utils/init/miscinit.c:748 +#: utils/init/miscinit.c:814 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "al rol «%s» no se le permite conectarse" -#: utils/init/miscinit.c:766 +#: utils/init/miscinit.c:832 #, c-format msgid "too many connections for role \"%s\"" msgstr "demasiadas conexiones para el rol «%s»" -#: utils/init/miscinit.c:834 -#, c-format -msgid "permission denied to set session authorization" -msgstr "se ha denegado el permiso para cambiar el usuario actual" - -#: utils/init/miscinit.c:917 +#: utils/init/miscinit.c:964 #, c-format msgid "invalid role OID: %u" msgstr "el OID de rol no es válido: %u" -#: utils/init/miscinit.c:971 +#: utils/init/miscinit.c:1018 #, c-format msgid "database system is shut down" msgstr "el sistema de bases de datos está apagado" -#: utils/init/miscinit.c:1058 +#: utils/init/miscinit.c:1105 #, 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:1072 +#: utils/init/miscinit.c:1119 #, 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:1079 +#: utils/init/miscinit.c:1126 #, 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:1088 +#: utils/init/miscinit.c:1135 #, c-format msgid "lock file \"%s\" is empty" msgstr "el archivo de bloqueo «%s» está vacío" -#: utils/init/miscinit.c:1089 +#: utils/init/miscinit.c:1136 #, 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:1133 +#: utils/init/miscinit.c:1180 #, c-format msgid "lock file \"%s\" already exists" msgstr "el archivo de bloqueo «%s» ya existe" -#: utils/init/miscinit.c:1137 +#: utils/init/miscinit.c:1184 #, 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:1139 +#: utils/init/miscinit.c:1186 #, 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:1142 +#: utils/init/miscinit.c:1189 #, 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:1144 +#: utils/init/miscinit.c:1191 #, 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:1195 +#: utils/init/miscinit.c:1242 #, 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:1197 +#: utils/init/miscinit.c:1244 #, 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:1234 utils/init/miscinit.c:1248 -#: utils/init/miscinit.c:1259 +#: utils/init/miscinit.c:1281 utils/init/miscinit.c:1295 +#: utils/init/miscinit.c:1306 #, 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:1370 utils/init/miscinit.c:1512 utils/misc/guc.c:10434 +#: utils/init/miscinit.c:1417 utils/init/miscinit.c:1559 utils/misc/guc.c:10473 #, c-format msgid "could not read from file \"%s\": %m" msgstr "no se pudo leer el archivo «%s»: %m" -#: utils/init/miscinit.c:1500 +#: utils/init/miscinit.c:1547 #, 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:1525 +#: utils/init/miscinit.c:1572 #, 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:1564 utils/init/miscinit.c:1580 +#: utils/init/miscinit.c:1611 utils/init/miscinit.c:1627 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "«%s» no es un directorio de datos válido" -#: utils/init/miscinit.c:1566 +#: utils/init/miscinit.c:1613 #, c-format msgid "File \"%s\" is missing." msgstr "Falta el archivo «%s»." -#: utils/init/miscinit.c:1582 +#: utils/init/miscinit.c:1629 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "El archivo «%s» no contiene datos válidos." -#: utils/init/miscinit.c:1584 +#: utils/init/miscinit.c:1631 #, c-format msgid "You might need to initdb." msgstr "Puede ser necesario ejecutar initdb." -#: utils/init/miscinit.c:1592 +#: utils/init/miscinit.c:1639 #, 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/postinit.c:254 +#: utils/init/postinit.c:255 #, c-format msgid "replication connection authorized: user=%s" msgstr "conexión de replicación autorizada: usuario=%s" -#: utils/init/postinit.c:257 +#: utils/init/postinit.c:258 #, c-format msgid "connection authorized: user=%s" msgstr "conexión autorizada: usuario=%s" -#: utils/init/postinit.c:260 +#: utils/init/postinit.c:261 #, c-format msgid " database=%s" msgstr " base_de_datos=%s" -#: utils/init/postinit.c:263 +#: utils/init/postinit.c:264 #, c-format msgid " application_name=%s" msgstr " nombre_de_aplicación=%s" -#: utils/init/postinit.c:268 +#: utils/init/postinit.c:269 #, c-format msgid " SSL enabled (protocol=%s, cipher=%s, bits=%d)" msgstr " SSL habilitado (protocolo=%s, cifrado=%s, bits=%d)" -#: utils/init/postinit.c:280 +#: utils/init/postinit.c:281 #, c-format msgid " GSS (authenticated=%s, encrypted=%s, principal=%s)" msgstr " GSS (autenticado=%s, cifrado=%s, principal=%s)" -#: utils/init/postinit.c:281 utils/init/postinit.c:282 -#: utils/init/postinit.c:287 utils/init/postinit.c:288 +#: utils/init/postinit.c:282 utils/init/postinit.c:283 +#: utils/init/postinit.c:288 utils/init/postinit.c:289 msgid "no" msgstr "no" -#: utils/init/postinit.c:281 utils/init/postinit.c:282 -#: utils/init/postinit.c:287 utils/init/postinit.c:288 +#: utils/init/postinit.c:282 utils/init/postinit.c:283 +#: utils/init/postinit.c:288 utils/init/postinit.c:289 msgid "yes" msgstr "sí" -#: utils/init/postinit.c:286 +#: utils/init/postinit.c:287 #, c-format msgid " GSS (authenticated=%s, encrypted=%s)" msgstr " GSS (autenticado=%s, cifrado=%s)" -#: utils/init/postinit.c:323 +#: utils/init/postinit.c:324 #, 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:325 +#: utils/init/postinit.c:326 #, 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:345 +#: utils/init/postinit.c:346 #, c-format msgid "database \"%s\" is not currently accepting connections" msgstr "la base de datos «%s» no acepta conexiones" -#: utils/init/postinit.c:358 +#: utils/init/postinit.c:359 #, c-format msgid "permission denied for database \"%s\"" msgstr "permiso denegado a la base de datos «%s»" -#: utils/init/postinit.c:359 +#: utils/init/postinit.c:360 #, c-format msgid "User does not have CONNECT privilege." msgstr "Usuario no tiene privilegios de conexión." -#: utils/init/postinit.c:376 +#: utils/init/postinit.c:377 #, c-format msgid "too many connections for database \"%s\"" msgstr "demasiadas conexiones para la base de datos «%s»" -#: utils/init/postinit.c:398 utils/init/postinit.c:405 +#: utils/init/postinit.c:399 utils/init/postinit.c:406 #, 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:399 +#: utils/init/postinit.c:400 #, 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:401 utils/init/postinit.c:408 +#: utils/init/postinit.c:402 utils/init/postinit.c:409 #, 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:406 +#: utils/init/postinit.c:407 #, c-format msgid "The database was initialized with LC_CTYPE \"%s\", which is not recognized by setlocale()." msgstr "La base de datos fue inicializada con LC_CTYPE «%s», el cual no es reconocido por setlocale()." -#: utils/init/postinit.c:761 +#: utils/init/postinit.c:762 #, 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:762 +#: utils/init/postinit.c:763 #, c-format msgid "You should immediately run CREATE USER \"%s\" SUPERUSER;." msgstr "Debería ejecutar imediatamente CREATE USER \"%s\" SUPERUSER;." -#: utils/init/postinit.c:798 +#: utils/init/postinit.c:815 #, 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:802 +#: utils/init/postinit.c:819 #, 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:812 +#: utils/init/postinit.c:829 #, 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:825 +#: utils/init/postinit.c:842 #, 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:835 +#: utils/init/postinit.c:852 #, 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:904 +#: utils/init/postinit.c:921 #, 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:1011 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "Parece haber sido eliminada o renombrada." -#: utils/init/postinit.c:1001 +#: utils/init/postinit.c:1018 #, c-format msgid "cannot connect to invalid database \"%s\"" msgstr "no se puede conectar a la base de datos no válida «%s»" -#: utils/init/postinit.c:1021 +#: utils/init/postinit.c:1038 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "Falta el subdirectorio de base de datos «%s»." -#: utils/init/postinit.c:1026 +#: utils/init/postinit.c:1043 #, c-format msgid "could not access directory \"%s\": %m" msgstr "no se pudo acceder al directorio «%s»: %m" @@ -27527,7 +27532,7 @@ msgstr "nombre de parámetro de configuración «%s» no válido" msgid "Custom parameter names must be two or more simple identifiers separated by dots." msgstr "Los nombres de los parámetros personalizados deben ser dos o más identificadores sencillos separados por puntos." -#: utils/misc/guc.c:5555 utils/misc/guc.c:9327 +#: utils/misc/guc.c:5555 utils/misc/guc.c:9366 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "parámetro de configuración «%s» no reconocido" @@ -27602,13 +27607,13 @@ msgstr "%g%s%s está fuera del rango aceptable para el parámetro «%s» (%g .. msgid "parameter \"%s\" cannot be set during a parallel operation" msgstr "no se puede definir el parámetro «%s» durante una operación paralela" -#: utils/misc/guc.c:7372 utils/misc/guc.c:8572 +#: utils/misc/guc.c:7372 utils/misc/guc.c:8611 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "no se puede cambiar el parámetro «%s»" #: utils/misc/guc.c:7395 utils/misc/guc.c:7597 utils/misc/guc.c:7691 -#: utils/misc/guc.c:7785 utils/misc/guc.c:7905 utils/misc/guc.c:8004 +#: utils/misc/guc.c:7785 utils/misc/guc.c:7907 utils/misc/guc.c:8043 #: guc-file.l:353 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" @@ -27619,7 +27624,7 @@ msgstr "el parámetro «%s» no se puede cambiar sin reiniciar el servidor" msgid "parameter \"%s\" cannot be changed now" msgstr "el parámetro «%s» no se puede cambiar en este momento" -#: utils/misc/guc.c:7423 utils/misc/guc.c:7474 utils/misc/guc.c:11390 +#: utils/misc/guc.c:7423 utils/misc/guc.c:7474 utils/misc/guc.c:11423 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "se ha denegado el permiso para cambiar la opción «%s»" @@ -27634,142 +27639,142 @@ msgstr "el parámetro «%s» no se puede cambiar después de efectuar la conexi 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:8145 utils/misc/guc.c:8192 utils/misc/guc.c:9606 +#: utils/misc/guc.c:8184 utils/misc/guc.c:8231 utils/misc/guc.c:9645 #, 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:8276 +#: utils/misc/guc.c:8315 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s lleva sólo un argumento" -#: utils/misc/guc.c:8524 +#: utils/misc/guc.c:8563 #, 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:8605 +#: utils/misc/guc.c:8644 #, 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:8650 +#: utils/misc/guc.c:8689 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "no se pudo interpretar el contenido del archivo «%s»" -#: utils/misc/guc.c:8731 +#: utils/misc/guc.c:8770 #, 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:8807 +#: utils/misc/guc.c:8846 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT no está implementado" -#: utils/misc/guc.c:8891 +#: utils/misc/guc.c:8930 #, c-format msgid "SET requires parameter name" msgstr "SET requiere el nombre de un parámetro" -#: utils/misc/guc.c:9024 +#: utils/misc/guc.c:9063 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "intento de cambiar la opción «%s»" -#: utils/misc/guc.c:10837 +#: utils/misc/guc.c:10870 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "al establecer el parámetro «%s» a «%s»" -#: utils/misc/guc.c:11002 +#: utils/misc/guc.c:11035 #, c-format msgid "parameter \"%s\" could not be set" msgstr "no se pudo cambiar el parámetro «%s»" -#: utils/misc/guc.c:11094 +#: utils/misc/guc.c:11127 #, 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:11452 utils/misc/guc.c:11486 +#: utils/misc/guc.c:11485 utils/misc/guc.c:11519 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "valor no válido para el parámetro «%s»: %d" -#: utils/misc/guc.c:11520 +#: utils/misc/guc.c:11553 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "valor no válido para el parámetro «%s»: %g" -#: utils/misc/guc.c:11807 +#: utils/misc/guc.c:11840 #, 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:11819 +#: utils/misc/guc.c:11852 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour no está soportado en este servidor" -#: utils/misc/guc.c:11832 +#: utils/misc/guc.c:11865 #, c-format msgid "SSL is not supported by this build" msgstr "SSL no está soportado en este servidor" -#: utils/misc/guc.c:11844 +#: utils/misc/guc.c:11877 #, 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:11856 +#: utils/misc/guc.c:11889 #, 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:12086 +#: utils/misc/guc.c:12119 #, 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:12099 +#: utils/misc/guc.c:12132 #, c-format msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "maintenance_io_concurrency debe ser 0 en plataformas que no tienen posix_fadvise()." -#: utils/misc/guc.c:12113 +#: utils/misc/guc.c:12146 #, c-format msgid "huge_page_size must be 0 on this platform." msgstr "huge_page_size debe ser 0 en esta plataforma." -#: utils/misc/guc.c:12127 +#: utils/misc/guc.c:12160 #, c-format msgid "client_connection_check_interval must be set to 0 on platforms that lack POLLRDHUP." msgstr "client_connection_check_interval debe ser 0 en plataformas que no tienen POLLRDHUP." -#: utils/misc/guc.c:12255 +#: utils/misc/guc.c:12288 #, c-format msgid "invalid character" msgstr "carácter no válido" -#: utils/misc/guc.c:12315 +#: utils/misc/guc.c:12348 #, 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:12355 +#: utils/misc/guc.c:12388 #, c-format msgid "multiple recovery targets specified" msgstr "múltiples valores de destino de recuperación especificados" -#: utils/misc/guc.c:12356 +#: utils/misc/guc.c:12389 #, 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:12364 +#: utils/misc/guc.c:12397 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "El único valor permitido es «immediate»." @@ -28594,10 +28599,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'." - -#, c-format -#~ msgid "DO ALSO rules are not supported for the COPY" -#~ msgstr "las reglas DO ALSO no están soportadas para COPY" - -#~ msgid "Sets relation kinds of non-system relation to restrict use" -#~ msgstr "Define tipos de relación que están restringidos para relaciones que no son de sistema." diff --git a/src/backend/po/fr.po b/src/backend/po/fr.po index beb635371ea..4ee7e99a661 100644 --- a/src/backend/po/fr.po +++ b/src/backend/po/fr.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: 2024-11-11 02:30+0000\n" -"PO-Revision-Date: 2024-11-11 09:56+0100\n" +"POT-Creation-Date: 2025-02-05 00:00+0000\n" +"PO-Revision-Date: 2025-02-05 09:04+0100\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: French \n" "Language: fr\n" @@ -28,18 +28,18 @@ 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:96 ../common/controldata_utils.c:99 access/transam/timeline.c:143 access/transam/timeline.c:362 access/transam/twophase.c:1329 access/transam/xlog.c:3576 access/transam/xlog.c:4820 access/transam/xlog.c:11665 access/transam/xlog.c:11678 access/transam/xlog.c:12133 access/transam/xlog.c:12213 access/transam/xlog.c:12250 access/transam/xlog.c:12310 access/transam/xlogfuncs.c:703 access/transam/xlogfuncs.c:722 commands/extension.c:3492 libpq/hba.c:534 replication/basebackup.c:2016 replication/logical/origin.c:729 replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4959 replication/logical/snapbuild.c:1872 +#: ../common/controldata_utils.c:96 ../common/controldata_utils.c:99 access/transam/timeline.c:143 access/transam/timeline.c:362 access/transam/twophase.c:1329 access/transam/xlog.c:3576 access/transam/xlog.c:4817 access/transam/xlog.c:11662 access/transam/xlog.c:11675 access/transam/xlog.c:12130 access/transam/xlog.c:12210 access/transam/xlog.c:12247 access/transam/xlog.c:12307 access/transam/xlogfuncs.c:703 access/transam/xlogfuncs.c:722 commands/extension.c:3492 libpq/hba.c:534 replication/basebackup.c:2016 replication/logical/origin.c:729 replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4959 replication/logical/snapbuild.c:1872 #: replication/logical/snapbuild.c:1914 replication/logical/snapbuild.c:1941 replication/slot.c:1727 replication/slot.c:1768 replication/walsender.c:545 storage/file/buffile.c:445 storage/file/copydir.c:195 utils/adt/genfile.c:202 utils/adt/misc.c:881 utils/cache/relmapper.c:744 #, c-format msgid "could not read file \"%s\": %m" msgstr "n'a pas pu lire le fichier « %s » : %m" -#: ../common/controldata_utils.c:107 ../common/controldata_utils.c:111 access/transam/xlog.c:3581 access/transam/xlog.c:4825 replication/basebackup.c:2020 replication/logical/origin.c:734 replication/logical/origin.c:773 replication/logical/snapbuild.c:1877 replication/logical/snapbuild.c:1919 replication/logical/snapbuild.c:1946 replication/slot.c:1731 replication/slot.c:1772 replication/walsender.c:550 utils/cache/relmapper.c:748 +#: ../common/controldata_utils.c:107 ../common/controldata_utils.c:111 access/transam/xlog.c:3581 access/transam/xlog.c:4822 replication/basebackup.c:2020 replication/logical/origin.c:734 replication/logical/origin.c:773 replication/logical/snapbuild.c:1877 replication/logical/snapbuild.c:1919 replication/logical/snapbuild.c:1946 replication/slot.c:1731 replication/slot.c:1772 replication/walsender.c:550 utils/cache/relmapper.c:748 #, 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:122 ../common/controldata_utils.c:127 ../common/controldata_utils.c:286 ../common/controldata_utils.c:289 access/heap/rewriteheap.c:1178 access/heap/rewriteheap.c:1281 access/transam/timeline.c:392 access/transam/timeline.c:438 access/transam/timeline.c:516 access/transam/twophase.c:1341 access/transam/twophase.c:1753 access/transam/xlog.c:3445 access/transam/xlog.c:3616 access/transam/xlog.c:3621 access/transam/xlog.c:3949 access/transam/xlog.c:4790 access/transam/xlog.c:5715 access/transam/xlogfuncs.c:728 commands/copyfrom.c:1586 commands/copyto.c:328 libpq/be-fsstubs.c:455 libpq/be-fsstubs.c:525 replication/logical/origin.c:667 +#: ../common/controldata_utils.c:122 ../common/controldata_utils.c:127 ../common/controldata_utils.c:286 ../common/controldata_utils.c:289 access/heap/rewriteheap.c:1178 access/heap/rewriteheap.c:1281 access/transam/timeline.c:392 access/transam/timeline.c:438 access/transam/timeline.c:512 access/transam/twophase.c:1341 access/transam/twophase.c:1753 access/transam/xlog.c:3445 access/transam/xlog.c:3616 access/transam/xlog.c:3621 access/transam/xlog.c:3946 access/transam/xlog.c:4787 access/transam/xlog.c:5712 access/transam/xlogfuncs.c:728 commands/copyfrom.c:1586 commands/copyto.c:328 libpq/be-fsstubs.c:455 libpq/be-fsstubs.c:525 replication/logical/origin.c:667 #: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:5017 replication/logical/snapbuild.c:1781 replication/logical/snapbuild.c:1954 replication/slot.c:1618 replication/slot.c:1779 replication/walsender.c:560 storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:738 storage/file/fd.c:3537 storage/file/fd.c:3640 utils/cache/relmapper.c:759 utils/cache/relmapper.c:898 #, c-format msgid "could not close file \"%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:227 ../common/controldata_utils.c:233 ../common/file_utils.c:227 ../common/file_utils.c:286 ../common/file_utils.c:360 access/heap/rewriteheap.c:1264 access/transam/timeline.c:111 access/transam/timeline.c:251 access/transam/timeline.c:348 access/transam/twophase.c:1285 access/transam/xlog.c:3331 access/transam/xlog.c:3487 access/transam/xlog.c:3531 access/transam/xlog.c:3729 access/transam/xlog.c:3814 access/transam/xlog.c:3917 access/transam/xlog.c:4810 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:3612 -#: replication/logical/reorderbuffer.c:4163 replication/logical/reorderbuffer.c:4939 replication/logical/snapbuild.c:1736 replication/logical/snapbuild.c:1843 replication/slot.c:1699 replication/walsender.c:518 replication/walsender.c:2563 storage/file/copydir.c:161 storage/file/fd.c:713 storage/file/fd.c:3306 storage/file/fd.c:3524 storage/file/fd.c:3611 storage/smgr/md.c:506 utils/cache/relmapper.c:724 utils/cache/relmapper.c:842 utils/error/elog.c:1958 utils/init/miscinit.c:1359 utils/init/miscinit.c:1493 utils/init/miscinit.c:1570 utils/misc/guc.c:8643 utils/misc/guc.c:8675 +#: ../common/controldata_utils.c:227 ../common/controldata_utils.c:233 ../common/file_utils.c:227 ../common/file_utils.c:286 ../common/file_utils.c:360 access/heap/rewriteheap.c:1264 access/transam/timeline.c:111 access/transam/timeline.c:251 access/transam/timeline.c:348 access/transam/twophase.c:1285 access/transam/xlog.c:3331 access/transam/xlog.c:3487 access/transam/xlog.c:3531 access/transam/xlog.c:3726 access/transam/xlog.c:3811 access/transam/xlog.c:3914 access/transam/xlog.c:4807 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:3612 +#: replication/logical/reorderbuffer.c:4163 replication/logical/reorderbuffer.c:4939 replication/logical/snapbuild.c:1736 replication/logical/snapbuild.c:1843 replication/slot.c:1699 replication/walsender.c:518 replication/walsender.c:2563 storage/file/copydir.c:161 storage/file/fd.c:713 storage/file/fd.c:3306 storage/file/fd.c:3524 storage/file/fd.c:3611 storage/smgr/md.c:506 utils/cache/relmapper.c:724 utils/cache/relmapper.c:842 utils/error/elog.c:1958 utils/init/miscinit.c:1403 utils/init/miscinit.c:1537 utils/init/miscinit.c:1614 utils/misc/guc.c:8682 utils/misc/guc.c:8714 #, c-format msgid "could not open file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier « %s » : %m" -#: ../common/controldata_utils.c:251 ../common/controldata_utils.c:254 access/transam/twophase.c:1726 access/transam/twophase.c:1735 access/transam/xlog.c:11422 access/transam/xlog.c:11460 access/transam/xlog.c:11873 access/transam/xlogfuncs.c:782 postmaster/postmaster.c:5684 postmaster/syslogger.c:1499 postmaster/syslogger.c:1512 utils/cache/relmapper.c:876 +#: ../common/controldata_utils.c:251 ../common/controldata_utils.c:254 access/transam/twophase.c:1726 access/transam/twophase.c:1735 access/transam/xlog.c:11419 access/transam/xlog.c:11457 access/transam/xlog.c:11870 access/transam/xlogfuncs.c:782 postmaster/postmaster.c:5686 postmaster/syslogger.c:1499 postmaster/syslogger.c:1512 utils/cache/relmapper.c:876 #, c-format msgid "could not write file \"%s\": %m" msgstr "impossible d'écrire le fichier « %s » : %m" -#: ../common/controldata_utils.c:269 ../common/controldata_utils.c:275 ../common/file_utils.c:298 ../common/file_utils.c:368 access/heap/rewriteheap.c:960 access/heap/rewriteheap.c:1172 access/heap/rewriteheap.c:1275 access/transam/timeline.c:432 access/transam/timeline.c:510 access/transam/twophase.c:1747 access/transam/xlog.c:3438 access/transam/xlog.c:3610 access/transam/xlog.c:4783 access/transam/xlog.c:10905 access/transam/xlog.c:10946 replication/logical/snapbuild.c:1774 replication/slot.c:1604 replication/slot.c:1709 storage/file/fd.c:730 storage/file/fd.c:3632 storage/smgr/md.c:954 storage/smgr/md.c:995 storage/sync/sync.c:454 utils/cache/relmapper.c:891 -#: utils/misc/guc.c:8430 +#: ../common/controldata_utils.c:269 ../common/controldata_utils.c:275 ../common/file_utils.c:298 ../common/file_utils.c:368 access/heap/rewriteheap.c:960 access/heap/rewriteheap.c:1172 access/heap/rewriteheap.c:1275 access/transam/timeline.c:432 access/transam/timeline.c:506 access/transam/twophase.c:1747 access/transam/xlog.c:3438 access/transam/xlog.c:3610 access/transam/xlog.c:4780 access/transam/xlog.c:10902 access/transam/xlog.c:10943 replication/logical/snapbuild.c:1774 replication/slot.c:1604 replication/slot.c:1709 storage/file/fd.c:730 storage/file/fd.c:3632 storage/smgr/md.c:956 storage/smgr/md.c:997 storage/sync/sync.c:454 utils/cache/relmapper.c:891 +#: utils/misc/guc.c:8469 #, 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:560 ../common/exec.c:605 ../common/exec.c:697 ../common/hmac_openssl.c:101 ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:630 ../port/path.c:668 ../port/path.c:685 access/transam/twophase.c:1399 access/transam/xlog.c:6695 lib/dshash.c:245 libpq/auth.c:1489 libpq/auth.c:1557 libpq/auth.c:2115 libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:349 postmaster/bgworker.c:948 postmaster/postmaster.c:2550 postmaster/postmaster.c:4208 postmaster/postmaster.c:5609 postmaster/postmaster.c:5973 replication/libpqwalreceiver/libpqwalreceiver.c:287 replication/logical/logical.c:206 replication/walsender.c:592 -#: storage/buffer/localbuf.c:442 storage/file/fd.c:888 storage/file/fd.c:1360 storage/file/fd.c:1521 storage/file/fd.c:2329 storage/ipc/procarray.c:1472 storage/ipc/procarray.c:2293 storage/ipc/procarray.c:2300 storage/ipc/procarray.c:2805 storage/ipc/procarray.c:3482 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:5061 utils/misc/guc.c:5077 utils/misc/guc.c:5090 utils/misc/guc.c:8408 utils/misc/tzparser.c:476 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:702 utils/mmgr/dsa.c:724 utils/mmgr/dsa.c:805 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:1088 utils/mmgr/mcxt.c:1119 utils/mmgr/mcxt.c:1155 utils/mmgr/mcxt.c:1207 utils/mmgr/mcxt.c:1242 utils/mmgr/mcxt.c:1277 utils/mmgr/slab.c:238 +#: ../common/cryptohash_openssl.c:104 ../common/exec.c:560 ../common/exec.c:605 ../common/exec.c:697 ../common/hmac_openssl.c:101 ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:707 ../port/path.c:745 ../port/path.c:762 access/transam/twophase.c:1399 access/transam/xlog.c:6692 lib/dshash.c:245 libpq/auth.c:1489 libpq/auth.c:1557 libpq/auth.c:2115 libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:349 postmaster/bgworker.c:948 postmaster/postmaster.c:2552 postmaster/postmaster.c:4209 postmaster/postmaster.c:5611 postmaster/postmaster.c:5975 replication/libpqwalreceiver/libpqwalreceiver.c:287 replication/logical/logical.c:206 replication/walsender.c:592 +#: storage/buffer/localbuf.c:442 storage/file/fd.c:888 storage/file/fd.c:1360 storage/file/fd.c:1521 storage/file/fd.c:2329 storage/ipc/procarray.c:1472 storage/ipc/procarray.c:2293 storage/ipc/procarray.c:2300 storage/ipc/procarray.c:2805 storage/ipc/procarray.c:3482 tcop/postgres.c:3655 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:5061 utils/misc/guc.c:5077 utils/misc/guc.c:5090 utils/misc/guc.c:8447 utils/misc/tzparser.c:476 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:702 utils/mmgr/dsa.c:724 utils/mmgr/dsa.c:805 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:1088 utils/mmgr/mcxt.c:1119 utils/mmgr/mcxt.c:1155 utils/mmgr/mcxt.c:1207 utils/mmgr/mcxt.c:1242 utils/mmgr/mcxt.c:1277 utils/mmgr/slab.c:238 #, c-format msgid "out of memory" msgstr "mémoire épuisée" @@ -107,12 +107,12 @@ msgstr "n'a pas pu lire le binaire « %s »" msgid "could not find a \"%s\" to execute" msgstr "n'a pas pu trouver un « %s » à exécuter" -#: ../common/exec.c:282 ../common/exec.c:321 utils/init/miscinit.c:424 +#: ../common/exec.c:282 ../common/exec.c:321 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:299 access/transam/xlog.c:11296 replication/basebackup.c:1428 utils/adt/misc.c:362 +#: ../common/exec.c:299 access/transam/xlog.c:11293 replication/basebackup.c:1428 utils/adt/misc.c:362 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "n'a pas pu lire le lien symbolique « %s » : %m" @@ -122,7 +122,7 @@ msgstr "n'a pas pu lire le lien symbolique « %s » : %m" 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/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:208 utils/misc/ps_status.c:216 utils/misc/ps_status.c:246 utils/misc/ps_status.c:254 +#: ../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:709 ../port/path.c:747 ../port/path.c:764 utils/misc/ps_status.c:208 utils/misc/ps_status.c:216 utils/misc/ps_status.c:246 utils/misc/ps_status.c:254 #, c-format msgid "out of memory\n" msgstr "mémoire épuisée\n" @@ -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:86 ../common/file_utils.c:446 ../common/file_utils.c:450 access/transam/twophase.c:1297 access/transam/xlog.c:11398 access/transam/xlog.c:11436 access/transam/xlog.c:11653 access/transam/xlogarchive.c:110 access/transam/xlogarchive.c:227 commands/copyfrom.c:1536 commands/copyto.c:730 commands/extension.c:3471 commands/tablespace.c:805 commands/tablespace.c:894 guc-file.l:1062 replication/basebackup.c:439 replication/basebackup.c:622 replication/basebackup.c:698 replication/logical/snapbuild.c:1653 storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1871 storage/file/fd.c:1957 storage/file/fd.c:3157 storage/file/fd.c:3360 -#: 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 utils/adt/misc.c:348 +#: ../common/file_utils.c:86 ../common/file_utils.c:446 ../common/file_utils.c:450 access/transam/twophase.c:1297 access/transam/xlog.c:11395 access/transam/xlog.c:11433 access/transam/xlog.c:11650 access/transam/xlogarchive.c:110 access/transam/xlogarchive.c:227 commands/copyfrom.c:1536 commands/copyto.c:730 commands/extension.c:3471 commands/tablespace.c:805 commands/tablespace.c:894 guc-file.l:1062 postmaster/pgarch.c:696 replication/basebackup.c:439 replication/basebackup.c:622 replication/basebackup.c:698 replication/logical/snapbuild.c:1653 storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1871 storage/file/fd.c:1957 storage/file/fd.c:3157 +#: storage/file/fd.c:3360 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 utils/adt/misc.c:348 #, c-format msgid "could not stat file \"%s\": %m" msgstr "n'a pas pu tester le fichier « %s » : %m" -#: ../common/file_utils.c:161 ../common/pgfnames.c:48 commands/tablespace.c:729 commands/tablespace.c:739 postmaster/postmaster.c:1518 storage/file/fd.c:2732 storage/file/reinit.c:122 utils/adt/misc.c:263 utils/misc/tzparser.c:338 +#: ../common/file_utils.c:161 ../common/pgfnames.c:48 commands/tablespace.c:729 commands/tablespace.c:739 postmaster/postmaster.c:1520 storage/file/fd.c:2732 storage/file/reinit.c:122 utils/adt/misc.c:263 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" @@ -432,7 +432,7 @@ msgstr "" "Vous pouvez avoir un antivirus, un outil de sauvegarde ou un logiciel\n" "similaire interférant avec le système de bases de données." -#: ../port/path.c:654 +#: ../port/path.c:731 #, c-format msgid "could not get current working directory: %s\n" msgstr "n'a pas pu obtenir le répertoire de travail : %s\n" @@ -464,7 +464,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:1036 access/brin/brin.c:1146 access/gin/ginfast.c:1042 access/transam/xlog.c:11067 access/transam/xlog.c:11604 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:1036 access/brin/brin.c:1146 access/gin/ginfast.c:1042 access/transam/xlog.c:11064 access/transam/xlog.c:11601 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" @@ -641,7 +641,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:1294 utils/misc/guc.c:12571 +#: access/common/reloptions.c:1294 utils/misc/guc.c:12604 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "les tables avec WITH OIDS ne sont pas supportées" @@ -753,7 +753,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:2169 utils/adt/arrayfuncs.c:3873 utils/adt/arrayfuncs.c:6541 utils/adt/rowtypes.c:957 +#: access/gin/ginutil.c:145 executor/execExpr.c:2177 utils/adt/arrayfuncs.c:3873 utils/adt/arrayfuncs.c:6541 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" @@ -839,7 +839,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:279 access/hash/hashfunc.c:336 catalog/heap.c:714 catalog/heap.c:720 commands/createas.c:206 commands/createas.c:515 commands/indexcmds.c:1964 commands/tablecmds.c:17155 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:1004 utils/adt/varchar.c:733 utils/adt/varchar.c:994 utils/adt/varchar.c:1055 utils/adt/varlena.c:1517 +#: access/hash/hashfunc.c:279 access/hash/hashfunc.c:336 catalog/heap.c:714 catalog/heap.c:720 commands/createas.c:206 commands/createas.c:515 commands/indexcmds.c:1971 commands/tablecmds.c:17155 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:1004 utils/adt/varchar.c:733 utils/adt/varchar.c:994 utils/adt/varchar.c:1055 utils/adt/varlena.c:1517 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." msgstr "Utilisez la clause COLLATE pour configurer explicitement le collationnement." @@ -891,37 +891,37 @@ 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:2298 +#: access/heap/heapam.c:2299 #, 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:2769 +#: access/heap/heapam.c:2770 #, 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:2815 +#: access/heap/heapam.c:2816 #, c-format msgid "attempted to delete invisible tuple" msgstr "tentative de supprimer une ligne invisible" -#: access/heap/heapam.c:3261 access/heap/heapam.c:6486 access/index/genam.c:816 +#: access/heap/heapam.c:3262 access/heap/heapam.c:6529 access/index/genam.c:816 #, 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:3406 +#: access/heap/heapam.c:3449 #, c-format msgid "attempted to update invisible tuple" msgstr "tentative de mettre à jour une ligne invisible" -#: access/heap/heapam.c:4893 access/heap/heapam.c:4931 access/heap/heapam.c:5196 access/heap/heapam_handler.c:457 +#: access/heap/heapam.c:4936 access/heap/heapam.c:4974 access/heap/heapam.c:5239 access/heap/heapam_handler.c:457 #, 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.c:6299 commands/trigger.c:3122 executor/nodeModifyTable.c:1968 executor/nodeModifyTable.c:2058 +#: access/heap/heapam.c:6342 commands/trigger.c:3122 executor/nodeModifyTable.c:1968 executor/nodeModifyTable.c:2058 #, 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" @@ -941,7 +941,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:1013 access/heap/rewriteheap.c:1131 access/transam/timeline.c:329 access/transam/timeline.c:485 access/transam/xlog.c:3354 access/transam/xlog.c:3545 access/transam/xlog.c:4762 access/transam/xlog.c:11413 access/transam/xlog.c:11451 access/transam/xlog.c:11856 access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4633 postmaster/postmaster.c:5671 replication/logical/origin.c:587 replication/slot.c:1551 storage/file/copydir.c:167 storage/smgr/md.c:218 utils/time/snapmgr.c:1261 +#: access/heap/rewriteheap.c:1013 access/heap/rewriteheap.c:1131 access/transam/timeline.c:329 access/transam/timeline.c:481 access/transam/xlog.c:3354 access/transam/xlog.c:3545 access/transam/xlog.c:4759 access/transam/xlog.c:11410 access/transam/xlog.c:11448 access/transam/xlog.c:11853 access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4634 postmaster/postmaster.c:5673 replication/logical/origin.c:587 replication/slot.c:1551 storage/file/copydir.c:167 storage/smgr/md.c:218 utils/time/snapmgr.c:1261 #, c-format msgid "could not create file \"%s\": %m" msgstr "n'a pas pu créer le fichier « %s » : %m" @@ -951,7 +951,7 @@ 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:1159 access/transam/timeline.c:384 access/transam/timeline.c:424 access/transam/timeline.c:502 access/transam/xlog.c:3426 access/transam/xlog.c:3601 access/transam/xlog.c:4774 postmaster/postmaster.c:4643 postmaster/postmaster.c:4653 replication/logical/origin.c:599 replication/logical/origin.c:641 replication/logical/origin.c:660 replication/logical/snapbuild.c:1750 replication/slot.c:1586 storage/file/buffile.c:506 storage/file/copydir.c:207 utils/init/miscinit.c:1434 utils/init/miscinit.c:1445 utils/init/miscinit.c:1453 utils/misc/guc.c:8391 utils/misc/guc.c:8422 utils/misc/guc.c:10349 utils/misc/guc.c:10363 utils/time/snapmgr.c:1266 +#: access/heap/rewriteheap.c:1159 access/transam/timeline.c:384 access/transam/timeline.c:424 access/transam/timeline.c:498 access/transam/xlog.c:3426 access/transam/xlog.c:3601 access/transam/xlog.c:4771 postmaster/postmaster.c:4644 postmaster/postmaster.c:4654 replication/logical/origin.c:599 replication/logical/origin.c:641 replication/logical/origin.c:660 replication/logical/snapbuild.c:1750 replication/slot.c:1586 storage/file/buffile.c:506 storage/file/copydir.c:207 utils/init/miscinit.c:1478 utils/init/miscinit.c:1489 utils/init/miscinit.c:1497 utils/misc/guc.c:8430 utils/misc/guc.c:8461 utils/misc/guc.c:10388 utils/misc/guc.c:10402 utils/time/snapmgr.c:1266 #: utils/time/snapmgr.c:1273 #, c-format msgid "could not write to file \"%s\": %m" @@ -1084,7 +1084,7 @@ msgid_plural "%u frozen pages.\n" msgstr[0] "%u page gelée.\n" msgstr[1] "%u pages gelées.\n" -#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4128 commands/indexcmds.c:4147 +#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4135 commands/indexcmds.c:4154 #, c-format msgid "%s." msgstr "%s." @@ -1240,7 +1240,7 @@ msgstr "transaction annulée lors du parcours du catalogue système" msgid "cannot access index \"%s\" while it is being reindexed" msgstr "ne peut pas accéder à l'index « %s » car il est en cours de réindexation" -#: access/index/indexam.c:208 catalog/objectaddress.c:1355 commands/indexcmds.c:2792 commands/tablecmds.c:267 commands/tablecmds.c:291 commands/tablecmds.c:16851 commands/tablecmds.c:18645 +#: access/index/indexam.c:208 catalog/objectaddress.c:1355 commands/indexcmds.c:2799 commands/tablecmds.c:267 commands/tablecmds.c:291 commands/tablecmds.c:16851 commands/tablecmds.c:18645 #, c-format msgid "\"%s\" is not an index" msgstr "« %s » n'est pas un index" @@ -1263,7 +1263,7 @@ msgstr "La clé « %s » existe déjà." #: 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." +msgstr "Ceci peut être dû à une expression d'index non immutable." #: access/nbtree/nbtpage.c:159 access/nbtree/nbtpage.c:608 parser/parse_utilcmd.c:2337 #, c-format @@ -1355,7 +1355,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:12495 +#: access/table/tableamapi.c:122 utils/misc/guc.c:12528 #, c-format msgid "%s is too long (maximum %d characters)." msgstr "%s est trop long (%d caractères maximum)." @@ -1504,36 +1504,36 @@ msgstr "ne peut pas tronquer jusqu'au MutiXact %u car il n'existe pas sur disque msgid "invalid MultiXactId: %u" msgstr "MultiXactId invalide : %u" -#: access/transam/parallel.c:731 access/transam/parallel.c:850 +#: access/transam/parallel.c:737 access/transam/parallel.c:856 #, c-format msgid "parallel worker failed to initialize" msgstr "échec de l'initialisation du worker parallèle" -#: access/transam/parallel.c:732 access/transam/parallel.c:851 +#: access/transam/parallel.c:738 access/transam/parallel.c:857 #, 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:912 +#: access/transam/parallel.c:918 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "postmaster a quitté pendant une transaction parallèle" -#: access/transam/parallel.c:1099 +#: access/transam/parallel.c:1105 #, c-format msgid "lost connection to parallel worker" msgstr "perte de la connexion au processus parallèle" -#: access/transam/parallel.c:1165 access/transam/parallel.c:1167 +#: access/transam/parallel.c:1171 access/transam/parallel.c:1173 msgid "parallel worker" msgstr "processus parallèle" -#: access/transam/parallel.c:1320 +#: access/transam/parallel.c:1326 #, 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:1325 +#: access/transam/parallel.c:1331 #, 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" @@ -1630,7 +1630,7 @@ msgstr "" "Les identifiants timeline doivent être plus petits que les enfants des\n" "identifiants timeline." -#: access/transam/timeline.c:597 +#: access/transam/timeline.c:589 #, 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" @@ -1736,7 +1736,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:1400 access/transam/xlog.c:6696 +#: access/transam/twophase.c:1400 access/transam/xlog.c:6693 #, 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." @@ -1988,64 +1988,64 @@ msgstr "n'a pas pu écrire le fichier de transactions %s au décalage %u, longue msgid "This is known to fail occasionally during archive recovery, where it is harmless." msgstr "Ceci est connu pour échouer de temps en temps lors d'une restauration d'archive. C'est sans danger." -#: access/transam/xlog.c:4017 access/transam/xlogutils.c:798 replication/walsender.c:2557 +#: access/transam/xlog.c:4014 access/transam/xlogutils.c:798 replication/walsender.c:2557 #, 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:4292 +#: access/transam/xlog.c:4289 #, c-format msgid "could not rename file \"%s\": %m" msgstr "n'a pas pu renommer le fichier « %s » : %m" -#: access/transam/xlog.c:4334 access/transam/xlog.c:4344 +#: access/transam/xlog.c:4331 access/transam/xlog.c:4341 #, 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:4350 +#: access/transam/xlog.c:4347 #, 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:4353 commands/dbcommands.c:2295 +#: access/transam/xlog.c:4350 commands/dbcommands.c:2295 #, 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:4475 +#: access/transam/xlog.c:4472 #, 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:4613 +#: access/transam/xlog.c:4610 #, 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:4627 +#: access/transam/xlog.c:4624 #, 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:4646 +#: access/transam/xlog.c:4643 #, c-format msgid "new target timeline is %u" msgstr "la nouvelle timeline cible est %u" -#: access/transam/xlog.c:4682 +#: access/transam/xlog.c:4679 #, 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:4841 access/transam/xlog.c:4850 access/transam/xlog.c:4874 access/transam/xlog.c:4881 access/transam/xlog.c:4888 access/transam/xlog.c:4893 access/transam/xlog.c:4900 access/transam/xlog.c:4907 access/transam/xlog.c:4914 access/transam/xlog.c:4921 access/transam/xlog.c:4928 access/transam/xlog.c:4935 access/transam/xlog.c:4944 access/transam/xlog.c:4951 utils/init/miscinit.c:1591 +#: access/transam/xlog.c:4838 access/transam/xlog.c:4847 access/transam/xlog.c:4871 access/transam/xlog.c:4878 access/transam/xlog.c:4885 access/transam/xlog.c:4890 access/transam/xlog.c:4897 access/transam/xlog.c:4904 access/transam/xlog.c:4911 access/transam/xlog.c:4918 access/transam/xlog.c:4925 access/transam/xlog.c:4932 access/transam/xlog.c:4941 access/transam/xlog.c:4948 utils/init/miscinit.c:1635 #, 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:4842 +#: access/transam/xlog.c:4839 #, 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 "" @@ -2053,149 +2053,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:4846 +#: access/transam/xlog.c:4843 #, 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:4851 +#: access/transam/xlog.c:4848 #, 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:4854 access/transam/xlog.c:4878 access/transam/xlog.c:4885 access/transam/xlog.c:4890 +#: access/transam/xlog.c:4851 access/transam/xlog.c:4875 access/transam/xlog.c:4882 access/transam/xlog.c:4887 #, c-format msgid "It looks like you need to initdb." msgstr "Il semble que vous avez besoin d'initdb." -#: access/transam/xlog.c:4865 +#: access/transam/xlog.c:4862 #, c-format msgid "incorrect checksum in control file" msgstr "somme de contrôle incorrecte dans le fichier de contrôle" -#: access/transam/xlog.c:4875 +#: access/transam/xlog.c:4872 #, 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:4882 +#: access/transam/xlog.c:4879 #, 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:4889 +#: access/transam/xlog.c:4886 #, 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:4894 +#: access/transam/xlog.c:4891 #, 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:4897 access/transam/xlog.c:4904 access/transam/xlog.c:4911 access/transam/xlog.c:4918 access/transam/xlog.c:4925 access/transam/xlog.c:4932 access/transam/xlog.c:4939 access/transam/xlog.c:4947 access/transam/xlog.c:4954 +#: access/transam/xlog.c:4894 access/transam/xlog.c:4901 access/transam/xlog.c:4908 access/transam/xlog.c:4915 access/transam/xlog.c:4922 access/transam/xlog.c:4929 access/transam/xlog.c:4936 access/transam/xlog.c:4944 access/transam/xlog.c:4951 #, 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:4901 +#: access/transam/xlog.c:4898 #, 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:4908 +#: access/transam/xlog.c:4905 #, 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:4915 +#: access/transam/xlog.c:4912 #, 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:4922 +#: access/transam/xlog.c:4919 #, 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:4929 +#: access/transam/xlog.c:4926 #, 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:4936 +#: access/transam/xlog.c:4933 #, 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:4945 +#: access/transam/xlog.c:4942 #, 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:4952 +#: access/transam/xlog.c:4949 #, 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:4961 +#: access/transam/xlog.c:4958 #, 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:4973 +#: access/transam/xlog.c:4970 #, 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:4977 +#: access/transam/xlog.c:4974 #, 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:5411 +#: access/transam/xlog.c:5408 #, 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:5419 +#: access/transam/xlog.c:5416 #, 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:5425 +#: access/transam/xlog.c:5422 #, 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" @@ -2203,255 +2203,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:5486 +#: access/transam/xlog.c:5483 #, 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:5551 +#: access/transam/xlog.c:5548 #, 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:5568 +#: access/transam/xlog.c:5565 #, 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:5569 +#: access/transam/xlog.c:5566 #, 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:5577 +#: access/transam/xlog.c:5574 #, c-format msgid "must specify restore_command when standby mode is not enabled" msgstr "doit spécifier une restore_command quand le mode standby n'est pas activé" -#: access/transam/xlog.c:5615 +#: access/transam/xlog.c:5612 #, 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:5737 +#: access/transam/xlog.c:5734 #, c-format msgid "archive recovery complete" msgstr "restauration de l'archive terminée" -#: access/transam/xlog.c:5803 access/transam/xlog.c:6079 +#: access/transam/xlog.c:5800 access/transam/xlog.c:6076 #, 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:5824 +#: access/transam/xlog.c:5821 #, 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:5914 +#: access/transam/xlog.c:5911 #, 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:5921 +#: access/transam/xlog.c:5918 #, 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:5974 +#: access/transam/xlog.c:5971 #, 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:5992 +#: access/transam/xlog.c:5989 #, 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:6059 +#: access/transam/xlog.c:6056 #, 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:6067 +#: access/transam/xlog.c:6064 #, 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:6112 +#: access/transam/xlog.c:6109 #, c-format msgid "pausing at the end of recovery" msgstr "pause à la fin de la restauration" -#: access/transam/xlog.c:6113 +#: access/transam/xlog.c:6110 #, c-format msgid "Execute pg_wal_replay_resume() to promote." msgstr "Exécuter pg_wal_replay_resume() pour promouvoir." -#: access/transam/xlog.c:6116 access/transam/xlog.c:6398 +#: access/transam/xlog.c:6113 access/transam/xlog.c:6395 #, c-format msgid "recovery has paused" msgstr "restauration en pause" -#: access/transam/xlog.c:6117 +#: access/transam/xlog.c:6114 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Exécuter pg_wal_replay_resume() pour continuer." -#: access/transam/xlog.c:6389 +#: access/transam/xlog.c:6386 #, 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:6390 access/transam/xlog.c:6417 access/transam/xlog.c:6447 +#: access/transam/xlog.c:6387 access/transam/xlog.c:6414 access/transam/xlog.c:6444 #, 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." -#: access/transam/xlog.c:6399 +#: access/transam/xlog.c:6396 #, 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:6400 +#: access/transam/xlog.c:6397 #, 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:6411 +#: access/transam/xlog.c:6408 #, 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:6421 +#: access/transam/xlog.c:6418 #, 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:6445 +#: access/transam/xlog.c:6442 #, c-format msgid "recovery aborted because of insufficient parameter settings" msgstr "restauration annulée à cause d'un paramétrage insuffisant" -#: access/transam/xlog.c:6451 +#: access/transam/xlog.c:6448 #, 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:6473 +#: access/transam/xlog.c:6470 #, 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:6474 +#: access/transam/xlog.c:6471 #, 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:6475 +#: access/transam/xlog.c:6472 #, 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:6544 +#: access/transam/xlog.c:6541 #, 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:6555 +#: access/transam/xlog.c:6552 #, 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:6561 +#: access/transam/xlog.c:6558 #, 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:6567 +#: access/transam/xlog.c:6564 #, 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:6573 +#: access/transam/xlog.c:6570 #, 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:6575 +#: access/transam/xlog.c:6572 #, 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:6581 +#: access/transam/xlog.c:6578 #, 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:6583 +#: access/transam/xlog.c:6580 #, 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:6589 +#: access/transam/xlog.c:6586 #, 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:6595 +#: access/transam/xlog.c:6592 #, 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:6652 +#: access/transam/xlog.c:6649 #, c-format msgid "entering standby mode" msgstr "entre en mode standby" -#: access/transam/xlog.c:6655 +#: access/transam/xlog.c:6652 #, 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:6659 +#: access/transam/xlog.c:6656 #, c-format msgid "starting point-in-time recovery to %s" msgstr "début de la restauration de l'archive à %s" -#: access/transam/xlog.c:6663 +#: access/transam/xlog.c:6660 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "début de la restauration PITR à « %s »" -#: access/transam/xlog.c:6667 +#: access/transam/xlog.c:6664 #, 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:6671 +#: access/transam/xlog.c:6668 #, 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:6674 +#: access/transam/xlog.c:6671 #, c-format msgid "starting archive recovery" msgstr "début de la restauration de l'archive" -#: access/transam/xlog.c:6748 +#: access/transam/xlog.c:6745 #, 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:6749 access/transam/xlog.c:6759 +#: access/transam/xlog.c:6746 access/transam/xlog.c:6756 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" @@ -2462,133 +2462,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:6758 +#: access/transam/xlog.c:6755 #, 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:6787 commands/tablespace.c:665 +#: access/transam/xlog.c:6784 commands/tablespace.c:665 #, 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:6819 access/transam/xlog.c:6825 +#: access/transam/xlog.c:6816 access/transam/xlog.c:6822 #, 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:6821 access/transam/xlog.c:12389 +#: access/transam/xlog.c:6818 access/transam/xlog.c:12386 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "Le fichier « %s » a été renommé en « %s »." -#: access/transam/xlog.c:6827 +#: access/transam/xlog.c:6824 #, 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:6878 +#: access/transam/xlog.c:6875 #, 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:6916 +#: access/transam/xlog.c:6913 #, 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:6918 +#: access/transam/xlog.c:6915 #, 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:6932 +#: access/transam/xlog.c:6929 #, 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:6962 +#: access/transam/xlog.c:6959 #, c-format msgid "invalid next transaction ID" msgstr "prochain ID de transaction invalide" -#: access/transam/xlog.c:7062 +#: access/transam/xlog.c:7059 #, 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:7073 +#: access/transam/xlog.c:7070 #, 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:7113 +#: access/transam/xlog.c:7110 #, 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:7117 +#: access/transam/xlog.c:7114 #, 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:7164 +#: access/transam/xlog.c:7161 #, 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:7165 +#: access/transam/xlog.c:7162 #, 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:7392 +#: access/transam/xlog.c:7389 #, c-format msgid "redo starts at %X/%X" msgstr "la ré-exécution commence à %X/%X" -#: access/transam/xlog.c:7617 +#: access/transam/xlog.c:7614 #, 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:7655 +#: access/transam/xlog.c:7652 #, 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:7661 +#: access/transam/xlog.c:7658 #, 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:7670 +#: access/transam/xlog.c:7667 #, c-format msgid "redo is not required" msgstr "la ré-exécution n'est pas nécessaire" -#: access/transam/xlog.c:7682 +#: access/transam/xlog.c:7679 #, 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:7766 access/transam/xlog.c:7770 +#: access/transam/xlog.c:7763 access/transam/xlog.c:7767 #, 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:7767 +#: access/transam/xlog.c:7764 #, 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:7771 +#: access/transam/xlog.c:7768 #, 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 "" @@ -2596,207 +2596,207 @@ 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:7774 +#: access/transam/xlog.c:7771 #, 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:7809 +#: access/transam/xlog.c:7806 #, c-format msgid "selected new timeline ID: %u" msgstr "identifiant d'un timeline nouvellement sélectionné : %u" -#: access/transam/xlog.c:8277 +#: access/transam/xlog.c:8274 #, c-format msgid "unexpected directory entry \"%s\" found in %s" msgstr "entrée « %s » du répertoire inattendu trouvé dans %s" -#: access/transam/xlog.c:8279 +#: access/transam/xlog.c:8276 #, c-format msgid "All directory entries in pg_tblspc/ should be symbolic links." msgstr "Toutes les entrées du répertoire pg_tblspc devraient être des liens symboliques." -#: access/transam/xlog.c:8280 +#: access/transam/xlog.c:8277 #, c-format msgid "Remove those directories, or set allow_in_place_tablespaces to ON transiently to let recovery complete." msgstr "Supprimer ces répertoires, ou configurer allow_in_place_tablespaces à ON pour que la restauration se termine." -#: access/transam/xlog.c:8364 +#: access/transam/xlog.c:8361 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "état de restauration cohérent atteint à %X/%X" -#: access/transam/xlog.c:8573 +#: access/transam/xlog.c:8570 #, 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:8577 +#: access/transam/xlog.c:8574 #, 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:8595 +#: access/transam/xlog.c:8592 #, c-format msgid "invalid primary checkpoint record" msgstr "enregistrement du point de vérification primaire invalide" -#: access/transam/xlog.c:8599 +#: access/transam/xlog.c:8596 #, c-format msgid "invalid checkpoint record" msgstr "enregistrement du point de vérification invalide" -#: access/transam/xlog.c:8610 +#: access/transam/xlog.c:8607 #, 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:8614 +#: access/transam/xlog.c:8611 #, 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:8627 +#: access/transam/xlog.c:8624 #, 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:8631 +#: access/transam/xlog.c:8628 #, 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:8642 +#: access/transam/xlog.c:8639 #, 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:8646 +#: access/transam/xlog.c:8643 #, c-format msgid "invalid length of checkpoint record" msgstr "longueur invalide de l'enregistrement du point de vérification" -#: access/transam/xlog.c:8827 +#: access/transam/xlog.c:8824 #, c-format msgid "shutting down" msgstr "arrêt en cours" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:8866 +#: access/transam/xlog.c:8863 #, c-format msgid "restartpoint starting:%s%s%s%s%s%s%s%s" msgstr "début du restartpoint :%s%s%s%s%s%s%s%s" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:8878 +#: access/transam/xlog.c:8875 #, c-format msgid "checkpoint starting:%s%s%s%s%s%s%s%s" msgstr "début du checkpoint :%s%s%s%s%s%s%s%s" -#: access/transam/xlog.c:8938 +#: access/transam/xlog.c:8935 #, 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 "restartpoint terminé : a écrit %d tampons (%.1f%%); %d fichiers WAL ajoutés, %d supprimés, %d recyclés ; écriture=%ld.%03d s, synchronisation=%ld.%03d s, total=%ld.%03d s; fichiers synchronisés=%d, plus long=%ld.%03d s, moyenne=%ld.%03d s; distance=%d kB, estimation=%d kB" -#: access/transam/xlog.c:8958 +#: access/transam/xlog.c:8955 #, 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 "checkpoint terminé : a écrit %d tampons (%.1f%%); %d fichiers WAL ajoutés, %d supprimés, %d recyclés ; écriture=%ld.%03d s, synchronisation=%ld.%03d s, total=%ld.%03d s; fichiers synchronisés=%d, plus long=%ld.%03d s, moyenne=%ld.%03d s; distance=%d kB, estimation=%d kB" -#: access/transam/xlog.c:9409 +#: access/transam/xlog.c:9406 #, 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:9942 +#: access/transam/xlog.c:9939 #, c-format msgid "recovery restart point at %X/%X" msgstr "la ré-exécution en restauration commence à %X/%X" -#: access/transam/xlog.c:9944 +#: access/transam/xlog.c:9941 #, 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:10190 +#: access/transam/xlog.c:10187 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "point de restauration « %s » créé à %X/%X" -#: access/transam/xlog.c:10335 +#: access/transam/xlog.c:10332 #, 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:10344 +#: access/transam/xlog.c:10341 #, 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:10360 +#: access/transam/xlog.c:10357 #, 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:10435 +#: access/transam/xlog.c:10432 #, 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:10492 access/transam/xlog.c:10548 access/transam/xlog.c:10578 +#: access/transam/xlog.c:10489 access/transam/xlog.c:10545 access/transam/xlog.c:10575 #, 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:10736 +#: access/transam/xlog.c:10733 #, c-format msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s" msgstr "ignore avec succès le contrecord manquant à %X/%X, surchargé à %s" -#: access/transam/xlog.c:10951 +#: access/transam/xlog.c:10948 #, 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:10957 +#: access/transam/xlog.c:10954 #, 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:11068 access/transam/xlog.c:11605 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:11065 access/transam/xlog.c:11602 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:11077 access/transam/xlog.c:11614 +#: access/transam/xlog.c:11074 access/transam/xlog.c:11611 #, 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:11078 access/transam/xlog.c:11615 access/transam/xlogfuncs.c:308 +#: access/transam/xlog.c:11075 access/transam/xlog.c:11612 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:11083 +#: access/transam/xlog.c:11080 #, c-format msgid "backup label too long (max %d bytes)" msgstr "label de sauvegarde trop long (%d octets maximum)" -#: access/transam/xlog.c:11120 access/transam/xlog.c:11404 access/transam/xlog.c:11442 +#: access/transam/xlog.c:11117 access/transam/xlog.c:11401 access/transam/xlog.c:11439 #, c-format msgid "a backup is already in progress" msgstr "une sauvegarde est déjà en cours" -#: access/transam/xlog.c:11121 +#: access/transam/xlog.c:11118 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "Exécutez pg_stop_backup() et tentez de nouveau." @@ -2806,157 +2806,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:11217 +#: access/transam/xlog.c:11214 #, 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:11219 access/transam/xlog.c:11810 +#: access/transam/xlog.c:11216 access/transam/xlog.c:11807 #, 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 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:11303 replication/basebackup.c:1433 utils/adt/misc.c:367 +#: access/transam/xlog.c:11300 replication/basebackup.c:1433 utils/adt/misc.c:367 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "la cible du lien symbolique « %s » est trop longue" -#: access/transam/xlog.c:11353 commands/tablespace.c:385 commands/tablespace.c:561 replication/basebackup.c:1448 utils/adt/misc.c:375 +#: access/transam/xlog.c:11350 commands/tablespace.c:385 commands/tablespace.c:561 replication/basebackup.c:1448 utils/adt/misc.c:375 #, 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:11405 access/transam/xlog.c:11443 +#: access/transam/xlog.c:11402 access/transam/xlog.c:11440 #, 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:11630 +#: access/transam/xlog.c:11627 #, c-format msgid "exclusive backup not in progress" msgstr "une sauvegarde exclusive n'est pas en cours" -#: access/transam/xlog.c:11657 +#: access/transam/xlog.c:11654 #, c-format msgid "a backup is not in progress" msgstr "aucune sauvegarde n'est en cours" -#: access/transam/xlog.c:11743 access/transam/xlog.c:11756 access/transam/xlog.c:12147 access/transam/xlog.c:12153 access/transam/xlog.c:12201 access/transam/xlog.c:12281 access/transam/xlog.c:12305 access/transam/xlogfuncs.c:733 +#: access/transam/xlog.c:11740 access/transam/xlog.c:11753 access/transam/xlog.c:12144 access/transam/xlog.c:12150 access/transam/xlog.c:12198 access/transam/xlog.c:12278 access/transam/xlog.c:12302 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:11760 replication/basebackup.c:1287 +#: access/transam/xlog.c:11757 replication/basebackup.c:1287 #, 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:11761 replication/basebackup.c:1288 +#: access/transam/xlog.c:11758 replication/basebackup.c:1288 #, 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:11808 +#: access/transam/xlog.c:11805 #, 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:11928 +#: access/transam/xlog.c:11925 #, 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:11940 +#: access/transam/xlog.c:11937 #, 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:11942 +#: access/transam/xlog.c:11939 #, 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:11949 +#: access/transam/xlog.c:11946 #, 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:11953 +#: access/transam/xlog.c:11950 #, 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:12008 +#: access/transam/xlog.c:12005 #, 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:12202 +#: access/transam/xlog.c:12199 #, 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:12330 +#: access/transam/xlog.c:12327 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "rejeu des WAL à %X/%X pour %s" -#: access/transam/xlog.c:12378 +#: access/transam/xlog.c:12375 #, 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:12379 +#: access/transam/xlog.c:12376 #, 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:12388 access/transam/xlog.c:12400 access/transam/xlog.c:12410 +#: access/transam/xlog.c:12385 access/transam/xlog.c:12397 access/transam/xlog.c:12407 #, c-format msgid "online backup mode canceled" msgstr "mode de sauvegarde en ligne annulé" -#: access/transam/xlog.c:12401 +#: access/transam/xlog.c:12398 #, 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:12411 +#: access/transam/xlog.c:12408 #, 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:12544 access/transam/xlogutils.c:967 +#: access/transam/xlog.c:12541 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:12550 access/transam/xlogutils.c:974 +#: access/transam/xlog.c:12547 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:13115 +#: access/transam/xlog.c:13112 #, 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:13210 +#: access/transam/xlog.c:13207 #, c-format msgid "received promote request" msgstr "a reçu une demande de promotion" -#: access/transam/xlog.c:13223 +#: access/transam/xlog.c:13220 #, c-format msgid "promote trigger file found: %s" msgstr "fichier trigger de promotion trouvé : %s" -#: access/transam/xlog.c:13231 +#: access/transam/xlog.c:13228 #, 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,12 +2989,12 @@ msgstr "n'a pas pu restaurer le fichier « %s » à partir de l'archive : %s" msgid "%s \"%s\": %s" msgstr "%s « %s »: %s" -#: access/transam/xlogarchive.c:479 access/transam/xlogarchive.c:543 +#: access/transam/xlogarchive.c:479 access/transam/xlogarchive.c:557 #, 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:487 access/transam/xlogarchive.c:551 +#: access/transam/xlogarchive.c:487 access/transam/xlogarchive.c:565 #, 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" @@ -3014,13 +3014,13 @@ 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:1966 commands/extension.c:2074 commands/extension.c:2359 commands/prepare.c:713 executor/execExpr.c:2510 executor/execSRF.c:738 executor/functions.c:1074 foreign/foreign.c:530 libpq/hba.c:2722 replication/logical/launcher.c:937 replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 replication/slotfuncs.c:255 replication/walsender.c:3328 storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:507 utils/adt/genfile.c:590 utils/adt/jsonfuncs.c:1944 utils/adt/jsonfuncs.c:2056 utils/adt/jsonfuncs.c:2244 utils/adt/jsonfuncs.c:2353 -#: utils/adt/jsonfuncs.c:3814 utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:219 utils/adt/pgstatfuncs.c:477 utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 utils/adt/varlena.c:4821 utils/fmgr/funcapi.c:74 utils/misc/guc.c:10049 utils/mmgr/portalmem.c:1145 +#: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1311 commands/event_trigger.c:1869 commands/extension.c:1966 commands/extension.c:2074 commands/extension.c:2359 commands/prepare.c:713 executor/execExpr.c:2518 executor/execSRF.c:738 executor/functions.c:1074 foreign/foreign.c:530 libpq/hba.c:2726 replication/logical/launcher.c:937 replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 replication/slotfuncs.c:255 replication/walsender.c:3328 storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:507 utils/adt/genfile.c:590 utils/adt/jsonfuncs.c:1944 utils/adt/jsonfuncs.c:2056 utils/adt/jsonfuncs.c:2244 utils/adt/jsonfuncs.c:2353 +#: utils/adt/jsonfuncs.c:3814 utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:219 utils/adt/pgstatfuncs.c:477 utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 utils/adt/varlena.c:4821 utils/fmgr/funcapi.c:74 utils/misc/guc.c:10088 utils/mmgr/portalmem.c:1145 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "la fonction renvoyant un ensemble a été appelée dans un contexte qui n'accepte pas un ensemble" -#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1315 commands/event_trigger.c:1873 commands/extension.c:1970 commands/extension.c:2078 commands/extension.c:2363 commands/prepare.c:717 foreign/foreign.c:535 libpq/hba.c:2726 replication/logical/launcher.c:941 replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 replication/slotfuncs.c:259 replication/walsender.c:3332 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:223 utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4825 utils/misc/guc.c:10053 +#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1315 commands/event_trigger.c:1873 commands/extension.c:1970 commands/extension.c:2078 commands/extension.c:2363 commands/prepare.c:717 foreign/foreign.c:535 libpq/hba.c:2730 replication/logical/launcher.c:941 replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 replication/slotfuncs.c:259 replication/walsender.c:3332 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:223 utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4825 utils/misc/guc.c:10092 #: utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1149 #, c-format msgid "materialize mode required, but it is not allowed in this context" @@ -3227,12 +3227,12 @@ 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:847 tcop/postgres.c:3969 +#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3974 #, c-format msgid "--%s requires a value" msgstr "--%s requiert une valeur" -#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3974 +#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3979 #, c-format msgid "-c %s requires a value" msgstr "-c %s requiert une valeur" @@ -3380,7 +3380,7 @@ msgstr "le « Large Object » %u n'existe pas" #: catalog/aclchk.c:927 catalog/aclchk.c:936 commands/collationcmds.c:119 commands/copy.c:365 commands/copy.c:385 commands/copy.c:395 commands/copy.c:404 commands/copy.c:413 commands/copy.c:423 commands/copy.c:432 commands/copy.c:441 commands/copy.c:459 commands/copy.c:475 commands/copy.c:495 commands/copy.c:512 commands/dbcommands.c:158 commands/dbcommands.c:167 commands/dbcommands.c:176 commands/dbcommands.c:185 commands/dbcommands.c:194 commands/dbcommands.c:203 commands/dbcommands.c:212 commands/dbcommands.c:221 commands/dbcommands.c:230 commands/dbcommands.c:239 commands/dbcommands.c:261 commands/dbcommands.c:1541 commands/dbcommands.c:1550 commands/dbcommands.c:1559 #: commands/dbcommands.c:1568 commands/extension.c:1757 commands/extension.c:1767 commands/extension.c:1777 commands/extension.c:3074 commands/foreigncmds.c:539 commands/foreigncmds.c:548 commands/functioncmds.c:606 commands/functioncmds.c:772 commands/functioncmds.c:781 commands/functioncmds.c:790 commands/functioncmds.c:799 commands/functioncmds.c:2097 commands/functioncmds.c:2105 commands/publicationcmds.c:87 commands/publicationcmds.c:130 commands/sequence.c:1274 commands/sequence.c:1284 commands/sequence.c:1294 commands/sequence.c:1304 commands/sequence.c:1314 commands/sequence.c:1324 commands/sequence.c:1334 commands/sequence.c:1344 commands/sequence.c:1354 #: commands/subscriptioncmds.c:124 commands/subscriptioncmds.c:134 commands/subscriptioncmds.c:144 commands/subscriptioncmds.c:154 commands/subscriptioncmds.c:170 commands/subscriptioncmds.c:181 commands/subscriptioncmds.c:195 commands/subscriptioncmds.c:205 commands/subscriptioncmds.c:215 commands/tablecmds.c:7684 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:402 replication/pgoutput/pgoutput.c:190 replication/pgoutput/pgoutput.c:211 replication/pgoutput/pgoutput.c:225 replication/pgoutput/pgoutput.c:235 replication/pgoutput/pgoutput.c:245 replication/walsender.c:883 replication/walsender.c:894 replication/walsender.c:904 +#: 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:402 replication/pgoutput/pgoutput.c:199 replication/pgoutput/pgoutput.c:220 replication/pgoutput/pgoutput.c:234 replication/pgoutput/pgoutput.c:244 replication/pgoutput/pgoutput.c:254 replication/walsender.c:883 replication/walsender.c:894 replication/walsender.c:904 #, c-format msgid "conflicting or redundant options" msgstr "options en conflit ou redondantes" @@ -3985,7 +3985,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:1204 catalog/dependency.c:1211 catalog/dependency.c:1223 commands/tablecmds.c:1301 commands/tablecmds.c:14021 commands/tablespace.c:464 commands/user.c:1095 commands/view.c:506 libpq/auth.c:338 replication/syncrep.c:1043 storage/lmgr/deadlock.c:1151 storage/lmgr/proc.c:1447 utils/misc/guc.c:7140 utils/misc/guc.c:7176 utils/misc/guc.c:7246 utils/misc/guc.c:11457 utils/misc/guc.c:11491 utils/misc/guc.c:11525 utils/misc/guc.c:11568 utils/misc/guc.c:11610 +#: catalog/dependency.c:1204 catalog/dependency.c:1211 catalog/dependency.c:1223 commands/tablecmds.c:1301 commands/tablecmds.c:14021 commands/tablespace.c:464 commands/user.c:1095 commands/view.c:506 libpq/auth.c:338 replication/syncrep.c:1043 storage/lmgr/deadlock.c:1151 storage/lmgr/proc.c:1447 utils/misc/guc.c:7140 utils/misc/guc.c:7176 utils/misc/guc.c:7246 utils/misc/guc.c:11490 utils/misc/guc.c:11524 utils/misc/guc.c:11558 utils/misc/guc.c:11601 utils/misc/guc.c:11643 #, c-format msgid "%s" msgstr "%s" @@ -4145,12 +4145,12 @@ msgstr "Ceci ferait que la colonne générée dépendrait de sa propre valeur." msgid "generation expression is not immutable" msgstr "l'expression de génération n'est pas immuable" -#: catalog/heap.c:3142 rewrite/rewriteHandler.c:1291 +#: catalog/heap.c:3142 rewrite/rewriteHandler.c:1285 #, 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:3147 commands/prepare.c:368 parser/analyze.c:2695 parser/parse_target.c:594 parser/parse_target.c:891 parser/parse_target.c:901 rewrite/rewriteHandler.c:1296 +#: catalog/heap.c:3147 commands/prepare.c:368 parser/analyze.c:2695 parser/parse_target.c:594 parser/parse_target.c:891 parser/parse_target.c:901 rewrite/rewriteHandler.c:1290 #, 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." @@ -4249,12 +4249,12 @@ msgstr "DROP INDEX CONCURRENTLY doit être la première action dans une transact msgid "cannot reindex temporary tables of other sessions" msgstr "ne peut pas ré-indexer les tables temporaires des autres sessions" -#: catalog/index.c:3664 commands/indexcmds.c:3548 +#: catalog/index.c:3664 commands/indexcmds.c:3555 #, 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:3680 commands/indexcmds.c:3428 commands/indexcmds.c:3572 commands/tablecmds.c:3282 +#: catalog/index.c:3680 commands/indexcmds.c:3435 commands/indexcmds.c:3579 commands/tablecmds.c:3282 #, c-format msgid "cannot move system relation \"%s\"" msgstr "ne peut pas déplacer la colonne système « %s »" @@ -4269,7 +4269,7 @@ msgstr "l'index « %s » a été réindexée" 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:259 catalog/namespace.c:463 catalog/namespace.c:555 commands/trigger.c:5253 +#: catalog/namespace.c:259 catalog/namespace.c:463 catalog/namespace.c:555 commands/trigger.c:5251 #, 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 »" @@ -4399,7 +4399,7 @@ 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:4338 commands/tablespace.c:1211 commands/variable.c:64 tcop/postgres.c:3624 utils/misc/guc.c:11642 utils/misc/guc.c:11720 +#: catalog/namespace.c:4338 commands/tablespace.c:1211 commands/variable.c:64 tcop/postgres.c:3624 utils/misc/guc.c:11675 utils/misc/guc.c:11753 #, c-format msgid "List syntax is invalid." msgstr "La syntaxe de la liste est invalide." @@ -4545,74 +4545,74 @@ msgid "unrecognized object type \"%s\"" msgstr "type d'objet non reconnu « %s »" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2883 +#: catalog/objectaddress.c:2908 #, c-format msgid "column %s of %s" msgstr "colonne %s de %s" -#: catalog/objectaddress.c:2898 +#: catalog/objectaddress.c:2923 #, c-format msgid "function %s" msgstr "fonction %s" -#: catalog/objectaddress.c:2911 +#: catalog/objectaddress.c:2936 #, c-format msgid "type %s" msgstr "type %s" -#: catalog/objectaddress.c:2948 +#: catalog/objectaddress.c:2973 #, c-format msgid "cast from %s to %s" msgstr "conversion de %s en %s" -#: catalog/objectaddress.c:2981 +#: catalog/objectaddress.c:3006 #, c-format msgid "collation %s" msgstr "collationnement %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3012 +#: catalog/objectaddress.c:3037 #, c-format msgid "constraint %s on %s" msgstr "contrainte %s sur %s" -#: catalog/objectaddress.c:3018 +#: catalog/objectaddress.c:3043 #, c-format msgid "constraint %s" msgstr "contrainte %s" -#: catalog/objectaddress.c:3050 +#: catalog/objectaddress.c:3075 #, c-format msgid "conversion %s" msgstr "conversion %s" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:3096 +#: catalog/objectaddress.c:3121 #, c-format msgid "default value for %s" msgstr "valeur par défaut pour %s" -#: catalog/objectaddress.c:3110 +#: catalog/objectaddress.c:3135 #, c-format msgid "language %s" msgstr "langage %s" -#: catalog/objectaddress.c:3118 +#: catalog/objectaddress.c:3143 #, c-format msgid "large object %u" msgstr "« Large Object » %u" -#: catalog/objectaddress.c:3131 +#: catalog/objectaddress.c:3156 #, c-format msgid "operator %s" msgstr "opérateur %s" -#: catalog/objectaddress.c:3168 +#: catalog/objectaddress.c:3193 #, 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:3196 +#: catalog/objectaddress.c:3221 #, c-format msgid "access method %s" msgstr "méthode d'accès %s" @@ -4621,7 +4621,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:3245 +#: catalog/objectaddress.c:3276 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "opérateur %d (%s, %s) de %s : %s" @@ -4630,221 +4630,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:3302 +#: catalog/objectaddress.c:3341 #, 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:3354 +#: catalog/objectaddress.c:3395 #, c-format msgid "rule %s on %s" msgstr "règle %s sur %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3400 +#: catalog/objectaddress.c:3441 #, c-format msgid "trigger %s on %s" msgstr "trigger %s sur %s" -#: catalog/objectaddress.c:3420 +#: catalog/objectaddress.c:3461 #, c-format msgid "schema %s" msgstr "schéma %s" -#: catalog/objectaddress.c:3448 +#: catalog/objectaddress.c:3489 #, c-format msgid "statistics object %s" msgstr "objet statistique %s" -#: catalog/objectaddress.c:3479 +#: catalog/objectaddress.c:3520 #, c-format msgid "text search parser %s" msgstr "analyseur %s de la recherche plein texte" -#: catalog/objectaddress.c:3510 +#: catalog/objectaddress.c:3551 #, c-format msgid "text search dictionary %s" msgstr "dictionnaire %s de la recherche plein texte" -#: catalog/objectaddress.c:3541 +#: catalog/objectaddress.c:3582 #, c-format msgid "text search template %s" msgstr "modèle %s de la recherche plein texte" -#: catalog/objectaddress.c:3572 +#: catalog/objectaddress.c:3613 #, c-format msgid "text search configuration %s" msgstr "configuration %s de recherche plein texte" -#: catalog/objectaddress.c:3585 +#: catalog/objectaddress.c:3626 #, c-format msgid "role %s" msgstr "rôle %s" -#: catalog/objectaddress.c:3601 +#: catalog/objectaddress.c:3642 #, c-format msgid "database %s" msgstr "base de données %s" -#: catalog/objectaddress.c:3617 +#: catalog/objectaddress.c:3658 #, c-format msgid "tablespace %s" msgstr "tablespace %s" -#: catalog/objectaddress.c:3628 +#: catalog/objectaddress.c:3669 #, c-format msgid "foreign-data wrapper %s" msgstr "wrapper de données distantes %s" -#: catalog/objectaddress.c:3638 +#: catalog/objectaddress.c:3679 #, c-format msgid "server %s" msgstr "serveur %s" -#: catalog/objectaddress.c:3671 +#: catalog/objectaddress.c:3712 #, c-format msgid "user mapping for %s on server %s" msgstr "correspondance utilisateur pour %s sur le serveur %s" -#: catalog/objectaddress.c:3723 +#: catalog/objectaddress.c:3764 #, 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:3727 +#: catalog/objectaddress.c:3768 #, 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:3733 +#: catalog/objectaddress.c:3774 #, 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:3737 +#: catalog/objectaddress.c:3778 #, 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:3743 +#: catalog/objectaddress.c:3784 #, 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:3747 +#: catalog/objectaddress.c:3788 #, 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:3753 +#: catalog/objectaddress.c:3794 #, 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:3757 +#: catalog/objectaddress.c:3798 #, 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:3763 +#: catalog/objectaddress.c:3804 #, 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:3770 +#: catalog/objectaddress.c:3811 #, 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:3774 +#: catalog/objectaddress.c:3815 #, c-format msgid "default privileges belonging to role %s" msgstr "droits par défaut appartenant au rôle %s" -#: catalog/objectaddress.c:3796 +#: catalog/objectaddress.c:3837 #, c-format msgid "extension %s" msgstr "extension %s" -#: catalog/objectaddress.c:3813 +#: catalog/objectaddress.c:3854 #, c-format msgid "event trigger %s" msgstr "trigger sur événement %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3857 +#: catalog/objectaddress.c:3898 #, c-format msgid "policy %s on %s" msgstr "politique %s sur %s" -#: catalog/objectaddress.c:3871 +#: catalog/objectaddress.c:3912 #, c-format msgid "publication %s" msgstr "publication %s" #. translator: first %s is, e.g., "table %s" -#: catalog/objectaddress.c:3899 +#: catalog/objectaddress.c:3940 #, c-format msgid "publication of %s in publication %s" msgstr "publication de %s dans la publication %s" -#: catalog/objectaddress.c:3912 +#: catalog/objectaddress.c:3953 #, c-format msgid "subscription %s" msgstr "souscription %s" -#: catalog/objectaddress.c:3933 +#: catalog/objectaddress.c:3974 #, c-format msgid "transform for %s language %s" msgstr "transformation pour %s langage %s" -#: catalog/objectaddress.c:4004 +#: catalog/objectaddress.c:4045 #, c-format msgid "table %s" msgstr "table %s" -#: catalog/objectaddress.c:4009 +#: catalog/objectaddress.c:4050 #, c-format msgid "index %s" msgstr "index %s" -#: catalog/objectaddress.c:4013 +#: catalog/objectaddress.c:4054 #, c-format msgid "sequence %s" msgstr "séquence %s" -#: catalog/objectaddress.c:4017 +#: catalog/objectaddress.c:4058 #, c-format msgid "toast table %s" msgstr "table TOAST %s" -#: catalog/objectaddress.c:4021 +#: catalog/objectaddress.c:4062 #, c-format msgid "view %s" msgstr "vue %s" -#: catalog/objectaddress.c:4025 +#: catalog/objectaddress.c:4066 #, c-format msgid "materialized view %s" msgstr "vue matérialisée %s" -#: catalog/objectaddress.c:4029 +#: catalog/objectaddress.c:4070 #, c-format msgid "composite type %s" msgstr "type composite %s" -#: catalog/objectaddress.c:4033 +#: catalog/objectaddress.c:4074 #, c-format msgid "foreign table %s" msgstr "table distante %s" -#: catalog/objectaddress.c:4038 +#: catalog/objectaddress.c:4079 #, c-format msgid "relation %s" msgstr "relation %s" -#: catalog/objectaddress.c:4079 +#: catalog/objectaddress.c:4120 #, c-format msgid "operator family %s for access method %s" msgstr "famille d'opérateur %s pour la méthode d'accès %s" @@ -5452,12 +5452,12 @@ msgstr "Échec lors de la création d'un type multirange pour le type « %s »." msgid "You can manually specify a multirange type name using the \"multirange_type_name\" attribute." msgstr "Vous pouvez spécifier manuellement un nom de type multirange en utilisant l'attribut « multirange_type_name »" -#: catalog/storage.c:495 storage/buffer/bufmgr.c:1039 +#: catalog/storage.c:523 storage/buffer/bufmgr.c:1039 #, 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:112 commands/indexcmds.c:692 commands/tablecmds.c:6142 commands/tablecmds.c:16694 +#: catalog/toasting.c:112 commands/indexcmds.c:699 commands/tablecmds.c:6142 commands/tablecmds.c:16694 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "« %s » n'est ni une table ni une vue matérialisée" @@ -5552,72 +5552,72 @@ msgstr "le paramètre « parallel » doit être SAFE, RESTRICTED ou UNSAFE" 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:84 commands/event_trigger.c:174 +#: commands/alter.c:85 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:87 commands/foreigncmds.c:597 +#: commands/alter.c:88 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:90 commands/foreigncmds.c:888 +#: commands/alter.c:91 commands/foreigncmds.c:888 #, c-format msgid "server \"%s\" already exists" msgstr "le serveur « %s » existe déjà" -#: commands/alter.c:93 commands/proclang.c:133 +#: commands/alter.c:94 commands/proclang.c:133 #, c-format msgid "language \"%s\" already exists" msgstr "le langage « %s » existe déjà" -#: commands/alter.c:96 commands/publicationcmds.c:180 +#: commands/alter.c:97 commands/publicationcmds.c:180 #, c-format msgid "publication \"%s\" already exists" msgstr "la publication « %s » existe déjà" -#: commands/alter.c:99 commands/subscriptioncmds.c:400 +#: commands/alter.c:100 commands/subscriptioncmds.c:400 #, c-format msgid "subscription \"%s\" already exists" msgstr "la souscription « %s » existe déjà" -#: commands/alter.c:122 +#: commands/alter.c:123 #, 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:126 +#: commands/alter.c:127 #, 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:130 +#: commands/alter.c:131 #, 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:134 +#: commands/alter.c:135 #, 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:138 +#: commands/alter.c:139 #, 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:142 +#: commands/alter.c:143 #, 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:215 +#: commands/alter.c:216 #, c-format msgid "must be superuser to rename %s" msgstr "doit être super-utilisateur pour renommer « %s »" -#: commands/alter.c:744 +#: commands/alter.c:745 #, c-format msgid "must be superuser to set schema of %s" msgstr "doit être super-utilisateur pour configurer le schéma de %s" @@ -5637,7 +5637,7 @@ msgstr "Doit être super-utilisateur pour créer une méthode d'accès." msgid "access method \"%s\" already exists" msgstr "la méthode d'accès « %s » existe déjà" -#: commands/amcmds.c:154 commands/indexcmds.c:213 commands/indexcmds.c:843 commands/opclasscmds.c:375 commands/opclasscmds.c:833 +#: commands/amcmds.c:154 commands/indexcmds.c:214 commands/indexcmds.c:850 commands/opclasscmds.c:376 commands/opclasscmds.c:834 #, c-format msgid "access method \"%s\" does not exist" msgstr "la méthode d'accès « %s » n'existe pas" @@ -5906,7 +5906,7 @@ msgstr "n'a pas pu exécuter la commande « %s » : %m" 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:855 commands/dbcommands.c:1072 commands/dbcommands.c:1187 commands/dbcommands.c:1377 commands/dbcommands.c:1627 commands/dbcommands.c:1751 commands/dbcommands.c:2194 utils/init/postinit.c:887 utils/init/postinit.c:993 utils/init/postinit.c:1019 +#: commands/comment.c:61 commands/dbcommands.c:855 commands/dbcommands.c:1072 commands/dbcommands.c:1187 commands/dbcommands.c:1377 commands/dbcommands.c:1627 commands/dbcommands.c:1751 commands/dbcommands.c:2194 utils/init/postinit.c:890 utils/init/postinit.c:996 utils/init/postinit.c:1022 #, c-format msgid "database \"%s\" does not exist" msgstr "la base de données « %s » n'existe pas" @@ -6116,7 +6116,7 @@ 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:749 commands/indexcmds.c:1835 commands/statscmds.c:245 commands/tablecmds.c:2344 commands/tablecmds.c:3000 commands/tablecmds.c:3508 parser/parse_relation.c:3651 parser/parse_relation.c:3671 utils/adt/tsvector_op.c:2683 +#: commands/copy.c:749 commands/indexcmds.c:1842 commands/statscmds.c:245 commands/tablecmds.c:2344 commands/tablecmds.c:3000 commands/tablecmds.c:3508 parser/parse_relation.c:3651 parser/parse_relation.c:3671 utils/adt/tsvector_op.c:2683 #, c-format msgid "column \"%s\" does not exist" msgstr "la colonne « %s » n'existe pas" @@ -6530,7 +6530,7 @@ msgstr "la base de données modèle « %s » n'existe pas" msgid "cannot use invalid database \"%s\" as template" msgstr "ne peut pas utiliser la base de données invalide « %s » comme modèle" -#: commands/dbcommands.c:368 commands/dbcommands.c:1638 utils/init/postinit.c:1002 +#: commands/dbcommands.c:368 commands/dbcommands.c:1638 utils/init/postinit.c:1005 #, c-format msgid "Use DROP DATABASE to drop invalid databases." msgstr "Utilisez DROP DATABASE pour supprimer des bases invalides." @@ -7782,297 +7782,297 @@ 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:634 +#: commands/indexcmds.c:641 #, c-format msgid "must specify at least one column" msgstr "doit spécifier au moins une colonne" -#: commands/indexcmds.c:638 +#: commands/indexcmds.c:645 #, 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:686 +#: commands/indexcmds.c:693 #, 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:717 +#: commands/indexcmds.c:724 #, 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:722 +#: commands/indexcmds.c:729 #, 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:732 +#: commands/indexcmds.c:739 #, 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:770 commands/tablecmds.c:755 commands/tablespace.c:1179 +#: commands/indexcmds.c:777 commands/tablecmds.c:755 commands/tablespace.c:1179 #, 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:802 commands/tablecmds.c:786 commands/tablecmds.c:3289 +#: commands/indexcmds.c:809 commands/tablecmds.c:786 commands/tablecmds.c:3289 #, 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:835 +#: commands/indexcmds.c:842 #, 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:856 +#: commands/indexcmds.c:863 #, 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:861 +#: commands/indexcmds.c:868 #, 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:866 +#: commands/indexcmds.c:873 #, 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:871 +#: commands/indexcmds.c:878 #, 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:995 +#: commands/indexcmds.c:1002 #, 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:1005 +#: commands/indexcmds.c:1012 #, c-format msgid "unsupported %s constraint with partition key definition" msgstr "contrainte %s non supportée avec la définition de clé de partitionnement" -#: commands/indexcmds.c:1007 +#: commands/indexcmds.c:1014 #, 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:1049 +#: commands/indexcmds.c:1056 #, c-format 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:1050 +#: commands/indexcmds.c:1057 #, 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:1069 commands/indexcmds.c:1088 +#: commands/indexcmds.c:1076 commands/indexcmds.c:1095 #, 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:1288 tcop/utility.c:1510 +#: commands/indexcmds.c:1295 tcop/utility.c:1510 #, 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:1290 tcop/utility.c:1512 +#: commands/indexcmds.c:1297 tcop/utility.c:1512 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." msgstr "La table « %s » contient des partitions qui ne sont pas des tables distantes." -#: commands/indexcmds.c:1752 +#: commands/indexcmds.c:1759 #, 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:1830 parser/parse_utilcmd.c:2533 parser/parse_utilcmd.c:2668 +#: commands/indexcmds.c:1837 parser/parse_utilcmd.c:2533 parser/parse_utilcmd.c:2668 #, 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:1854 parser/parse_utilcmd.c:1821 +#: commands/indexcmds.c:1861 parser/parse_utilcmd.c:1821 #, 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:1895 +#: commands/indexcmds.c:1902 #, 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:1910 +#: commands/indexcmds.c:1917 #, c-format msgid "including column does not support a collation" msgstr "une colonne incluse ne supporte pas de collationnement" -#: commands/indexcmds.c:1914 +#: commands/indexcmds.c:1921 #, 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:1918 +#: commands/indexcmds.c:1925 #, 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:1922 +#: commands/indexcmds.c:1929 #, 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:1963 +#: commands/indexcmds.c:1970 #, 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:1971 commands/tablecmds.c:17162 commands/typecmds.c:810 parser/parse_expr.c:2693 parser/parse_type.c:566 parser/parse_utilcmd.c:3783 utils/adt/misc.c:621 +#: commands/indexcmds.c:1978 commands/tablecmds.c:17162 commands/typecmds.c:810 parser/parse_expr.c:2693 parser/parse_type.c:566 parser/parse_utilcmd.c:3783 utils/adt/misc.c:621 #, 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:2036 +#: commands/indexcmds.c:2043 #, c-format msgid "operator %s is not commutative" msgstr "l'opérateur %s n'est pas commutatif" -#: commands/indexcmds.c:2038 +#: commands/indexcmds.c:2045 #, 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:2064 +#: commands/indexcmds.c:2071 #, 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:2067 +#: commands/indexcmds.c:2074 #, 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:2102 +#: commands/indexcmds.c:2109 #, 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:2107 +#: commands/indexcmds.c:2114 #, 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:2153 commands/tablecmds.c:17187 commands/tablecmds.c:17193 commands/typecmds.c:2317 +#: commands/indexcmds.c:2160 commands/tablecmds.c:17187 commands/tablecmds.c:17193 commands/typecmds.c:2317 #, 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:2155 +#: commands/indexcmds.c:2162 #, 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:2184 commands/indexcmds.c:2192 commands/opclasscmds.c:205 +#: commands/indexcmds.c:2191 commands/indexcmds.c:2199 commands/opclasscmds.c:206 #, 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:2206 commands/typecmds.c:2305 +#: commands/indexcmds.c:2213 commands/typecmds.c:2305 #, 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:2296 +#: commands/indexcmds.c:2303 #, 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:2624 +#: commands/indexcmds.c:2631 #, c-format msgid "unrecognized REINDEX option \"%s\"" msgstr "option de REINDEX « %s » non reconnue" -#: commands/indexcmds.c:2848 +#: commands/indexcmds.c:2855 #, 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:2862 +#: commands/indexcmds.c:2869 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "la table « %s » n'a pas d'index à réindexer" -#: commands/indexcmds.c:2902 commands/indexcmds.c:3409 commands/indexcmds.c:3537 +#: commands/indexcmds.c:2909 commands/indexcmds.c:3416 commands/indexcmds.c:3544 #, 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:2925 +#: commands/indexcmds.c:2932 #, 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:3013 +#: commands/indexcmds.c:3020 #, 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:3046 +#: commands/indexcmds.c:3053 #, 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:3093 +#: commands/indexcmds.c:3100 #, 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:3096 +#: commands/indexcmds.c:3103 #, c-format msgid "while reindexing partitioned index \"%s.%s\"" msgstr "lors de la réindexation de l'index partitionné « %s.%s »" -#: commands/indexcmds.c:3289 commands/indexcmds.c:4145 +#: commands/indexcmds.c:3296 commands/indexcmds.c:4152 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "la table « %s.%s » a été réindexée" -#: commands/indexcmds.c:3441 commands/indexcmds.c:3493 +#: commands/indexcmds.c:3448 commands/indexcmds.c:3500 #, 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:3447 +#: commands/indexcmds.c:3454 #, 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:3602 +#: commands/indexcmds.c:3609 #, 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:3623 +#: commands/indexcmds.c:3630 #, c-format 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:4126 commands/indexcmds.c:4138 +#: commands/indexcmds.c:4133 commands/indexcmds.c:4145 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "l'index « %s.%s » a été réindexé" @@ -8112,228 +8112,228 @@ msgstr "les nouvelles données pour la vue matérialisée « %s » contiennent d msgid "Row: %s" msgstr "Ligne : %s" -#: commands/opclasscmds.c:124 +#: commands/opclasscmds.c:125 #, 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:267 +#: commands/opclasscmds.c:268 #, 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:416 +#: commands/opclasscmds.c:417 #, 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:493 commands/opclasscmds.c:910 commands/opclasscmds.c:1056 +#: commands/opclasscmds.c:494 commands/opclasscmds.c:911 commands/opclasscmds.c:1057 #, 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:538 commands/opclasscmds.c:960 commands/opclasscmds.c:1072 +#: commands/opclasscmds.c:539 commands/opclasscmds.c:961 commands/opclasscmds.c:1073 #, 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" -#: commands/opclasscmds.c:567 +#: commands/opclasscmds.c:568 #, c-format msgid "storage type specified more than once" msgstr "type de stockage spécifié plus d'une fois" -#: commands/opclasscmds.c:594 +#: commands/opclasscmds.c:595 #, c-format msgid "storage type cannot be different from data type for access method \"%s\"" msgstr "" "le type de stockage ne peut pas être différent du type de données pour la\n" "méthode d'accès « %s »" -#: commands/opclasscmds.c:610 +#: commands/opclasscmds.c:611 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists" msgstr "la classe d'opérateur « %s » existe déjà pour la méthode d'accès « %s »" -#: commands/opclasscmds.c:638 +#: commands/opclasscmds.c:639 #, c-format msgid "could not make operator class \"%s\" be default for type %s" msgstr "n'a pas pu rendre la classe d'opérateur « %s » par défaut pour le type %s" -#: commands/opclasscmds.c:641 +#: commands/opclasscmds.c:642 #, c-format 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:801 +#: commands/opclasscmds.c:802 #, 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:861 +#: commands/opclasscmds.c:862 #, 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:919 +#: commands/opclasscmds.c:920 #, 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:994 +#: commands/opclasscmds.c:995 #, 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:1128 +#: commands/opclasscmds.c:1129 #, 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:1154 +#: commands/opclasscmds.c:1155 #, c-format msgid "index operators must be binary" msgstr "les opérateurs d'index doivent être binaires" -#: commands/opclasscmds.c:1173 +#: commands/opclasscmds.c:1174 #, 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:1184 +#: commands/opclasscmds.c:1185 #, 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:1224 +#: commands/opclasscmds.c:1225 #, 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:1231 +#: commands/opclasscmds.c:1232 #, 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:1239 +#: commands/opclasscmds.c:1240 #, c-format msgid "invalid operator class options parsing function" msgstr "fonction d'analyse des options de classe d'opérateur invalide" -#: commands/opclasscmds.c:1240 +#: commands/opclasscmds.c:1241 #, 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:1259 +#: commands/opclasscmds.c:1260 #, c-format msgid "btree comparison functions must have two arguments" msgstr "les fonctions de comparaison btree doivent avoir deux arguments" -#: commands/opclasscmds.c:1263 +#: commands/opclasscmds.c:1264 #, c-format msgid "btree comparison functions must return integer" msgstr "les fonctions de comparaison btree doivent renvoyer un entier" -#: commands/opclasscmds.c:1280 +#: commands/opclasscmds.c:1281 #, 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:1284 +#: commands/opclasscmds.c:1285 #, c-format msgid "btree sort support functions must return void" msgstr "les fonctions de support de tri btree doivent renvoyer void" -#: commands/opclasscmds.c:1295 +#: commands/opclasscmds.c:1296 #, c-format msgid "btree in_range functions must have five arguments" msgstr "les fonctions in_range btree doivent avoir cinq arguments" -#: commands/opclasscmds.c:1299 +#: commands/opclasscmds.c:1300 #, c-format msgid "btree in_range functions must return boolean" msgstr "les fonctions in_range btree doivent retourner un booléen" -#: commands/opclasscmds.c:1315 +#: commands/opclasscmds.c:1316 #, 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:1319 +#: commands/opclasscmds.c:1320 #, 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:1332 +#: commands/opclasscmds.c:1333 #, 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:1342 +#: commands/opclasscmds.c:1343 #, c-format msgid "hash function 1 must have one argument" msgstr "la fonction de hachage 1 doit avoir un argument" -#: commands/opclasscmds.c:1346 +#: commands/opclasscmds.c:1347 #, c-format msgid "hash function 1 must return integer" msgstr "la fonction de hachage 1 doit retourner un integer" -#: commands/opclasscmds.c:1353 +#: commands/opclasscmds.c:1354 #, c-format msgid "hash function 2 must have two arguments" msgstr "la fonction de hachage 1 doit avoir deux arguments" -#: commands/opclasscmds.c:1357 +#: commands/opclasscmds.c:1358 #, c-format msgid "hash function 2 must return bigint" msgstr "la fonction de hachage 2 doit retourner un bigint" -#: commands/opclasscmds.c:1382 +#: commands/opclasscmds.c:1383 #, 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:1407 +#: commands/opclasscmds.c:1408 #, 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:1414 +#: commands/opclasscmds.c:1415 #, 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:1460 +#: commands/opclasscmds.c:1461 #, 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:1566 +#: commands/opclasscmds.c:1590 #, 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:1647 +#: commands/opclasscmds.c:1735 #, 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:1687 +#: commands/opclasscmds.c:1775 #, 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:1718 +#: commands/opclasscmds.c:1806 #, 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:1741 +#: commands/opclasscmds.c:1829 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "" @@ -9137,7 +9137,7 @@ msgstr "assemblage de plusieurs définitions d'héritage pour la colonne « %s msgid "inherited column \"%s\" has a type conflict" msgstr "la colonne héritée « %s » a un conflit de type" -#: commands/tablecmds.c:2535 commands/tablecmds.c:2558 commands/tablecmds.c:2575 commands/tablecmds.c:2831 commands/tablecmds.c:2861 commands/tablecmds.c:2875 parser/parse_coerce.c:2155 parser/parse_coerce.c:2175 parser/parse_coerce.c:2195 parser/parse_coerce.c:2216 parser/parse_coerce.c:2271 parser/parse_coerce.c:2305 parser/parse_coerce.c:2381 parser/parse_coerce.c:2412 parser/parse_coerce.c:2451 parser/parse_coerce.c:2518 parser/parse_param.c:227 +#: commands/tablecmds.c:2535 commands/tablecmds.c:2558 commands/tablecmds.c:2575 commands/tablecmds.c:2831 commands/tablecmds.c:2861 commands/tablecmds.c:2875 parser/parse_coerce.c:2192 parser/parse_coerce.c:2212 parser/parse_coerce.c:2232 parser/parse_coerce.c:2253 parser/parse_coerce.c:2308 parser/parse_coerce.c:2342 parser/parse_coerce.c:2418 parser/parse_coerce.c:2449 parser/parse_coerce.c:2488 parser/parse_coerce.c:2555 parser/parse_param.c:227 #, c-format msgid "%s versus %s" msgstr "%s versus %s" @@ -9843,7 +9843,7 @@ msgstr "ne peut pas modifier le type d'une colonne appartenant à une table typ msgid "cannot specify USING when altering type of generated column" msgstr "ne peut pas indiquer USING lors de la modification du type d'une colonne générée" -#: commands/tablecmds.c:11908 commands/tablecmds.c:17005 commands/tablecmds.c:17095 commands/trigger.c:653 rewrite/rewriteHandler.c:930 rewrite/rewriteHandler.c:965 +#: commands/tablecmds.c:11908 commands/tablecmds.c:17005 commands/tablecmds.c:17095 commands/trigger.c:653 rewrite/rewriteHandler.c:936 rewrite/rewriteHandler.c:971 #, c-format msgid "Column \"%s\" is a generated column." msgstr "la colonne « %s » est une colonne générée." @@ -10759,17 +10759,17 @@ msgstr "n'a pas pu sérialiser un accès à cause d'une mise à jour en parallè 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:4256 +#: commands/trigger.c:4254 #, 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:5304 +#: commands/trigger.c:5302 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "la contrainte « %s » n'est pas DEFERRABLE" -#: commands/trigger.c:5327 +#: commands/trigger.c:5325 #, c-format msgid "constraint \"%s\" does not exist" msgstr "la contrainte « %s » n'existe pas" @@ -11317,7 +11317,7 @@ msgstr "droit refusé pour supprimer le rôle" 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: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:710 +#: commands/user.c:1040 commands/user.c:1197 commands/variable.c:793 commands/variable.c:796 commands/variable.c:913 commands/variable.c:916 utils/adt/acl.c:5103 utils/adt/acl.c:5151 utils/adt/acl.c:5179 utils/adt/acl.c:5198 utils/init/miscinit.c:755 #, c-format msgid "role \"%s\" does not exist" msgstr "le rôle « %s » n'existe pas" @@ -11572,7 +11572,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 tcop/postgres.c:3640 utils/misc/guc.c:11682 utils/misc/guc.c:11744 +#: commands/variable.c:165 tcop/postgres.c:3640 utils/misc/guc.c:11715 utils/misc/guc.c:11777 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Mot clé non reconnu : « %s »." @@ -11677,12 +11677,22 @@ 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:890 +#: commands/variable.c:818 +#, c-format +msgid "permission will be denied to set session authorization \"%s\"" +msgstr "le droit sera refusé pour initialiser l'autorisation de session « %s »" + +#: commands/variable.c:823 +#, c-format +msgid "permission denied to set session authorization \"%s\"" +msgstr "droit refusé pour initialiser l'autorisation de session « %s »" + +#: commands/variable.c:933 #, c-format msgid "permission will be denied to set role \"%s\"" msgstr "le droit sera refusé pour configurer le rôle « %s »" -#: commands/variable.c:895 +#: commands/variable.c:938 #, c-format msgid "permission denied to set role \"%s\"" msgstr "droit refusé pour configurer le rôle « %s »" @@ -11767,17 +11777,17 @@ 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:2452 +#: executor/execCurrent.c:280 executor/execExprInterp.c:2464 #, 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)" -#: executor/execCurrent.c:292 executor/execExprInterp.c:2464 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2476 #, c-format msgid "no value found for parameter %d" msgstr "aucune valeur trouvée pour le paramètre %d" -#: executor/execExpr.c:636 executor/execExpr.c:643 executor/execExpr.c:649 executor/execExprInterp.c:4033 executor/execExprInterp.c:4050 executor/execExprInterp.c:4149 executor/nodeModifyTable.c:127 executor/nodeModifyTable.c:138 executor/nodeModifyTable.c:155 executor/nodeModifyTable.c:163 +#: executor/execExpr.c:636 executor/execExpr.c:643 executor/execExpr.c:649 executor/execExprInterp.c:4045 executor/execExprInterp.c:4062 executor/execExprInterp.c:4161 executor/nodeModifyTable.c:127 executor/nodeModifyTable.c:138 executor/nodeModifyTable.c:155 executor/nodeModifyTable.c:163 #, 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" @@ -11794,7 +11804,7 @@ msgstr "" "La requête fournit une valeur pour une colonne supprimée à la position\n" "ordinale %d." -#: executor/execExpr.c:650 executor/execExprInterp.c:4051 executor/nodeModifyTable.c:139 +#: executor/execExpr.c:650 executor/execExprInterp.c:4063 executor/nodeModifyTable.c:139 #, 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." @@ -11804,108 +11814,108 @@ msgstr "La table a le type %s à la position ordinale %d alors que la requête a msgid "window function calls cannot be nested" msgstr "les appels à la fonction window ne peuvent pas être imbriqués" -#: executor/execExpr.c:1618 +#: executor/execExpr.c:1626 #, c-format msgid "target type is not an array" msgstr "le type cible n'est pas un tableau" -#: executor/execExpr.c:1958 +#: executor/execExpr.c:1966 #, 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:2483 executor/execSRF.c:718 parser/parse_func.c:138 parser/parse_func.c:655 parser/parse_func.c:1031 +#: executor/execExpr.c:2491 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" 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:2916 parser/parse_node.c:277 parser/parse_node.c:327 +#: executor/execExpr.c:2924 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:3044 executor/execExpr.c:3066 +#: executor/execExpr.c:3052 executor/execExpr.c:3074 #, c-format msgid "type %s does not support subscripted assignment" msgstr "le type %s ne supporte pas l'affectation avec indice" -#: executor/execExprInterp.c:1916 +#: executor/execExprInterp.c:1928 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "l'attribut %d du type %s a été supprimé" -#: executor/execExprInterp.c:1922 +#: executor/execExprInterp.c:1934 #, 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:1924 executor/execExprInterp.c:3058 executor/execExprInterp.c:3104 +#: executor/execExprInterp.c:1936 executor/execExprInterp.c:3070 executor/execExprInterp.c:3116 #, 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:2004 utils/adt/expandedrecord.c:99 utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1751 utils/cache/typcache.c:1907 utils/cache/typcache.c:2054 utils/fmgr/funcapi.c:500 +#: executor/execExprInterp.c:2016 utils/adt/expandedrecord.c:99 utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1751 utils/cache/typcache.c:1907 utils/cache/typcache.c:2054 utils/fmgr/funcapi.c:500 #, c-format msgid "type %s is not composite" msgstr "le type %s n'est pas un type composite" -#: executor/execExprInterp.c:2542 +#: executor/execExprInterp.c:2554 #, 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:2755 +#: executor/execExprInterp.c:2767 #, c-format msgid "cannot merge incompatible arrays" msgstr "ne peut pas fusionner les tableaux incompatibles" -#: executor/execExprInterp.c:2756 +#: executor/execExprInterp.c:2768 #, 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:2777 utils/adt/arrayfuncs.c:264 utils/adt/arrayfuncs.c:564 utils/adt/arrayfuncs.c:1306 utils/adt/arrayfuncs.c:3429 utils/adt/arrayfuncs.c:5425 utils/adt/arrayfuncs.c:5942 utils/adt/arraysubs.c:150 utils/adt/arraysubs.c:488 +#: executor/execExprInterp.c:2789 utils/adt/arrayfuncs.c:264 utils/adt/arrayfuncs.c:564 utils/adt/arrayfuncs.c:1306 utils/adt/arrayfuncs.c:3429 utils/adt/arrayfuncs.c:5425 utils/adt/arrayfuncs.c:5942 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:2797 executor/execExprInterp.c:2832 +#: executor/execExprInterp.c:2809 executor/execExprInterp.c:2844 #, 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:2809 utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:937 utils/adt/arrayfuncs.c:1545 utils/adt/arrayfuncs.c:2353 utils/adt/arrayfuncs.c:2368 utils/adt/arrayfuncs.c:2630 utils/adt/arrayfuncs.c:2646 utils/adt/arrayfuncs.c:2907 utils/adt/arrayfuncs.c:2961 utils/adt/arrayfuncs.c:2976 utils/adt/arrayfuncs.c:3317 utils/adt/arrayfuncs.c:3459 utils/adt/arrayfuncs.c:6034 utils/adt/arrayfuncs.c:6375 utils/adt/arrayutils.c:88 utils/adt/arrayutils.c:97 utils/adt/arrayutils.c:104 +#: executor/execExprInterp.c:2821 utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:937 utils/adt/arrayfuncs.c:1545 utils/adt/arrayfuncs.c:2353 utils/adt/arrayfuncs.c:2368 utils/adt/arrayfuncs.c:2630 utils/adt/arrayfuncs.c:2646 utils/adt/arrayfuncs.c:2907 utils/adt/arrayfuncs.c:2961 utils/adt/arrayfuncs.c:2976 utils/adt/arrayfuncs.c:3317 utils/adt/arrayfuncs.c:3459 utils/adt/arrayfuncs.c:6034 utils/adt/arrayfuncs.c:6375 utils/adt/arrayutils.c:88 utils/adt/arrayutils.c:97 utils/adt/arrayutils.c:104 #, c-format msgid "array size exceeds the maximum allowed (%d)" msgstr "la taille du tableau dépasse le maximum permis (%d)" -#: executor/execExprInterp.c:3057 executor/execExprInterp.c:3103 +#: executor/execExprInterp.c:3069 executor/execExprInterp.c:3115 #, c-format msgid "attribute %d has wrong type" msgstr "l'attribut %d a un mauvais type" -#: executor/execExprInterp.c:3662 utils/adt/domains.c:149 +#: executor/execExprInterp.c:3674 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:3677 utils/adt/domains.c:184 +#: executor/execExprInterp.c:3689 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:4034 +#: executor/execExprInterp.c:4046 #, 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:4150 executor/execSRF.c:977 +#: executor/execExprInterp.c:4162 executor/execSRF.c:977 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "" @@ -11947,157 +11957,157 @@ msgstr "La clé %s est en conflit avec la clé existante %s." msgid "Key conflicts with existing key." msgstr "La clé est en conflit avec une clé existante." -#: executor/execMain.c:1014 +#: executor/execMain.c:1006 #, c-format msgid "cannot change sequence \"%s\"" msgstr "ne peut pas modifier la séquence « %s »" -#: executor/execMain.c:1020 +#: executor/execMain.c:1012 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "ne peut pas modifier la relation TOAST « %s »" -#: executor/execMain.c:1038 rewrite/rewriteHandler.c:3108 rewrite/rewriteHandler.c:3953 +#: executor/execMain.c:1030 rewrite/rewriteHandler.c:3141 rewrite/rewriteHandler.c:3986 #, c-format msgid "cannot insert into view \"%s\"" msgstr "ne peut pas insérer dans la vue « %s »" -#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3111 rewrite/rewriteHandler.c:3956 +#: executor/execMain.c:1032 rewrite/rewriteHandler.c:3144 rewrite/rewriteHandler.c:3989 #, 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:1046 rewrite/rewriteHandler.c:3116 rewrite/rewriteHandler.c:3961 +#: executor/execMain.c:1038 rewrite/rewriteHandler.c:3149 rewrite/rewriteHandler.c:3994 #, c-format msgid "cannot update view \"%s\"" msgstr "ne peut pas mettre à jour la vue « %s »" -#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3119 rewrite/rewriteHandler.c:3964 +#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3152 rewrite/rewriteHandler.c:3997 #, 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:1054 rewrite/rewriteHandler.c:3124 rewrite/rewriteHandler.c:3969 +#: executor/execMain.c:1046 rewrite/rewriteHandler.c:3157 rewrite/rewriteHandler.c:4002 #, c-format msgid "cannot delete from view \"%s\"" msgstr "ne peut pas supprimer à partir de la vue « %s »" -#: executor/execMain.c:1056 rewrite/rewriteHandler.c:3127 rewrite/rewriteHandler.c:3972 +#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3160 rewrite/rewriteHandler.c:4005 #, 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:1067 +#: executor/execMain.c:1059 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "ne peut pas modifier la vue matérialisée « %s »" -#: executor/execMain.c:1079 +#: executor/execMain.c:1071 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "ne peut pas insérer dans la table distante « %s »" -#: executor/execMain.c:1085 +#: executor/execMain.c:1077 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "la table distante « %s » n'autorise pas les insertions" -#: executor/execMain.c:1092 +#: executor/execMain.c:1084 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "ne peut pas modifier la table distante « %s »" -#: executor/execMain.c:1098 +#: executor/execMain.c:1090 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "la table distante « %s » n'autorise pas les modifications" -#: executor/execMain.c:1105 +#: executor/execMain.c:1097 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "ne peut pas supprimer à partir de la table distante « %s »" -#: executor/execMain.c:1111 +#: executor/execMain.c:1103 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "la table distante « %s » n'autorise pas les suppressions" -#: executor/execMain.c:1122 +#: executor/execMain.c:1114 #, c-format msgid "cannot change relation \"%s\"" msgstr "ne peut pas modifier la relation « %s »" -#: executor/execMain.c:1149 +#: executor/execMain.c:1141 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "ne peut pas verrouiller les lignes dans la séquence « %s »" -#: executor/execMain.c:1156 +#: executor/execMain.c:1148 #, 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:1163 +#: executor/execMain.c:1155 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "ne peut pas verrouiller les lignes dans la vue « %s »" -#: executor/execMain.c:1171 +#: executor/execMain.c:1163 #, 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:1180 executor/execMain.c:2596 executor/nodeLockRows.c:136 +#: executor/execMain.c:1172 executor/execMain.c:2591 executor/nodeLockRows.c:136 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "ne peut pas verrouiller la table distante « %s »" -#: executor/execMain.c:1186 +#: executor/execMain.c:1178 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "n'a pas pu verrouiller les lignes dans la relation « %s »" -#: executor/execMain.c:1812 +#: executor/execMain.c:1807 #, 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:1814 executor/execMain.c:1897 executor/execMain.c:1947 executor/execMain.c:2056 +#: executor/execMain.c:1809 executor/execMain.c:1892 executor/execMain.c:1942 executor/execMain.c:2051 #, c-format msgid "Failing row contains %s." msgstr "La ligne en échec contient %s." -#: executor/execMain.c:1894 +#: executor/execMain.c:1889 #, c-format 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:1945 +#: executor/execMain.c:1940 #, 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:2054 +#: executor/execMain.c:2049 #, 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:2064 +#: executor/execMain.c:2059 #, 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:2069 +#: executor/execMain.c:2064 #, 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:2076 +#: executor/execMain.c:2071 #, 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:2081 +#: executor/execMain.c:2076 #, 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 »" @@ -12928,7 +12938,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:353 utils/misc/guc.c:7395 utils/misc/guc.c:7597 utils/misc/guc.c:7691 utils/misc/guc.c:7785 utils/misc/guc.c:7905 utils/misc/guc.c:8004 +#: guc-file.l:353 utils/misc/guc.c:7395 utils/misc/guc.c:7597 utils/misc/guc.c:7691 utils/misc/guc.c:7785 utils/misc/guc.c:7907 utils/misc/guc.c:8043 #, 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" @@ -12977,7 +12987,7 @@ msgstr "" msgid "configuration file recursion in \"%s\"" msgstr "le fichier de configuration « %s » contient une récursion" -#: guc-file.l:632 libpq/hba.c:2255 libpq/hba.c:2669 +#: guc-file.l:632 libpq/hba.c:2255 libpq/hba.c:2673 #, c-format msgid "could not open configuration file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier de configuration « %s » : %m" @@ -14505,38 +14515,38 @@ msgstr "nom d'option de l'authentification inconnu : « %s »" msgid "configuration file \"%s\" contains no entries" msgstr "le fichier de configuration « %s » ne contient aucun enregistrement" -#: libpq/hba.c:2824 +#: libpq/hba.c:2828 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "expression rationnelle invalide « %s » : %s" -#: libpq/hba.c:2884 +#: libpq/hba.c:2888 #, 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:2903 +#: libpq/hba.c:2907 #, 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:2999 +#: libpq/hba.c:3003 #, 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:3019 +#: libpq/hba.c:3023 #, 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:3052 +#: libpq/hba.c:3056 #, c-format msgid "could not open usermap file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier usermap « %s » : %m" @@ -14665,7 +14675,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:1179 tcop/postgres.c:4404 +#: libpq/pqcomm.c:1179 tcop/postgres.c:4409 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "arrêt de la connexion à cause d'une perte de synchronisation du protocole" @@ -14733,12 +14743,12 @@ msgstr "chaîne invalide dans le message" msgid "invalid message format" msgstr "format du message invalide" -#: main/main.c:245 +#: main/main.c:247 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s : WSAStartup a échoué : %d\n" -#: main/main.c:309 +#: main/main.c:311 #, c-format msgid "" "%s is the PostgreSQL server.\n" @@ -14747,7 +14757,7 @@ msgstr "" "%s est le serveur PostgreSQL.\n" "\n" -#: main/main.c:310 +#: main/main.c:312 #, c-format msgid "" "Usage:\n" @@ -14758,107 +14768,107 @@ msgstr "" " %s [OPTION]...\n" "\n" -#: main/main.c:311 +#: main/main.c:313 #, c-format msgid "Options:\n" msgstr "Options :\n" -#: main/main.c:312 +#: main/main.c:314 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B NBUFFERS nombre de blocs dans le cache disque de PostgreSQL\n" -#: main/main.c:313 +#: main/main.c:315 #, 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:314 +#: main/main.c:316 #, 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, puis quitte\n" -#: main/main.c:315 +#: main/main.c:317 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 niveau de débogage\n" -#: main/main.c:316 +#: main/main.c:318 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D RÉP_DONNÉES répertoire de la base de données\n" -#: main/main.c:317 +#: main/main.c:319 #, 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:318 +#: main/main.c:320 #, c-format msgid " -F turn fsync off\n" msgstr " -F désactive fsync\n" -#: main/main.c:319 +#: main/main.c:321 #, c-format msgid " -h HOSTNAME host name or IP address to listen on\n" msgstr " -h HÔTE nom d'hôte ou adresse IP à écouter\n" -#: main/main.c:320 +#: main/main.c:322 #, c-format msgid " -i enable TCP/IP connections\n" msgstr " -i active les connexions TCP/IP\n" -#: main/main.c:321 +#: main/main.c:323 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k RÉPERTOIRE emplacement des sockets de domaine Unix\n" -#: main/main.c:323 +#: main/main.c:325 #, c-format msgid " -l enable SSL connections\n" msgstr " -l active les connexions SSL\n" -#: main/main.c:325 +#: main/main.c:327 #, 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:326 +#: main/main.c:328 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p PORT numéro du port à écouter\n" -#: main/main.c:327 +#: main/main.c:329 #, c-format msgid " -s show statistics after each query\n" msgstr " -s affiche les statistiques après chaque requête\n" -#: main/main.c:328 +#: main/main.c:330 #, 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:329 +#: main/main.c:331 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version et quitte\n" -#: main/main.c:330 +#: main/main.c:332 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --NOM=VALEUR configure un paramètre d'exécution\n" -#: main/main.c:331 +#: main/main.c:333 #, 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:332 +#: main/main.c:334 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide et quitte\n" -#: main/main.c:334 +#: main/main.c:336 #, c-format msgid "" "\n" @@ -14867,48 +14877,48 @@ msgstr "" "\n" "Options pour le développeur :\n" -#: main/main.c:335 +#: main/main.c:337 #, c-format msgid " -f s|i|o|b|t|n|m|h forbid use of some plan types\n" msgstr " -f s|i|o|b|t|n|m|h interdit l'utilisation de certains types de plan\n" -#: main/main.c:336 +#: main/main.c:338 #, 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:337 +#: main/main.c:339 #, c-format msgid " -O allow system table structure changes\n" msgstr " -O autorise les modifications de structure des tables systèmes\n" -#: main/main.c:338 +#: main/main.c:340 #, c-format msgid " -P disable system indexes\n" msgstr " -P désactive les index systèmes\n" -#: main/main.c:339 +#: main/main.c:341 #, 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:340 +#: main/main.c:342 #, 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 d'entre\n" " eux meurt\n" -#: main/main.c:341 +#: main/main.c:343 #, 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:343 +#: main/main.c:345 #, c-format msgid "" "\n" @@ -14917,41 +14927,41 @@ msgstr "" "\n" "Options pour le mode mono-utilisateur :\n" -#: main/main.c:344 +#: main/main.c:346 #, c-format msgid " --single selects single-user mode (must be first argument)\n" msgstr "" " --single sélectionne le mode mono-utilisateur (doit être le premier\n" " argument)\n" -#: main/main.c:345 +#: main/main.c:347 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " BASE nom de la base (par défaut, le même que l'utilisateur)\n" -#: main/main.c:346 +#: main/main.c:348 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 surcharge le niveau de débogage\n" -#: main/main.c:347 +#: main/main.c:349 #, c-format msgid " -E echo statement before execution\n" msgstr " -E affiche la requête avant de l'exécuter\n" -#: main/main.c:348 +#: main/main.c:350 #, 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:349 main/main.c:354 +#: main/main.c:351 main/main.c:356 #, 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:351 +#: main/main.c:353 #, c-format msgid "" "\n" @@ -14960,26 +14970,26 @@ msgstr "" "\n" "Options pour le mode « bootstrapping » :\n" -#: main/main.c:352 +#: main/main.c:354 #, c-format msgid " --boot selects bootstrapping mode (must be first argument)\n" msgstr "" " --boot sélectionne le mode « bootstrapping » (doit être le premier\n" " argument)\n" -#: main/main.c:353 +#: main/main.c:355 #, c-format msgid " DBNAME database name (mandatory argument in bootstrapping mode)\n" msgstr "" " BASE nom de la base (argument obligatoire dans le mode\n" " « bootstrapping »)\n" -#: main/main.c:355 +#: main/main.c:357 #, c-format msgid " -x NUM internal use\n" msgstr " -x NUM utilisation interne\n" -#: main/main.c:357 +#: main/main.c:359 #, c-format msgid "" "\n" @@ -14996,12 +15006,12 @@ msgstr "" "\n" "Rapportez les bogues à <%s>.\n" -#: main/main.c:361 +#: main/main.c:363 #, c-format msgid "%s home page: <%s>\n" msgstr "Page d'accueil de %s : <%s>\n" -#: main/main.c:372 +#: main/main.c:374 #, c-format msgid "" "\"root\" execution of the PostgreSQL server is not permitted.\n" @@ -15014,12 +15024,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:389 +#: main/main.c:391 #, 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:396 +#: main/main.c:398 #, c-format msgid "" "Execution of PostgreSQL by a user with administrative permissions is not\n" @@ -15048,7 +15058,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:2567 parser/parse_coerce.c:2705 parser/parse_coerce.c:2752 parser/parse_expr.c:2026 parser/parse_func.c:710 parser/parse_oper.c:883 utils/fmgr/funcapi.c:600 +#: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2604 parser/parse_coerce.c:2742 parser/parse_coerce.c:2789 parser/parse_expr.c:2026 parser/parse_func.c:710 parser/parse_oper.c:883 utils/fmgr/funcapi.c:600 #, 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" @@ -15087,7 +15097,7 @@ msgstr "%s n'est pas autorisé avec UNION/INTERSECT/EXCEPT" msgid "could not implement GROUP BY" msgstr "n'a pas pu implanter GROUP BY" -#: optimizer/plan/planner.c:1974 optimizer/plan/planner.c:3631 optimizer/plan/planner.c:4388 optimizer/prep/prepunion.c:1046 +#: optimizer/plan/planner.c:1974 optimizer/plan/planner.c:3631 optimizer/plan/planner.c:4388 optimizer/prep/prepunion.c:1045 #, c-format msgid "Some of the datatypes only support hashing, while others only support sorting." msgstr "" @@ -15137,7 +15147,7 @@ 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:1045 +#: optimizer/prep/prepunion.c:1044 #, c-format msgid "could not implement %s" msgstr "n'a pas pu implanter %s" @@ -16037,115 +16047,115 @@ 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:1383 +#: parser/parse_coerce.c:1420 #, 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:1499 +#: parser/parse_coerce.c:1536 #, 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:1551 +#: parser/parse_coerce.c:1588 #, 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:2154 parser/parse_coerce.c:2174 parser/parse_coerce.c:2194 parser/parse_coerce.c:2215 parser/parse_coerce.c:2270 parser/parse_coerce.c:2304 +#: parser/parse_coerce.c:2191 parser/parse_coerce.c:2211 parser/parse_coerce.c:2231 parser/parse_coerce.c:2252 parser/parse_coerce.c:2307 parser/parse_coerce.c:2341 #, c-format msgid "arguments declared \"%s\" are not all alike" msgstr "les arguments déclarés « %s » ne sont pas tous identiques" -#: parser/parse_coerce.c:2249 parser/parse_coerce.c:2362 utils/fmgr/funcapi.c:531 +#: parser/parse_coerce.c:2286 parser/parse_coerce.c:2399 utils/fmgr/funcapi.c:531 #, 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:2282 parser/parse_coerce.c:2432 utils/fmgr/funcapi.c:545 +#: parser/parse_coerce.c:2319 parser/parse_coerce.c:2469 utils/fmgr/funcapi.c:545 #, 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:2316 parser/parse_coerce.c:2396 parser/parse_coerce.c:2529 utils/fmgr/funcapi.c:563 utils/fmgr/funcapi.c:628 +#: parser/parse_coerce.c:2353 parser/parse_coerce.c:2433 parser/parse_coerce.c:2566 utils/fmgr/funcapi.c:563 utils/fmgr/funcapi.c:628 #, 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 multirange mais est du type %s" -#: parser/parse_coerce.c:2353 +#: parser/parse_coerce.c:2390 #, 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:2379 parser/parse_coerce.c:2410 parser/parse_coerce.c:2449 parser/parse_coerce.c:2515 +#: parser/parse_coerce.c:2416 parser/parse_coerce.c:2447 parser/parse_coerce.c:2486 parser/parse_coerce.c:2552 #, 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:2474 +#: parser/parse_coerce.c:2511 #, 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:2488 +#: parser/parse_coerce.c:2525 #, 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:2498 +#: parser/parse_coerce.c:2535 #, 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:2559 +#: parser/parse_coerce.c:2596 #, c-format msgid "arguments of anycompatible family cannot be cast to a common type" msgstr "les arguments d'une famille anycompatible ne peuvent pas être convertis vers un type commun" -#: parser/parse_coerce.c:2577 parser/parse_coerce.c:2598 parser/parse_coerce.c:2648 parser/parse_coerce.c:2653 parser/parse_coerce.c:2717 parser/parse_coerce.c:2729 +#: parser/parse_coerce.c:2614 parser/parse_coerce.c:2635 parser/parse_coerce.c:2685 parser/parse_coerce.c:2690 parser/parse_coerce.c:2754 parser/parse_coerce.c:2766 #, 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:2587 +#: parser/parse_coerce.c:2624 #, 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:2608 +#: parser/parse_coerce.c:2645 #, c-format msgid "anycompatiblemultirange type %s does not match anycompatible type %s" msgstr "le type anycompatiblemultirange %s ne correspond pas au type anycompatible %s." -#: parser/parse_coerce.c:2622 +#: parser/parse_coerce.c:2659 #, c-format msgid "type matched to anycompatiblenonarray is an array type: %s" msgstr "le type correspondant à anycompatiblenonarray est un type tableau : %s" -#: parser/parse_coerce.c:2857 +#: parser/parse_coerce.c:2894 #, 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:2874 +#: parser/parse_coerce.c:2911 #, 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:2886 +#: parser/parse_coerce.c:2923 #, 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:2898 +#: parser/parse_coerce.c:2935 #, c-format msgid "A result of type %s requires at least one input of type anycompatible, anycompatiblearray, anycompatiblenonarray, anycompatiblerange, or anycompatiblemultirange." msgstr "Un résultat de type %s requiert au moins une entrée de type anycompatible, anycompatiblearray, anycompatiblenonarray, anycompatiblerange ou anycompatiblemultirange." -#: parser/parse_coerce.c:2928 +#: parser/parse_coerce.c:2965 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." @@ -17412,7 +17422,7 @@ msgstr "" 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:3154 parser/parse_utilcmd.c:3255 rewrite/rewriteHandler.c:533 rewrite/rewriteManip.c:1021 +#: parser/parse_utilcmd.c:3154 parser/parse_utilcmd.c:3255 rewrite/rewriteHandler.c:539 rewrite/rewriteManip.c:1022 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "" @@ -17725,14 +17735,14 @@ msgstr "Huge Pages non supportées sur cette plateforme" msgid "huge pages not supported with the current shared_memory_type setting" msgstr "huge pages non supportées avec la configuration actuelle de shared_memory_type" -#: port/pg_shmem.c:753 port/sysv_shmem.c:753 utils/init/miscinit.c:1180 +#: port/pg_shmem.c:753 port/sysv_shmem.c:753 utils/init/miscinit.c:1224 #, 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:756 port/sysv_shmem.c:756 utils/init/miscinit.c:1182 +#: port/pg_shmem.c:756 port/sysv_shmem.c:756 utils/init/miscinit.c:1226 #, c-format msgid "Terminate any old server processes associated with data directory \"%s\"." msgstr "Terminez les anciens processus serveurs associés avec le répertoire de données « %s »." @@ -17900,32 +17910,32 @@ msgstr "n'a pas pu exécuter le processus autovacuum maître : %m" msgid "could not fork autovacuum worker process: %m" msgstr "n'a pas pu exécuter le processus autovacuum worker : %m" -#: postmaster/autovacuum.c:2317 +#: postmaster/autovacuum.c:2319 #, 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:2546 +#: postmaster/autovacuum.c:2548 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "VACUUM automatique de la table « %s.%s.%s »" -#: postmaster/autovacuum.c:2549 +#: postmaster/autovacuum.c:2551 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "ANALYZE automatique de la table « %s.%s.%s »" -#: postmaster/autovacuum.c:2742 +#: postmaster/autovacuum.c:2744 #, 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:3428 +#: postmaster/autovacuum.c:3430 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "autovacuum non démarré à cause d'une mauvaise configuration" -#: postmaster/autovacuum.c:3429 +#: postmaster/autovacuum.c:3431 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Activez l'option « track_counts »." @@ -18015,54 +18025,54 @@ msgstr "" "Consultez les messages récents du serveur dans les journaux applicatifs pour\n" "plus de détails." -#: postmaster/pgarch.c:365 +#: postmaster/pgarch.c:417 #, 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:387 +#: postmaster/pgarch.c:439 #, c-format msgid "removed orphan archive status file \"%s\"" msgstr "supprimé le fichier de statut d'archivage orphelin « %s »" -#: postmaster/pgarch.c:397 +#: postmaster/pgarch.c:449 #, 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:433 +#: postmaster/pgarch.c:485 #, 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:534 +#: postmaster/pgarch.c:586 #, 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:536 postmaster/pgarch.c:546 postmaster/pgarch.c:552 postmaster/pgarch.c:561 +#: postmaster/pgarch.c:588 postmaster/pgarch.c:598 postmaster/pgarch.c:604 postmaster/pgarch.c:613 #, c-format msgid "The failed archive command was: %s" msgstr "La commande d'archivage qui a échoué était : %s" -#: postmaster/pgarch.c:543 +#: postmaster/pgarch.c:595 #, 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:545 postmaster/postmaster.c:3758 +#: postmaster/pgarch.c:597 postmaster/postmaster.c:3759 #, 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:550 +#: postmaster/pgarch.c:602 #, 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:559 +#: postmaster/pgarch.c:611 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "la commande d'archivage a quitté avec le statut non reconnu %d" @@ -18277,7 +18287,7 @@ msgstr "Les traces suivantes iront sur « %s »." msgid "starting %s" msgstr "démarrage de %s" -#: postmaster/postmaster.c:1161 postmaster/postmaster.c:1260 utils/init/miscinit.c:1640 +#: postmaster/postmaster.c:1161 postmaster/postmaster.c:1260 utils/init/miscinit.c:1684 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "syntaxe de liste invalide pour le paramètre « %s »" @@ -18327,32 +18337,32 @@ msgstr "%s : n'a pas pu écrire le fichier PID externe « %s » : %s\n" msgid "could not load pg_hba.conf" msgstr "n'a pas pu charger pg_hba.conf" -#: postmaster/postmaster.c:1394 +#: postmaster/postmaster.c:1396 #, c-format msgid "postmaster became multithreaded during startup" msgstr "le postmaster est devenu multithreadé lors du démarrage" -#: postmaster/postmaster.c:1395 +#: postmaster/postmaster.c:1397 postmaster/postmaster.c:5148 #, 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:1490 +#: postmaster/postmaster.c:1492 #, 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:1497 +#: postmaster/postmaster.c:1499 #, 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:1520 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1522 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:1547 +#: postmaster/postmaster.c:1549 #, c-format msgid "" "%s: could not find the database system\n" @@ -18363,484 +18373,484 @@ 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:1724 +#: postmaster/postmaster.c:1726 #, c-format msgid "select() failed in postmaster: %m" msgstr "échec de select() dans postmaster : %m" -#: postmaster/postmaster.c:1860 +#: postmaster/postmaster.c:1862 #, c-format msgid "issuing SIGKILL to recalcitrant children" msgstr "exécution de SIGKILL pour les processus fils récalcitrants" -#: postmaster/postmaster.c:1881 +#: postmaster/postmaster.c:1883 #, 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:1984 postmaster/postmaster.c:2012 +#: postmaster/postmaster.c:1986 postmaster/postmaster.c:2014 #, c-format msgid "incomplete startup packet" msgstr "paquet de démarrage incomplet" -#: postmaster/postmaster.c:1996 postmaster/postmaster.c:2029 +#: postmaster/postmaster.c:1998 postmaster/postmaster.c:2031 #, c-format msgid "invalid length of startup packet" msgstr "longueur invalide du paquet de démarrage" -#: postmaster/postmaster.c:2058 +#: postmaster/postmaster.c:2060 #, 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:2076 +#: postmaster/postmaster.c:2078 #, c-format msgid "received unencrypted data after SSL request" msgstr "a reçu des données non chiffrées après la demande SSL" -#: postmaster/postmaster.c:2077 postmaster/postmaster.c:2121 +#: postmaster/postmaster.c:2079 postmaster/postmaster.c:2123 #, c-format msgid "This could be either a client-software bug or evidence of an attempted man-in-the-middle attack." msgstr "Ceci peut être soit un bug du client soit la preuve d'une tentative d'attaque du type man-in-the-middle." -#: postmaster/postmaster.c:2102 +#: postmaster/postmaster.c:2104 #, 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:2120 +#: postmaster/postmaster.c:2122 #, c-format msgid "received unencrypted data after GSSAPI encryption request" msgstr "a reçu des données non chiffrées après la demande de chiffrement GSSAPI" -#: postmaster/postmaster.c:2144 +#: postmaster/postmaster.c:2146 #, 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:2208 utils/misc/guc.c:7138 utils/misc/guc.c:7174 utils/misc/guc.c:7244 utils/misc/guc.c:8589 utils/misc/guc.c:11563 utils/misc/guc.c:11604 +#: postmaster/postmaster.c:2210 utils/misc/guc.c:7138 utils/misc/guc.c:7174 utils/misc/guc.c:7244 utils/misc/guc.c:8628 utils/misc/guc.c:11596 utils/misc/guc.c:11637 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "valeur invalide pour le paramètre « %s » : « %s »" -#: postmaster/postmaster.c:2211 +#: postmaster/postmaster.c:2213 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "Les valeurs valides sont : « false », « 0 », « true », « 1 », « database »." -#: postmaster/postmaster.c:2256 +#: postmaster/postmaster.c:2258 #, 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:2273 +#: postmaster/postmaster.c:2275 #, 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:2337 +#: postmaster/postmaster.c:2339 #, c-format msgid "the database system is starting up" msgstr "le système de bases de données se lance" -#: postmaster/postmaster.c:2343 +#: postmaster/postmaster.c:2345 #, 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:2344 +#: postmaster/postmaster.c:2346 #, 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:2348 +#: postmaster/postmaster.c:2350 #, 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:2349 +#: postmaster/postmaster.c:2351 #, c-format msgid "Hot standby mode is disabled." msgstr "Le mode Hot Standby est désactivé" -#: postmaster/postmaster.c:2354 +#: postmaster/postmaster.c:2356 #, c-format msgid "the database system is shutting down" msgstr "le système de base de données s'arrête" -#: postmaster/postmaster.c:2359 +#: postmaster/postmaster.c:2361 #, 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:2364 storage/ipc/procarray.c:499 storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:361 +#: postmaster/postmaster.c:2366 storage/ipc/procarray.c:499 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:2454 +#: postmaster/postmaster.c:2456 #, 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:2466 +#: postmaster/postmaster.c:2468 #, 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:2720 +#: postmaster/postmaster.c:2721 #, 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:2746 postmaster/postmaster.c:2750 +#: postmaster/postmaster.c:2747 postmaster/postmaster.c:2751 #, c-format msgid "%s was not reloaded" msgstr "%s n'a pas été rechargé" -#: postmaster/postmaster.c:2760 +#: postmaster/postmaster.c:2761 #, c-format msgid "SSL configuration was not reloaded" msgstr "la configuration SSL n'a pas été rechargée" -#: postmaster/postmaster.c:2816 +#: postmaster/postmaster.c:2817 #, c-format msgid "received smart shutdown request" msgstr "a reçu une demande d'arrêt intelligent" -#: postmaster/postmaster.c:2862 +#: postmaster/postmaster.c:2863 #, c-format msgid "received fast shutdown request" msgstr "a reçu une demande d'arrêt rapide" -#: postmaster/postmaster.c:2880 +#: postmaster/postmaster.c:2881 #, c-format msgid "aborting any active transactions" msgstr "annulation des transactions actives" -#: postmaster/postmaster.c:2904 +#: postmaster/postmaster.c:2905 #, c-format msgid "received immediate shutdown request" msgstr "a reçu une demande d'arrêt immédiat" -#: postmaster/postmaster.c:2981 +#: postmaster/postmaster.c:2982 #, c-format msgid "shutdown at recovery target" msgstr "arrêt sur la cible de restauration" -#: postmaster/postmaster.c:2999 postmaster/postmaster.c:3035 +#: postmaster/postmaster.c:3000 postmaster/postmaster.c:3036 msgid "startup process" msgstr "processus de lancement" -#: postmaster/postmaster.c:3002 +#: postmaster/postmaster.c:3003 #, 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:3077 +#: postmaster/postmaster.c:3078 #, 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:3098 +#: postmaster/postmaster.c:3099 msgid "background writer process" msgstr "processus d'écriture en tâche de fond" -#: postmaster/postmaster.c:3152 +#: postmaster/postmaster.c:3153 msgid "checkpointer process" msgstr "processus checkpointer" -#: postmaster/postmaster.c:3168 +#: postmaster/postmaster.c:3169 msgid "WAL writer process" msgstr "processus d'écriture des journaux de transaction" -#: postmaster/postmaster.c:3183 +#: postmaster/postmaster.c:3184 msgid "WAL receiver process" msgstr "processus de réception des journaux de transaction" -#: postmaster/postmaster.c:3198 +#: postmaster/postmaster.c:3199 msgid "autovacuum launcher process" msgstr "processus de lancement de l'autovacuum" -#: postmaster/postmaster.c:3216 +#: postmaster/postmaster.c:3217 msgid "archiver process" msgstr "processus d'archivage" -#: postmaster/postmaster.c:3231 +#: postmaster/postmaster.c:3232 msgid "statistics collector process" msgstr "processus de récupération des statistiques" -#: postmaster/postmaster.c:3245 +#: postmaster/postmaster.c:3246 msgid "system logger process" msgstr "processus des journaux applicatifs" -#: postmaster/postmaster.c:3309 +#: postmaster/postmaster.c:3310 #, c-format msgid "background worker \"%s\"" msgstr "processus en tâche de fond « %s »" -#: postmaster/postmaster.c:3393 postmaster/postmaster.c:3413 postmaster/postmaster.c:3420 postmaster/postmaster.c:3438 +#: postmaster/postmaster.c:3394 postmaster/postmaster.c:3414 postmaster/postmaster.c:3421 postmaster/postmaster.c:3439 msgid "server process" msgstr "processus serveur" -#: postmaster/postmaster.c:3492 +#: postmaster/postmaster.c:3493 #, 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:3745 +#: postmaster/postmaster.c:3746 #, 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:3747 postmaster/postmaster.c:3759 postmaster/postmaster.c:3769 postmaster/postmaster.c:3780 +#: postmaster/postmaster.c:3748 postmaster/postmaster.c:3760 postmaster/postmaster.c:3770 postmaster/postmaster.c:3781 #, 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:3756 +#: postmaster/postmaster.c:3757 #, 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:3766 +#: postmaster/postmaster.c:3767 #, 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:3778 +#: postmaster/postmaster.c:3779 #, 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:3992 +#: postmaster/postmaster.c:3993 #, c-format msgid "abnormal database system shutdown" msgstr "le système de base de données a été arrêté anormalement" -#: postmaster/postmaster.c:4030 +#: postmaster/postmaster.c:4031 #, c-format msgid "shutting down due to startup process failure" msgstr "arrêt à cause d'un échec du processus startup" -#: postmaster/postmaster.c:4036 +#: postmaster/postmaster.c:4037 #, c-format msgid "shutting down because restart_after_crash is off" msgstr "arrêt parce que restart_after_crash est configuré à off" -#: postmaster/postmaster.c:4048 +#: postmaster/postmaster.c:4049 #, c-format msgid "all server processes terminated; reinitializing" msgstr "tous les processus serveur sont arrêtés ; réinitialisation" -#: postmaster/postmaster.c:4222 postmaster/postmaster.c:5573 postmaster/postmaster.c:5964 +#: postmaster/postmaster.c:4223 postmaster/postmaster.c:5575 postmaster/postmaster.c:5966 #, 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:4276 +#: postmaster/postmaster.c:4277 #, 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:4318 +#: postmaster/postmaster.c:4319 msgid "could not fork new process for connection: " msgstr "n'a pas pu lancer le nouveau processus fils pour la connexion : " -#: postmaster/postmaster.c:4424 +#: postmaster/postmaster.c:4425 #, c-format msgid "connection received: host=%s port=%s" msgstr "connexion reçue : hôte=%s port=%s" -#: postmaster/postmaster.c:4429 +#: postmaster/postmaster.c:4430 #, c-format msgid "connection received: host=%s" msgstr "connexion reçue : hôte=%s" -#: postmaster/postmaster.c:4672 +#: postmaster/postmaster.c:4673 #, 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:4730 +#: postmaster/postmaster.c:4731 #, 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:4739 +#: postmaster/postmaster.c:4740 #, 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:4766 +#: postmaster/postmaster.c:4767 #, c-format msgid "subprocess command line too long" msgstr "ligne de commande du sous-processus trop longue" -#: postmaster/postmaster.c:4784 +#: postmaster/postmaster.c:4785 #, c-format msgid "CreateProcess() call failed: %m (error code %lu)" msgstr "échec de l'appel à CreateProcess() : %m (code d'erreur %lu)" -#: postmaster/postmaster.c:4811 +#: postmaster/postmaster.c:4812 #, c-format msgid "could not unmap view of backend parameter file: error code %lu" msgstr "n'a pas pu supprimer la vue du fichier paramètre du backend : code d'erreur %lu" -#: postmaster/postmaster.c:4815 +#: postmaster/postmaster.c:4816 #, 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:4837 +#: postmaster/postmaster.c:4838 #, 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:4838 +#: postmaster/postmaster.c:4839 #, 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:5020 +#: postmaster/postmaster.c:5021 #, 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:5146 +#: postmaster/postmaster.c:5147 #, c-format -msgid "Please report this to <%s>." -msgstr "Merci de signaler ceci à <%s>." +msgid "postmaster became multithreaded" +msgstr "le postmaster est devenu multithreadé" -#: postmaster/postmaster.c:5233 +#: postmaster/postmaster.c:5235 #, 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:5497 +#: postmaster/postmaster.c:5499 #, 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:5501 +#: postmaster/postmaster.c:5503 #, 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:5505 +#: postmaster/postmaster.c:5507 #, 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:5509 +#: postmaster/postmaster.c:5511 #, c-format msgid "could not fork checkpointer process: %m" msgstr "n'a pas pu créer le processus checkpointer : %m" -#: postmaster/postmaster.c:5513 +#: postmaster/postmaster.c:5515 #, 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:5517 +#: postmaster/postmaster.c:5519 #, 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:5521 +#: postmaster/postmaster.c:5523 #, c-format msgid "could not fork process: %m" msgstr "n'a pas pu lancer le processus fils : %m" -#: postmaster/postmaster.c:5722 postmaster/postmaster.c:5745 +#: postmaster/postmaster.c:5724 postmaster/postmaster.c:5747 #, 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:5729 postmaster/postmaster.c:5752 +#: postmaster/postmaster.c:5731 postmaster/postmaster.c:5754 #, 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:5837 +#: postmaster/postmaster.c:5839 #, 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:5950 +#: postmaster/postmaster.c:5952 #, c-format msgid "no slot available for new worker process" msgstr "aucun slot disponible pour le nouveau processus worker" -#: postmaster/postmaster.c:6284 +#: postmaster/postmaster.c:6286 #, 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:6316 +#: postmaster/postmaster.c:6318 #, 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:6345 +#: postmaster/postmaster.c:6347 #, 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:6352 +#: postmaster/postmaster.c:6354 #, 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:6361 +#: postmaster/postmaster.c:6363 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "n'a pas pu supprimer le fichier « %s » : %s\n" -#: postmaster/postmaster.c:6378 +#: postmaster/postmaster.c:6380 #, 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:6387 +#: postmaster/postmaster.c:6389 #, 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:6394 +#: postmaster/postmaster.c:6396 #, 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:6556 +#: postmaster/postmaster.c:6558 #, 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:6598 +#: postmaster/postmaster.c:6600 #, c-format msgid "could not post child completion status\n" msgstr "n'a pas pu poster le statut de fin de l'enfant\n" @@ -19624,42 +19634,42 @@ msgstr "le processus apply de réplication logique pour la souscription « %s » msgid "subscription has no replication slot set" msgstr "la souscription n'a aucun ensemble de slot de réplication" -#: replication/pgoutput/pgoutput.c:196 +#: replication/pgoutput/pgoutput.c:205 #, c-format msgid "invalid proto_version" msgstr "proto_version invalide" -#: replication/pgoutput/pgoutput.c:201 +#: replication/pgoutput/pgoutput.c:210 #, c-format msgid "proto_version \"%s\" out of range" msgstr "proto_version « %s » en dehors des limites" -#: replication/pgoutput/pgoutput.c:218 +#: replication/pgoutput/pgoutput.c:227 #, c-format msgid "invalid publication_names syntax" msgstr "syntaxe publication_names invalide" -#: replication/pgoutput/pgoutput.c:289 +#: replication/pgoutput/pgoutput.c:324 #, 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:295 +#: replication/pgoutput/pgoutput.c:330 #, 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:301 +#: replication/pgoutput/pgoutput.c:336 #, c-format msgid "publication_names parameter missing" msgstr "paramètre publication_names manquant" -#: replication/pgoutput/pgoutput.c:314 +#: replication/pgoutput/pgoutput.c:349 #, 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:319 +#: replication/pgoutput/pgoutput.c:354 #, c-format msgid "streaming requested, but not supported by output plugin" msgstr "flux demandé, mais non supporté par le plugin de sortie" @@ -19947,7 +19957,7 @@ msgstr "récupération du fichier historique pour la timeline %u à partir du se 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:525 storage/smgr/md.c:1324 +#: replication/walsender.c:525 storage/smgr/md.c:1336 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "n'a pas pu trouver la fin du fichier « %s » : %m" @@ -20290,226 +20300,226 @@ 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:577 +#: rewrite/rewriteHandler.c:583 #, 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:610 #, c-format msgid "INSERT...SELECT rule actions are not supported for queries having data-modifying statements in WITH" msgstr "les actions de règle INSERT...SELECT ne sont pas supportées par les requêtes de modification de données dans WITH" -#: rewrite/rewriteHandler.c:657 +#: rewrite/rewriteHandler.c:663 #, 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:889 rewrite/rewriteHandler.c:928 +#: rewrite/rewriteHandler.c:895 rewrite/rewriteHandler.c:934 #, 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:891 rewrite/rewriteHandler.c:957 +#: rewrite/rewriteHandler.c:897 rewrite/rewriteHandler.c:963 #, 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:893 +#: rewrite/rewriteHandler.c:899 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "Utilisez OVERRIDING SYSTEM VALUE pour surcharger." -#: rewrite/rewriteHandler.c:955 rewrite/rewriteHandler.c:963 +#: rewrite/rewriteHandler.c:961 rewrite/rewriteHandler.c:969 #, 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:1110 rewrite/rewriteHandler.c:1128 +#: rewrite/rewriteHandler.c:1104 rewrite/rewriteHandler.c:1122 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "affectations multiples pour la même colonne « %s »" -#: rewrite/rewriteHandler.c:1739 rewrite/rewriteHandler.c:3141 +#: rewrite/rewriteHandler.c:1723 rewrite/rewriteHandler.c:3174 #, c-format msgid "access to non-system view \"%s\" is restricted" msgstr "l'accès à la vue non système « %s » est restreint" -#: rewrite/rewriteHandler.c:2148 rewrite/rewriteHandler.c:4027 +#: rewrite/rewriteHandler.c:2151 rewrite/rewriteHandler.c:4060 #, 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:2233 +#: rewrite/rewriteHandler.c:2256 #, 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:2553 +#: rewrite/rewriteHandler.c:2586 msgid "Junk view columns are not updatable." msgstr "Les colonnes « junk » des vues ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2558 +#: rewrite/rewriteHandler.c:2591 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:2561 +#: rewrite/rewriteHandler.c:2594 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:2564 +#: rewrite/rewriteHandler.c:2597 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:2625 +#: rewrite/rewriteHandler.c:2658 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Les vues contenant DISTINCT ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2628 +#: rewrite/rewriteHandler.c:2661 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:2631 +#: rewrite/rewriteHandler.c:2664 msgid "Views containing HAVING are not automatically updatable." msgstr "Les vues contenant HAVING ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2634 +#: rewrite/rewriteHandler.c:2667 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:2637 +#: rewrite/rewriteHandler.c:2670 msgid "Views containing WITH are not automatically updatable." msgstr "Les vues contenant WITH ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2640 +#: rewrite/rewriteHandler.c:2673 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:2652 +#: rewrite/rewriteHandler.c:2685 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:2655 +#: rewrite/rewriteHandler.c:2688 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:2658 +#: rewrite/rewriteHandler.c:2691 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:2665 rewrite/rewriteHandler.c:2669 rewrite/rewriteHandler.c:2677 +#: rewrite/rewriteHandler.c:2698 rewrite/rewriteHandler.c:2702 rewrite/rewriteHandler.c:2710 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:2680 +#: rewrite/rewriteHandler.c:2713 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Les vues contenant TABLESAMPLE ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2704 +#: rewrite/rewriteHandler.c:2737 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:3201 +#: rewrite/rewriteHandler.c:3234 #, 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:3209 +#: rewrite/rewriteHandler.c:3242 #, 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:3691 +#: rewrite/rewriteHandler.c:3724 #, c-format msgid "DO INSTEAD NOTIFY 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:3702 +#: rewrite/rewriteHandler.c:3735 #, 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:3716 +#: rewrite/rewriteHandler.c:3749 #, 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:3720 +#: rewrite/rewriteHandler.c:3753 #, 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:3725 +#: rewrite/rewriteHandler.c:3758 #, 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:3955 rewrite/rewriteHandler.c:3963 rewrite/rewriteHandler.c:3971 +#: rewrite/rewriteHandler.c:3988 rewrite/rewriteHandler.c:3996 rewrite/rewriteHandler.c:4004 #, 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:4076 +#: rewrite/rewriteHandler.c:4109 #, 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:4078 +#: rewrite/rewriteHandler.c:4111 #, 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:4083 +#: rewrite/rewriteHandler.c:4116 #, 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:4085 +#: rewrite/rewriteHandler.c:4118 #, 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:4090 +#: rewrite/rewriteHandler.c:4123 #, 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:4092 +#: rewrite/rewriteHandler.c:4125 #, 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:4110 +#: rewrite/rewriteHandler.c:4143 #, 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:4167 +#: rewrite/rewriteHandler.c:4200 #, 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:1009 +#: rewrite/rewriteManip.c:1010 #, c-format msgid "conditional utility statements are not implemented" msgstr "les instructions conditionnelles ne sont pas implémentées" -#: rewrite/rewriteManip.c:1175 +#: rewrite/rewriteManip.c:1176 #, 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:1510 +#: rewrite/rewriteManip.c:1512 #, 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" @@ -20737,7 +20747,7 @@ msgstr "n'a pas pu déterminer la taille du fichier temporaire « %s » à parti 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:309 storage/smgr/md.c:869 +#: storage/file/buffile.c:902 storage/smgr/md.c:309 storage/smgr/md.c:871 #, c-format msgid "could not truncate file \"%s\": %m" msgstr "n'a pas pu tronquer le fichier « %s » : %m" @@ -21405,22 +21415,22 @@ msgstr "" "n'a pas pu écrire le bloc %u du fichier « %s » : a seulement écrit %d\n" "octets sur %d" -#: storage/smgr/md.c:840 +#: storage/smgr/md.c:842 #, 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:895 +#: storage/smgr/md.c:897 #, 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:1289 +#: storage/smgr/md.c:1301 #, 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:1303 +#: storage/smgr/md.c:1315 #, 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" @@ -21469,7 +21479,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:449 tcop/postgres.c:4831 +#: tcop/postgres.c:449 tcop/postgres.c:4836 #, c-format msgid "invalid frontend message type %d" msgstr "type %d du message de l'interface invalide" @@ -21729,47 +21739,47 @@ msgstr "" "Augmenter la limite de profondeur de la pile sur votre plateforme via\n" "« ulimit -s » ou l'équivalent local." -#: tcop/postgres.c:4008 +#: tcop/postgres.c:4013 #, 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:4009 tcop/postgres.c:4015 +#: tcop/postgres.c:4014 tcop/postgres.c:4020 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Essayez « %s --help » pour plus d'informations." -#: tcop/postgres.c:4013 +#: tcop/postgres.c:4018 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s : argument invalide en ligne de commande : %s" -#: tcop/postgres.c:4076 +#: tcop/postgres.c:4081 #, c-format msgid "%s: no database nor user name specified" msgstr "%s : ni base de données ni utilisateur spécifié" -#: tcop/postgres.c:4733 +#: tcop/postgres.c:4738 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "sous-type %d du message CLOSE invalide" -#: tcop/postgres.c:4768 +#: tcop/postgres.c:4773 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "sous-type %d du message DESCRIBE invalide" -#: tcop/postgres.c:4852 +#: tcop/postgres.c:4857 #, 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:4856 +#: tcop/postgres.c:4861 #, 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:5033 +#: tcop/postgres.c:5038 #, c-format msgid "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s%s" msgstr "" @@ -21781,12 +21791,12 @@ msgstr "" 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:941 tcop/pquery.c:1703 +#: tcop/pquery.c:939 tcop/pquery.c:1698 #, c-format msgid "cursor can only scan forward" msgstr "le curseur peut seulement parcourir en avant" -#: tcop/pquery.c:942 tcop/pquery.c:1704 +#: tcop/pquery.c:940 tcop/pquery.c:1699 #, 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." @@ -24353,7 +24363,7 @@ msgstr "il existe plus d'une fonction nommée « %s »" msgid "more than one operator named %s" msgstr "il existe plus d'un opérateur nommé%s" -#: utils/adt/regproc.c:715 utils/adt/regproc.c:756 utils/adt/regproc.c:2055 utils/adt/ruleutils.c:9822 utils/adt/ruleutils.c:9991 +#: utils/adt/regproc.c:715 utils/adt/regproc.c:756 utils/adt/regproc.c:2055 utils/adt/ruleutils.c:9828 utils/adt/ruleutils.c:9997 #, c-format msgid "too many arguments" msgstr "trop d'arguments" @@ -24543,7 +24553,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:12468 +#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12501 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp en dehors de limites : « %s »" @@ -25531,187 +25541,182 @@ msgstr "" "n'a pas pu déterminer la description de la ligne pour la fonction renvoyant\n" "l'enregistrement" -#: utils/init/miscinit.c:314 +#: 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:319 +#: 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:327 +#: 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:343 +#: 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:345 +#: 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:363 +#: 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:365 +#: 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:650 utils/misc/guc.c:7520 +#: utils/init/miscinit.c:684 utils/misc/guc.c:7520 #, 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:718 +#: utils/init/miscinit.c:763 #, c-format msgid "role with OID %u does not exist" msgstr "le rôle d'OID %u n'existe pas" -#: utils/init/miscinit.c:748 +#: utils/init/miscinit.c:808 #, 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:766 +#: utils/init/miscinit.c:829 #, c-format msgid "too many connections for role \"%s\"" msgstr "trop de connexions pour le rôle « %s »" -#: utils/init/miscinit.c:834 -#, c-format -msgid "permission denied to set session authorization" -msgstr "droit refusé pour initialiser une autorisation de session" - -#: utils/init/miscinit.c:917 +#: utils/init/miscinit.c:961 #, c-format msgid "invalid role OID: %u" msgstr "OID du rôle invalide : %u" -#: utils/init/miscinit.c:971 +#: utils/init/miscinit.c:1015 #, c-format msgid "database system is shut down" msgstr "le système de base de données est arrêté" -#: utils/init/miscinit.c:1058 +#: utils/init/miscinit.c:1102 #, 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:1072 +#: utils/init/miscinit.c:1116 #, 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:1079 +#: utils/init/miscinit.c:1123 #, 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:1088 +#: utils/init/miscinit.c:1132 #, c-format msgid "lock file \"%s\" is empty" msgstr "le fichier verrou « %s » est vide" -#: utils/init/miscinit.c:1089 +#: utils/init/miscinit.c:1133 #, 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:1133 +#: utils/init/miscinit.c:1177 #, c-format msgid "lock file \"%s\" already exists" msgstr "le fichier verrou « %s » existe déjà" -#: utils/init/miscinit.c:1137 +#: utils/init/miscinit.c:1181 #, 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:1139 +#: utils/init/miscinit.c:1183 #, 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:1142 +#: utils/init/miscinit.c:1186 #, 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:1144 +#: utils/init/miscinit.c:1188 #, 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:1195 +#: utils/init/miscinit.c:1239 #, 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:1197 +#: utils/init/miscinit.c:1241 #, 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:1234 utils/init/miscinit.c:1248 utils/init/miscinit.c:1259 +#: utils/init/miscinit.c:1278 utils/init/miscinit.c:1292 utils/init/miscinit.c:1303 #, 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:1370 utils/init/miscinit.c:1512 utils/misc/guc.c:10434 +#: utils/init/miscinit.c:1414 utils/init/miscinit.c:1556 utils/misc/guc.c:10473 #, 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:1500 +#: utils/init/miscinit.c:1544 #, 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:1525 +#: utils/init/miscinit.c:1569 #, 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:1564 utils/init/miscinit.c:1580 +#: utils/init/miscinit.c:1608 utils/init/miscinit.c:1624 #, 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:1566 +#: utils/init/miscinit.c:1610 #, c-format msgid "File \"%s\" is missing." msgstr "Le fichier « %s » est manquant." -#: utils/init/miscinit.c:1582 +#: utils/init/miscinit.c:1626 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "Le fichier « %s » ne contient aucune donnée valide." -#: utils/init/miscinit.c:1584 +#: utils/init/miscinit.c:1628 #, c-format msgid "You might need to initdb." msgstr "Vous pouvez avoir besoin d'exécuter initdb." -#: utils/init/miscinit.c:1592 +#: utils/init/miscinit.c:1636 #, c-format msgid "The data directory was initialized by PostgreSQL version %s, which is not compatible with this version %s." msgstr "" @@ -25786,101 +25791,101 @@ msgstr "droit refusé pour la base de données « %s »" msgid "User does not have CONNECT privilege." msgstr "L'utilisateur n'a pas le droit CONNECT." -#: utils/init/postinit.c:376 +#: utils/init/postinit.c:379 #, c-format msgid "too many connections for database \"%s\"" msgstr "trop de connexions pour la base de données « %s »" -#: utils/init/postinit.c:398 utils/init/postinit.c:405 +#: utils/init/postinit.c:401 utils/init/postinit.c:408 #, 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:399 +#: utils/init/postinit.c:402 #, 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:401 utils/init/postinit.c:408 +#: utils/init/postinit.c:404 utils/init/postinit.c:411 #, 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:406 +#: utils/init/postinit.c:409 #, 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:761 +#: utils/init/postinit.c:764 #, 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:762 +#: utils/init/postinit.c:765 #, 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:798 +#: utils/init/postinit.c:801 #, 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:802 +#: utils/init/postinit.c:805 #, 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:812 +#: utils/init/postinit.c:815 #, 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:825 +#: utils/init/postinit.c:828 #, 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:835 +#: utils/init/postinit.c:838 #, 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:904 +#: utils/init/postinit.c:907 #, c-format msgid "database %u does not exist" msgstr "la base de données « %u » n'existe pas" -#: utils/init/postinit.c:994 +#: utils/init/postinit.c:997 #, 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:1001 +#: utils/init/postinit.c:1004 #, c-format msgid "cannot connect to invalid database \"%s\"" msgstr "ne peut pas se connecter à la base de données invalide « %s »" -#: utils/init/postinit.c:1021 +#: utils/init/postinit.c:1024 #, 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:1026 +#: utils/init/postinit.c:1029 #, c-format msgid "could not access directory \"%s\": %m" msgstr "n'a pas pu accéder au répertoire « %s » : %m" @@ -26521,10 +26526,10 @@ 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:1769 -msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." +msgid "Start a subprocess to capture stderr, csvlog and/or jsonlog into log files." msgstr "" -"Lance un sous-processus pour capturer la sortie d'erreurs (stderr) et/ou\n" -"csvlogs dans des journaux applicatifs." +"Lance un sous-processus pour capturer la sortie d'erreurs (stderr), \n" +"csvlog et/ou jsonlog dans des journaux applicatifs." #: utils/misc/guc.c:1778 msgid "Truncate existing log files of same name during log rotation." @@ -27993,7 +27998,7 @@ msgstr "paramètre de configuration « %s » invalide" 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:5555 utils/misc/guc.c:9327 +#: utils/misc/guc.c:5555 utils/misc/guc.c:9366 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "paramètre de configuration « %s » non reconnu" @@ -28068,7 +28073,7 @@ msgstr "%g%s%s est en dehors des limites valides pour le paramètre « %s » (%g msgid "parameter \"%s\" cannot be set during a parallel operation" msgstr "le paramètre « %s » ne peut pas être configuré pendant une opération en parallèle" -#: utils/misc/guc.c:7372 utils/misc/guc.c:8572 +#: utils/misc/guc.c:7372 utils/misc/guc.c:8611 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "le paramètre « %s » ne peut pas être changé" @@ -28078,7 +28083,7 @@ msgstr "le paramètre « %s » ne peut pas être changé" msgid "parameter \"%s\" cannot be changed now" msgstr "le paramètre « %s » ne peut pas être modifié maintenant" -#: utils/misc/guc.c:7423 utils/misc/guc.c:7474 utils/misc/guc.c:11390 +#: utils/misc/guc.c:7423 utils/misc/guc.c:7474 utils/misc/guc.c:11423 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "droit refusé pour initialiser le paramètre « %s »" @@ -28095,144 +28100,144 @@ msgstr "" "ne peut pas configurer le paramètre « %s » à l'intérieur d'une fonction\n" "SECURITY DEFINER" -#: utils/misc/guc.c:8145 utils/misc/guc.c:8192 utils/misc/guc.c:9606 +#: utils/misc/guc.c:8184 utils/misc/guc.c:8231 utils/misc/guc.c:9645 #, 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:8276 +#: utils/misc/guc.c:8315 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s prend un seul argument" -#: utils/misc/guc.c:8524 +#: utils/misc/guc.c:8563 #, 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:8605 +#: utils/misc/guc.c:8644 #, 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:8650 +#: utils/misc/guc.c:8689 #, 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:8731 +#: utils/misc/guc.c:8770 #, 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:8807 +#: utils/misc/guc.c:8846 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT n'est pas implémenté" -#: utils/misc/guc.c:8891 +#: utils/misc/guc.c:8930 #, c-format msgid "SET requires parameter name" msgstr "SET requiert le nom du paramètre" -#: utils/misc/guc.c:9024 +#: utils/misc/guc.c:9063 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "tentative de redéfinition du paramètre « %s »" -#: utils/misc/guc.c:10837 +#: utils/misc/guc.c:10870 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "lors de la configuration du paramètre « %s » en « %s »" -#: utils/misc/guc.c:11002 +#: utils/misc/guc.c:11035 #, c-format msgid "parameter \"%s\" could not be set" msgstr "le paramètre « %s » n'a pas pu être configuré" -#: utils/misc/guc.c:11094 +#: utils/misc/guc.c:11127 #, 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:11452 utils/misc/guc.c:11486 +#: utils/misc/guc.c:11485 utils/misc/guc.c:11519 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "valeur invalide pour le paramètre « %s » : %d" -#: utils/misc/guc.c:11520 +#: utils/misc/guc.c:11553 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "valeur invalide pour le paramètre « %s » : %g" -#: utils/misc/guc.c:11807 +#: utils/misc/guc.c:11840 #, 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:11819 +#: utils/misc/guc.c:11852 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour n'est pas supporté dans cette installation" -#: utils/misc/guc.c:11832 +#: utils/misc/guc.c:11865 #, c-format msgid "SSL is not supported by this build" msgstr "SSL n'est pas supporté dans cette installation" -#: utils/misc/guc.c:11844 +#: utils/misc/guc.c:11877 #, 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:11856 +#: utils/misc/guc.c:11889 #, 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:12086 +#: utils/misc/guc.c:12119 #, 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:12099 +#: utils/misc/guc.c:12132 #, 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:12113 +#: utils/misc/guc.c:12146 #, 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:12127 +#: utils/misc/guc.c:12160 #, 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:12255 +#: utils/misc/guc.c:12288 #, c-format msgid "invalid character" msgstr "caractère invalide" -#: utils/misc/guc.c:12315 +#: utils/misc/guc.c:12348 #, 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:12355 +#: utils/misc/guc.c:12388 #, c-format msgid "multiple recovery targets specified" msgstr "multiples cibles de restauration spécifiées" -#: utils/misc/guc.c:12356 +#: utils/misc/guc.c:12389 #, 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:12364 +#: utils/misc/guc.c:12397 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "La seule valeur autorisée est « immediate »." @@ -28508,3 +28513,7 @@ msgstr "une transaction sérialisable en écriture ne peut pas importer un snaps #, 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" + +#, c-format +#~ msgid "Please report this to <%s>." +#~ msgstr "Merci de signaler ceci à <%s>." diff --git a/src/backend/po/ja.po b/src/backend/po/ja.po index e5a2a811b55..2a722ff1a2e 100644 --- a/src/backend/po/ja.po +++ b/src/backend/po/ja.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: postgres (PostgreSQL 14)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-11-11 10:12+0900\n" -"PO-Revision-Date: 2024-11-11 11:55+0900\n" +"POT-Creation-Date: 2025-02-03 10:35+0900\n" +"PO-Revision-Date: 2025-02-03 14:01+0900\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: jpug-doc \n" "Language: ja\n" @@ -33,20 +33,20 @@ msgstr "記録されていません" msgid "could not open file \"%s\" for reading: %m" msgstr "ファイル\"%s\"を読み取り用にオープンできませんでした: %m" -#: ../common/controldata_utils.c:96 ../common/controldata_utils.c:99 access/transam/timeline.c:143 access/transam/timeline.c:362 access/transam/twophase.c:1329 access/transam/xlog.c:3576 access/transam/xlog.c:4820 access/transam/xlog.c:11665 access/transam/xlog.c:11678 access/transam/xlog.c:12133 access/transam/xlog.c:12213 access/transam/xlog.c:12250 access/transam/xlog.c:12310 access/transam/xlogfuncs.c:703 access/transam/xlogfuncs.c:722 +#: ../common/controldata_utils.c:96 ../common/controldata_utils.c:99 access/transam/timeline.c:143 access/transam/timeline.c:362 access/transam/twophase.c:1329 access/transam/xlog.c:3576 access/transam/xlog.c:4817 access/transam/xlog.c:11662 access/transam/xlog.c:11675 access/transam/xlog.c:12130 access/transam/xlog.c:12210 access/transam/xlog.c:12247 access/transam/xlog.c:12307 access/transam/xlogfuncs.c:703 access/transam/xlogfuncs.c:722 #: commands/extension.c:3492 libpq/hba.c:534 replication/basebackup.c:2016 replication/logical/origin.c:729 replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4959 replication/logical/snapbuild.c:1872 replication/logical/snapbuild.c:1914 replication/logical/snapbuild.c:1941 replication/slot.c:1727 replication/slot.c:1768 replication/walsender.c:545 storage/file/buffile.c:445 storage/file/copydir.c:195 utils/adt/genfile.c:202 utils/adt/misc.c:881 #: utils/cache/relmapper.c:744 #, c-format msgid "could not read file \"%s\": %m" msgstr "ファイル\"%s\"の読み取りに失敗しました: %m" -#: ../common/controldata_utils.c:107 ../common/controldata_utils.c:111 access/transam/xlog.c:3581 access/transam/xlog.c:4825 replication/basebackup.c:2020 replication/logical/origin.c:734 replication/logical/origin.c:773 replication/logical/snapbuild.c:1877 replication/logical/snapbuild.c:1919 replication/logical/snapbuild.c:1946 replication/slot.c:1731 replication/slot.c:1772 replication/walsender.c:550 utils/cache/relmapper.c:748 +#: ../common/controldata_utils.c:107 ../common/controldata_utils.c:111 access/transam/xlog.c:3581 access/transam/xlog.c:4822 replication/basebackup.c:2020 replication/logical/origin.c:734 replication/logical/origin.c:773 replication/logical/snapbuild.c:1877 replication/logical/snapbuild.c:1919 replication/logical/snapbuild.c:1946 replication/slot.c:1731 replication/slot.c:1772 replication/walsender.c:550 utils/cache/relmapper.c:748 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "ファイル\"%1$s\"を読み込めませんでした: %3$zuバイトのうち%2$dバイトを読み込みました" -#: ../common/controldata_utils.c:122 ../common/controldata_utils.c:127 ../common/controldata_utils.c:286 ../common/controldata_utils.c:289 access/heap/rewriteheap.c:1178 access/heap/rewriteheap.c:1281 access/transam/timeline.c:392 access/transam/timeline.c:438 access/transam/timeline.c:516 access/transam/twophase.c:1341 access/transam/twophase.c:1753 access/transam/xlog.c:3445 access/transam/xlog.c:3616 access/transam/xlog.c:3621 access/transam/xlog.c:3949 -#: access/transam/xlog.c:4790 access/transam/xlog.c:5715 access/transam/xlogfuncs.c:728 commands/copyfrom.c:1586 commands/copyto.c:328 libpq/be-fsstubs.c:455 libpq/be-fsstubs.c:525 replication/logical/origin.c:667 replication/logical/origin.c:806 replication/logical/reorderbuffer.c:5017 replication/logical/snapbuild.c:1781 replication/logical/snapbuild.c:1954 replication/slot.c:1618 replication/slot.c:1779 replication/walsender.c:560 storage/file/copydir.c:218 +#: ../common/controldata_utils.c:122 ../common/controldata_utils.c:127 ../common/controldata_utils.c:286 ../common/controldata_utils.c:289 access/heap/rewriteheap.c:1178 access/heap/rewriteheap.c:1281 access/transam/timeline.c:392 access/transam/timeline.c:438 access/transam/timeline.c:512 access/transam/twophase.c:1341 access/transam/twophase.c:1753 access/transam/xlog.c:3445 access/transam/xlog.c:3616 access/transam/xlog.c:3621 access/transam/xlog.c:3946 +#: access/transam/xlog.c:4787 access/transam/xlog.c:5712 access/transam/xlogfuncs.c:728 commands/copyfrom.c:1586 commands/copyto.c:328 libpq/be-fsstubs.c:455 libpq/be-fsstubs.c:525 replication/logical/origin.c:667 replication/logical/origin.c:806 replication/logical/reorderbuffer.c:5017 replication/logical/snapbuild.c:1781 replication/logical/snapbuild.c:1954 replication/slot.c:1618 replication/slot.c:1779 replication/walsender.c:560 storage/file/copydir.c:218 #: storage/file/copydir.c:223 storage/file/fd.c:738 storage/file/fd.c:3537 storage/file/fd.c:3640 utils/cache/relmapper.c:759 utils/cache/relmapper.c:898 #, c-format msgid "could not close file \"%s\": %m" @@ -69,29 +69,29 @@ msgstr "" "されるものと一致しないようです。この場合以下の結果は不正確になります。また、\n" "このPostgreSQLはこのデータディレクトリと互換性がなくなります。" -#: ../common/controldata_utils.c:227 ../common/controldata_utils.c:233 ../common/file_utils.c:227 ../common/file_utils.c:286 ../common/file_utils.c:360 access/heap/rewriteheap.c:1264 access/transam/timeline.c:111 access/transam/timeline.c:251 access/transam/timeline.c:348 access/transam/twophase.c:1285 access/transam/xlog.c:3331 access/transam/xlog.c:3487 access/transam/xlog.c:3531 access/transam/xlog.c:3729 access/transam/xlog.c:3814 access/transam/xlog.c:3917 -#: access/transam/xlog.c:4810 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:3612 replication/logical/reorderbuffer.c:4163 replication/logical/reorderbuffer.c:4939 replication/logical/snapbuild.c:1736 replication/logical/snapbuild.c:1843 replication/slot.c:1699 replication/walsender.c:518 replication/walsender.c:2563 -#: storage/file/copydir.c:161 storage/file/fd.c:713 storage/file/fd.c:3306 storage/file/fd.c:3524 storage/file/fd.c:3611 storage/smgr/md.c:506 utils/cache/relmapper.c:724 utils/cache/relmapper.c:842 utils/error/elog.c:1958 utils/init/miscinit.c:1359 utils/init/miscinit.c:1493 utils/init/miscinit.c:1570 utils/misc/guc.c:8643 utils/misc/guc.c:8675 +#: ../common/controldata_utils.c:227 ../common/controldata_utils.c:233 ../common/file_utils.c:227 ../common/file_utils.c:286 ../common/file_utils.c:360 access/heap/rewriteheap.c:1264 access/transam/timeline.c:111 access/transam/timeline.c:251 access/transam/timeline.c:348 access/transam/twophase.c:1285 access/transam/xlog.c:3331 access/transam/xlog.c:3487 access/transam/xlog.c:3531 access/transam/xlog.c:3726 access/transam/xlog.c:3811 access/transam/xlog.c:3914 +#: access/transam/xlog.c:4807 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:3612 replication/logical/reorderbuffer.c:4163 replication/logical/reorderbuffer.c:4939 replication/logical/snapbuild.c:1736 replication/logical/snapbuild.c:1843 replication/slot.c:1699 replication/walsender.c:518 replication/walsender.c:2563 +#: storage/file/copydir.c:161 storage/file/fd.c:713 storage/file/fd.c:3306 storage/file/fd.c:3524 storage/file/fd.c:3611 storage/smgr/md.c:506 utils/cache/relmapper.c:724 utils/cache/relmapper.c:842 utils/error/elog.c:1958 utils/init/miscinit.c:1403 utils/init/miscinit.c:1537 utils/init/miscinit.c:1614 utils/misc/guc.c:8682 utils/misc/guc.c:8714 #, c-format msgid "could not open file \"%s\": %m" msgstr "ファイル\"%s\"をオープンできませんでした: %m" -#: ../common/controldata_utils.c:251 ../common/controldata_utils.c:254 access/transam/twophase.c:1726 access/transam/twophase.c:1735 access/transam/xlog.c:11422 access/transam/xlog.c:11460 access/transam/xlog.c:11873 access/transam/xlogfuncs.c:782 postmaster/postmaster.c:5684 postmaster/syslogger.c:1499 postmaster/syslogger.c:1512 utils/cache/relmapper.c:876 +#: ../common/controldata_utils.c:251 ../common/controldata_utils.c:254 access/transam/twophase.c:1726 access/transam/twophase.c:1735 access/transam/xlog.c:11419 access/transam/xlog.c:11457 access/transam/xlog.c:11870 access/transam/xlogfuncs.c:782 postmaster/postmaster.c:5686 postmaster/syslogger.c:1499 postmaster/syslogger.c:1512 utils/cache/relmapper.c:876 #, c-format msgid "could not write file \"%s\": %m" msgstr "ファイル\"%s\"を書き出せませんでした: %m" -#: ../common/controldata_utils.c:269 ../common/controldata_utils.c:275 ../common/file_utils.c:298 ../common/file_utils.c:368 access/heap/rewriteheap.c:960 access/heap/rewriteheap.c:1172 access/heap/rewriteheap.c:1275 access/transam/timeline.c:432 access/transam/timeline.c:510 access/transam/twophase.c:1747 access/transam/xlog.c:3438 access/transam/xlog.c:3610 access/transam/xlog.c:4783 access/transam/xlog.c:10905 access/transam/xlog.c:10946 -#: replication/logical/snapbuild.c:1774 replication/slot.c:1604 replication/slot.c:1709 storage/file/fd.c:730 storage/file/fd.c:3632 storage/smgr/md.c:954 storage/smgr/md.c:995 storage/sync/sync.c:454 utils/cache/relmapper.c:891 utils/misc/guc.c:8430 +#: ../common/controldata_utils.c:269 ../common/controldata_utils.c:275 ../common/file_utils.c:298 ../common/file_utils.c:368 access/heap/rewriteheap.c:960 access/heap/rewriteheap.c:1172 access/heap/rewriteheap.c:1275 access/transam/timeline.c:432 access/transam/timeline.c:506 access/transam/twophase.c:1747 access/transam/xlog.c:3438 access/transam/xlog.c:3610 access/transam/xlog.c:4780 access/transam/xlog.c:10902 access/transam/xlog.c:10943 +#: replication/logical/snapbuild.c:1774 replication/slot.c:1604 replication/slot.c:1709 storage/file/fd.c:730 storage/file/fd.c:3632 storage/smgr/md.c:956 storage/smgr/md.c:997 storage/sync/sync.c:454 utils/cache/relmapper.c:891 utils/misc/guc.c:8469 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "ファイル\"%s\"をfsyncできませんでした: %m" -#: ../common/cryptohash_openssl.c:104 ../common/exec.c:560 ../common/exec.c:605 ../common/exec.c:697 ../common/hmac_openssl.c:101 ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:630 ../port/path.c:668 ../port/path.c:685 access/transam/twophase.c:1399 access/transam/xlog.c:6695 lib/dshash.c:245 libpq/auth.c:1489 libpq/auth.c:1557 libpq/auth.c:2115 libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:349 postmaster/bgworker.c:948 -#: postmaster/postmaster.c:2550 postmaster/postmaster.c:4208 postmaster/postmaster.c:5609 postmaster/postmaster.c:5973 replication/libpqwalreceiver/libpqwalreceiver.c:287 replication/logical/logical.c:206 replication/walsender.c:592 storage/buffer/localbuf.c:442 storage/file/fd.c:888 storage/file/fd.c:1360 storage/file/fd.c:1521 storage/file/fd.c:2329 storage/ipc/procarray.c:1472 storage/ipc/procarray.c:2293 storage/ipc/procarray.c:2300 -#: storage/ipc/procarray.c:2805 storage/ipc/procarray.c:3482 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:5061 utils/misc/guc.c:5077 utils/misc/guc.c:5090 utils/misc/guc.c:8408 utils/misc/tzparser.c:476 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:702 utils/mmgr/dsa.c:724 utils/mmgr/dsa.c:805 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:1088 utils/mmgr/mcxt.c:1119 utils/mmgr/mcxt.c:1155 utils/mmgr/mcxt.c:1207 utils/mmgr/mcxt.c:1242 -#: utils/mmgr/mcxt.c:1277 utils/mmgr/slab.c:238 +#: ../common/cryptohash_openssl.c:104 ../common/exec.c:560 ../common/exec.c:605 ../common/exec.c:697 ../common/hmac_openssl.c:101 ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:707 ../port/path.c:745 ../port/path.c:762 access/transam/twophase.c:1399 access/transam/xlog.c:6692 lib/dshash.c:245 libpq/auth.c:1489 libpq/auth.c:1557 libpq/auth.c:2115 libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:349 postmaster/bgworker.c:948 +#: postmaster/postmaster.c:2552 postmaster/postmaster.c:4209 postmaster/postmaster.c:5611 postmaster/postmaster.c:5975 replication/libpqwalreceiver/libpqwalreceiver.c:287 replication/logical/logical.c:206 replication/walsender.c:592 storage/buffer/localbuf.c:442 storage/file/fd.c:888 storage/file/fd.c:1360 storage/file/fd.c:1521 storage/file/fd.c:2329 storage/ipc/procarray.c:1472 storage/ipc/procarray.c:2293 storage/ipc/procarray.c:2300 +#: storage/ipc/procarray.c:2805 storage/ipc/procarray.c:3482 tcop/postgres.c:3655 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:5061 utils/misc/guc.c:5077 utils/misc/guc.c:5090 utils/misc/guc.c:8447 utils/misc/tzparser.c:476 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:702 utils/mmgr/dsa.c:724 utils/mmgr/dsa.c:805 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:1088 utils/mmgr/mcxt.c:1119 utils/mmgr/mcxt.c:1155 utils/mmgr/mcxt.c:1207 +#: utils/mmgr/mcxt.c:1242 utils/mmgr/mcxt.c:1277 utils/mmgr/slab.c:238 #, c-format msgid "out of memory" msgstr "メモリ不足" @@ -116,12 +116,12 @@ msgstr "バイナリ\"%s\"を読み取れませんでした" msgid "could not find a \"%s\" to execute" msgstr "実行対象の\"%s\"が見つかりませんでした" -#: ../common/exec.c:282 ../common/exec.c:321 utils/init/miscinit.c:424 +#: ../common/exec.c:282 ../common/exec.c:321 utils/init/miscinit.c:425 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "ディレクトリ\"%s\"に移動できませんでした: %m" -#: ../common/exec.c:299 access/transam/xlog.c:11296 replication/basebackup.c:1428 utils/adt/misc.c:362 +#: ../common/exec.c:299 access/transam/xlog.c:11293 replication/basebackup.c:1428 utils/adt/misc.c:362 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "シンボリックリンク\"%s\"を読めませんでした: %m" @@ -131,7 +131,7 @@ msgstr "シンボリックリンク\"%s\"を読めませんでした: %m" msgid "%s() failed: %m" msgstr "%s() が失敗しました: %m" -#: ../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:208 utils/misc/ps_status.c:216 utils/misc/ps_status.c:246 utils/misc/ps_status.c:254 +#: ../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:709 ../port/path.c:747 ../port/path.c:764 utils/misc/ps_status.c:208 utils/misc/ps_status.c:216 utils/misc/ps_status.c:246 utils/misc/ps_status.c:254 #, c-format msgid "out of memory\n" msgstr "メモリ不足\n" @@ -141,13 +141,13 @@ msgstr "メモリ不足\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "nullポインタは複製できません (内部エラー)\n" -#: ../common/file_utils.c:86 ../common/file_utils.c:446 ../common/file_utils.c:450 access/transam/twophase.c:1297 access/transam/xlog.c:11398 access/transam/xlog.c:11436 access/transam/xlog.c:11653 access/transam/xlogarchive.c:110 access/transam/xlogarchive.c:227 commands/copyfrom.c:1536 commands/copyto.c:730 commands/extension.c:3471 commands/tablespace.c:805 commands/tablespace.c:894 guc-file.l:1063 replication/basebackup.c:439 replication/basebackup.c:622 -#: replication/basebackup.c:698 replication/logical/snapbuild.c:1653 storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1871 storage/file/fd.c:1957 storage/file/fd.c:3157 storage/file/fd.c:3360 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 utils/adt/misc.c:348 +#: ../common/file_utils.c:86 ../common/file_utils.c:446 ../common/file_utils.c:450 access/transam/twophase.c:1297 access/transam/xlog.c:11395 access/transam/xlog.c:11433 access/transam/xlog.c:11650 access/transam/xlogarchive.c:110 access/transam/xlogarchive.c:227 commands/copyfrom.c:1536 commands/copyto.c:730 commands/extension.c:3471 commands/tablespace.c:805 commands/tablespace.c:894 guc-file.l:1063 postmaster/pgarch.c:696 replication/basebackup.c:439 +#: replication/basebackup.c:622 replication/basebackup.c:698 replication/logical/snapbuild.c:1653 storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1871 storage/file/fd.c:1957 storage/file/fd.c:3157 storage/file/fd.c:3360 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 utils/adt/misc.c:348 #, c-format msgid "could not stat file \"%s\": %m" msgstr "ファイル\"%s\"のstatに失敗しました: %m" -#: ../common/file_utils.c:161 ../common/pgfnames.c:48 commands/tablespace.c:729 commands/tablespace.c:739 postmaster/postmaster.c:1518 storage/file/fd.c:2732 storage/file/reinit.c:122 utils/adt/misc.c:263 utils/misc/tzparser.c:338 +#: ../common/file_utils.c:161 ../common/pgfnames.c:48 commands/tablespace.c:729 commands/tablespace.c:739 postmaster/postmaster.c:1520 storage/file/fd.c:2732 storage/file/reinit.c:122 utils/adt/misc.c:263 utils/misc/tzparser.c:338 #, c-format msgid "could not open directory \"%s\": %m" msgstr "ディレクトリ\"%s\"をオープンできませんでした: %m" @@ -437,7 +437,7 @@ msgstr "再試行を30秒間続けます。" msgid "You might have antivirus, backup, or similar software interfering with the database system." msgstr "データベースシステムに干渉するアンチウィルス、バックアップといったソフトウェアが存在する可能性があります。" -#: ../port/path.c:654 +#: ../port/path.c:731 #, c-format msgid "could not get current working directory: %s\n" msgstr "現在の作業ディレクトリを取得できませんでした: %s\n" @@ -467,7 +467,7 @@ msgstr "アクセストークンのメンバーシップを確認できません msgid "request for BRIN range summarization for index \"%s\" page %u was not recorded" msgstr "インデックス\"%s\" ページ%uのBRIN範囲要約のリクエストは登録されていません" -#: access/brin/brin.c:1036 access/brin/brin.c:1146 access/gin/ginfast.c:1042 access/transam/xlog.c:11067 access/transam/xlog.c:11604 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:1036 access/brin/brin.c:1146 access/gin/ginfast.c:1042 access/transam/xlog.c:11064 access/transam/xlog.c:11601 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 "リカバリは現在進行中です" @@ -630,7 +630,7 @@ msgstr "RESETにはパラメータの値を含めてはいけません" msgid "unrecognized parameter namespace \"%s\"" msgstr "認識できないパラメータ namaspace \"%s\"" -#: access/common/reloptions.c:1294 utils/misc/guc.c:12571 +#: access/common/reloptions.c:1294 utils/misc/guc.c:12604 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "WITH OIDSと定義されたテーブルはサポートされません" @@ -740,7 +740,7 @@ msgstr "古いGINインデックスはインデックス全体のスキャンや msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "これを修復するには REINDEX INDEX \"%s\" をおこなってください。" -#: access/gin/ginutil.c:145 executor/execExpr.c:2169 utils/adt/arrayfuncs.c:3873 utils/adt/arrayfuncs.c:6541 utils/adt/rowtypes.c:957 +#: access/gin/ginutil.c:145 executor/execExpr.c:2177 utils/adt/arrayfuncs.c:3873 utils/adt/arrayfuncs.c:6541 utils/adt/rowtypes.c:957 #, c-format msgid "could not identify a comparison function for type %s" msgstr "%s型の比較関数が見つかりません" @@ -815,7 +815,7 @@ msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は演算子%3$s msgid "could not determine which collation to use for string hashing" msgstr "文字列のハッシュ値計算で使用する照合順序を特定できませんでした" -#: access/hash/hashfunc.c:279 access/hash/hashfunc.c:336 catalog/heap.c:714 catalog/heap.c:720 commands/createas.c:206 commands/createas.c:515 commands/indexcmds.c:1964 commands/tablecmds.c:17155 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:1004 utils/adt/varchar.c:733 utils/adt/varchar.c:994 utils/adt/varchar.c:1055 +#: access/hash/hashfunc.c:279 access/hash/hashfunc.c:336 catalog/heap.c:714 catalog/heap.c:720 commands/createas.c:206 commands/createas.c:515 commands/indexcmds.c:1971 commands/tablecmds.c:17155 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:1004 utils/adt/varchar.c:733 utils/adt/varchar.c:994 utils/adt/varchar.c:1055 #: utils/adt/varlena.c:1517 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." @@ -866,37 +866,37 @@ msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は演算子%3$s msgid "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は異なる型間に対応する演算子を含んでいません" -#: access/heap/heapam.c:2298 +#: access/heap/heapam.c:2299 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "並列ワーカーではタプルの挿入はできません" -#: access/heap/heapam.c:2769 +#: access/heap/heapam.c:2770 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "並列処理中はタプルの削除はできません" -#: access/heap/heapam.c:2815 +#: access/heap/heapam.c:2816 #, c-format msgid "attempted to delete invisible tuple" msgstr "不可視のタプルを削除しようとしました" -#: access/heap/heapam.c:3261 access/heap/heapam.c:6486 access/index/genam.c:816 +#: access/heap/heapam.c:3262 access/heap/heapam.c:6529 access/index/genam.c:816 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "並列処理中はタプルの更新はできません" -#: access/heap/heapam.c:3406 +#: access/heap/heapam.c:3449 #, c-format msgid "attempted to update invisible tuple" msgstr "不可視のタプルを更新しようとしました" -#: access/heap/heapam.c:4893 access/heap/heapam.c:4931 access/heap/heapam.c:5196 access/heap/heapam_handler.c:457 +#: access/heap/heapam.c:4936 access/heap/heapam.c:4974 access/heap/heapam.c:5239 access/heap/heapam_handler.c:457 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "リレーション\"%s\"の行ロックを取得できませんでした" -#: access/heap/heapam.c:6299 commands/trigger.c:3122 executor/nodeModifyTable.c:1968 executor/nodeModifyTable.c:2058 +#: access/heap/heapam.c:6342 commands/trigger.c:3122 executor/nodeModifyTable.c:1968 executor/nodeModifyTable.c:2058 #, c-format msgid "tuple to be updated was already modified by an operation triggered by the current command" msgstr "更新対象のタプルはすでに現在のコマンドによって発行された操作によって変更されています" @@ -916,7 +916,7 @@ msgstr "行が大きすぎます: サイズは%zu、上限は%zu" msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "ファイル\"%1$s\"に書き込めませんでした、%3$dバイト中%2$dバイト書き込みました: %m" -#: access/heap/rewriteheap.c:1013 access/heap/rewriteheap.c:1131 access/transam/timeline.c:329 access/transam/timeline.c:485 access/transam/xlog.c:3354 access/transam/xlog.c:3545 access/transam/xlog.c:4762 access/transam/xlog.c:11413 access/transam/xlog.c:11451 access/transam/xlog.c:11856 access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4633 postmaster/postmaster.c:5671 replication/logical/origin.c:587 replication/slot.c:1551 storage/file/copydir.c:167 +#: access/heap/rewriteheap.c:1013 access/heap/rewriteheap.c:1131 access/transam/timeline.c:329 access/transam/timeline.c:481 access/transam/xlog.c:3354 access/transam/xlog.c:3545 access/transam/xlog.c:4759 access/transam/xlog.c:11410 access/transam/xlog.c:11448 access/transam/xlog.c:11853 access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4634 postmaster/postmaster.c:5673 replication/logical/origin.c:587 replication/slot.c:1551 storage/file/copydir.c:167 #: storage/smgr/md.c:218 utils/time/snapmgr.c:1261 #, c-format msgid "could not create file \"%s\": %m" @@ -927,8 +927,8 @@ msgstr "ファイル\"%s\"を作成できませんでした: %m" msgid "could not truncate file \"%s\" to %u: %m" msgstr "ファイル\"%s\"を%uバイトに切り詰められませんでした: %m" -#: access/heap/rewriteheap.c:1159 access/transam/timeline.c:384 access/transam/timeline.c:424 access/transam/timeline.c:502 access/transam/xlog.c:3426 access/transam/xlog.c:3601 access/transam/xlog.c:4774 postmaster/postmaster.c:4643 postmaster/postmaster.c:4653 replication/logical/origin.c:599 replication/logical/origin.c:641 replication/logical/origin.c:660 replication/logical/snapbuild.c:1750 replication/slot.c:1586 storage/file/buffile.c:506 -#: storage/file/copydir.c:207 utils/init/miscinit.c:1434 utils/init/miscinit.c:1445 utils/init/miscinit.c:1453 utils/misc/guc.c:8391 utils/misc/guc.c:8422 utils/misc/guc.c:10349 utils/misc/guc.c:10363 utils/time/snapmgr.c:1266 utils/time/snapmgr.c:1273 +#: access/heap/rewriteheap.c:1159 access/transam/timeline.c:384 access/transam/timeline.c:424 access/transam/timeline.c:498 access/transam/xlog.c:3426 access/transam/xlog.c:3601 access/transam/xlog.c:4771 postmaster/postmaster.c:4644 postmaster/postmaster.c:4654 replication/logical/origin.c:599 replication/logical/origin.c:641 replication/logical/origin.c:660 replication/logical/snapbuild.c:1750 replication/slot.c:1586 storage/file/buffile.c:506 +#: storage/file/copydir.c:207 utils/init/miscinit.c:1478 utils/init/miscinit.c:1489 utils/init/miscinit.c:1497 utils/misc/guc.c:8430 utils/misc/guc.c:8461 utils/misc/guc.c:10388 utils/misc/guc.c:10402 utils/time/snapmgr.c:1266 utils/time/snapmgr.c:1273 #, c-format msgid "could not write to file \"%s\": %m" msgstr "ファイル\"%s\"に書き込めませんでした: %m" @@ -1059,7 +1059,7 @@ msgid_plural "%u frozen pages.\n" msgstr[0] "凍結のため%uページがスキップされました。\n" msgstr[1] "凍結のため%uページがスキップされました。\n" -#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4128 commands/indexcmds.c:4147 +#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4135 commands/indexcmds.c:4154 #, c-format msgid "%s." msgstr "%s。" @@ -1215,7 +1215,7 @@ msgstr "システムカタログのスキャン中にトランザクションが msgid "cannot access index \"%s\" while it is being reindexed" msgstr "再作成中であるためインデックス\"%s\"にアクセスできません" -#: access/index/indexam.c:208 catalog/objectaddress.c:1355 commands/indexcmds.c:2792 commands/tablecmds.c:267 commands/tablecmds.c:291 commands/tablecmds.c:16851 commands/tablecmds.c:18645 +#: access/index/indexam.c:208 catalog/objectaddress.c:1355 commands/indexcmds.c:2799 commands/tablecmds.c:267 commands/tablecmds.c:291 commands/tablecmds.c:16851 commands/tablecmds.c:18645 #, c-format msgid "\"%s\" is not an index" msgstr "\"%s\"はインデックスではありません" @@ -1324,7 +1324,7 @@ msgstr "tid (%u, %u) はリレーション\"%s\"に対して妥当ではあり msgid "%s cannot be empty." msgstr "%sは空にはできません。" -#: access/table/tableamapi.c:122 utils/misc/guc.c:12495 +#: access/table/tableamapi.c:122 utils/misc/guc.c:12528 #, c-format msgid "%s is too long (maximum %d characters)." msgstr "%sが長過ぎます(最大%d文字)。" @@ -1470,36 +1470,36 @@ msgstr "マルチトランザクション%uがディスク上に存在しない msgid "invalid MultiXactId: %u" msgstr "不正なMultiXactId: %u" -#: access/transam/parallel.c:731 access/transam/parallel.c:850 +#: access/transam/parallel.c:737 access/transam/parallel.c:856 #, c-format msgid "parallel worker failed to initialize" msgstr "パラレルワーカーの初期化に失敗しました" -#: access/transam/parallel.c:732 access/transam/parallel.c:851 +#: access/transam/parallel.c:738 access/transam/parallel.c:857 #, c-format msgid "More details may be available in the server log." msgstr "詳細な情報がサーバーログにあるかもしれません。" -#: access/transam/parallel.c:912 +#: access/transam/parallel.c:918 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "並列処理中にpostmasterが終了しました" -#: access/transam/parallel.c:1099 +#: access/transam/parallel.c:1105 #, c-format msgid "lost connection to parallel worker" msgstr "パラレルワーカーへの接続を失いました" -#: access/transam/parallel.c:1165 access/transam/parallel.c:1167 +#: access/transam/parallel.c:1171 access/transam/parallel.c:1173 msgid "parallel worker" msgstr "パラレルワーカー" -#: access/transam/parallel.c:1320 +#: access/transam/parallel.c:1326 #, c-format msgid "could not map dynamic shared memory segment" msgstr "動的共有メモリセグメントをマップできませんでした" -#: access/transam/parallel.c:1325 +#: access/transam/parallel.c:1331 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "動的共有メモリセグメントのマジックナンバーが不正です" @@ -1594,7 +1594,7 @@ msgstr "履歴ファイル\"%s\"内に不正なデータがありました" msgid "Timeline IDs must be less than child timeline's ID." msgstr "タイムラインIDは子のタイムラインIDより小さくなければなりません。" -#: access/transam/timeline.c:597 +#: access/transam/timeline.c:589 #, c-format msgid "requested timeline %u is not in this server's history" msgstr "要求されたタイムライン%uがサーバーの履歴上に存在しません" @@ -1696,7 +1696,7 @@ msgstr "ファイル\"%s\"内に格納されているサイズが不正です" msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "算出されたCRCチェックサムがファイル\"%s\"に格納されている値と一致しません" -#: access/transam/twophase.c:1400 access/transam/xlog.c:6696 +#: access/transam/twophase.c:1400 access/transam/xlog.c:6693 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "WALリーダの割り当てに中に失敗しました。" @@ -1932,424 +1932,424 @@ msgstr "ログファイル%sのオフセット%uに長さ%zuの書き込みが msgid "This is known to fail occasionally during archive recovery, where it is harmless." msgstr "これはアーカイブリカバリ中にたまに起きますが、その場合は無害であることがわかっています。" -#: access/transam/xlog.c:4017 access/transam/xlogutils.c:798 replication/walsender.c:2557 +#: access/transam/xlog.c:4014 access/transam/xlogutils.c:798 replication/walsender.c:2557 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "要求された WAL セグメント %s はすでに削除されています" -#: access/transam/xlog.c:4292 +#: access/transam/xlog.c:4289 #, c-format msgid "could not rename file \"%s\": %m" msgstr "ファイル\"%s\"の名前を変更できませんでした: %m" -#: access/transam/xlog.c:4334 access/transam/xlog.c:4344 +#: access/transam/xlog.c:4331 access/transam/xlog.c:4341 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "WALディレクトリ\"%s\"は存在しません" -#: access/transam/xlog.c:4350 +#: access/transam/xlog.c:4347 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "なかったWALディレクトリ\"%s\"を作成しています" -#: access/transam/xlog.c:4353 commands/dbcommands.c:2295 +#: access/transam/xlog.c:4350 commands/dbcommands.c:2295 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "なかったディレクトリ\"%s\"の作成に失敗しました: %m" -#: access/transam/xlog.c:4475 +#: access/transam/xlog.c:4472 #, 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:4613 +#: access/transam/xlog.c:4610 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "新しいタイムライン%uはデータベースシステムのタイムライン%uの子ではありません" -#: access/transam/xlog.c:4627 +#: access/transam/xlog.c:4624 #, 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:4646 +#: access/transam/xlog.c:4643 #, c-format msgid "new target timeline is %u" msgstr "新しい目標タイムラインは%uです" -#: access/transam/xlog.c:4682 +#: access/transam/xlog.c:4679 #, c-format msgid "could not generate secret authorization token" msgstr "秘密の認証トークンを生成できませんでした" -#: access/transam/xlog.c:4841 access/transam/xlog.c:4850 access/transam/xlog.c:4874 access/transam/xlog.c:4881 access/transam/xlog.c:4888 access/transam/xlog.c:4893 access/transam/xlog.c:4900 access/transam/xlog.c:4907 access/transam/xlog.c:4914 access/transam/xlog.c:4921 access/transam/xlog.c:4928 access/transam/xlog.c:4935 access/transam/xlog.c:4944 access/transam/xlog.c:4951 utils/init/miscinit.c:1591 +#: access/transam/xlog.c:4838 access/transam/xlog.c:4847 access/transam/xlog.c:4871 access/transam/xlog.c:4878 access/transam/xlog.c:4885 access/transam/xlog.c:4890 access/transam/xlog.c:4897 access/transam/xlog.c:4904 access/transam/xlog.c:4911 access/transam/xlog.c:4918 access/transam/xlog.c:4925 access/transam/xlog.c:4932 access/transam/xlog.c:4941 access/transam/xlog.c:4948 utils/init/miscinit.c:1635 #, c-format msgid "database files are incompatible with server" msgstr "データベースファイルがサーバーと互換性がありません" -#: access/transam/xlog.c:4842 +#: access/transam/xlog.c:4839 #, 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:4846 +#: access/transam/xlog.c:4843 #, 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:4851 +#: access/transam/xlog.c:4848 #, 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:4854 access/transam/xlog.c:4878 access/transam/xlog.c:4885 access/transam/xlog.c:4890 +#: access/transam/xlog.c:4851 access/transam/xlog.c:4875 access/transam/xlog.c:4882 access/transam/xlog.c:4887 #, c-format msgid "It looks like you need to initdb." msgstr "initdbが必要のようです。" -#: access/transam/xlog.c:4865 +#: access/transam/xlog.c:4862 #, c-format msgid "incorrect checksum in control file" msgstr "制御ファイル内のチェックサムが不正です" -#: access/transam/xlog.c:4875 +#: access/transam/xlog.c:4872 #, 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:4882 +#: access/transam/xlog.c:4879 #, 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:4889 +#: access/transam/xlog.c:4886 #, c-format msgid "The database cluster appears to use a different floating-point number format than the server executable." msgstr "データベースクラスタはサーバー実行ファイルと異なる浮動小数点書式を使用しているようです。" -#: access/transam/xlog.c:4894 +#: access/transam/xlog.c:4891 #, 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:4897 access/transam/xlog.c:4904 access/transam/xlog.c:4911 access/transam/xlog.c:4918 access/transam/xlog.c:4925 access/transam/xlog.c:4932 access/transam/xlog.c:4939 access/transam/xlog.c:4947 access/transam/xlog.c:4954 +#: access/transam/xlog.c:4894 access/transam/xlog.c:4901 access/transam/xlog.c:4908 access/transam/xlog.c:4915 access/transam/xlog.c:4922 access/transam/xlog.c:4929 access/transam/xlog.c:4936 access/transam/xlog.c:4944 access/transam/xlog.c:4951 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "再コンパイルもしくは initdb が必要そうです。" -#: access/transam/xlog.c:4901 +#: access/transam/xlog.c:4898 #, 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:4908 +#: access/transam/xlog.c:4905 #, 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:4915 +#: access/transam/xlog.c:4912 #, 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:4922 +#: access/transam/xlog.c:4919 #, 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:4929 +#: access/transam/xlog.c:4926 #, 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:4936 +#: access/transam/xlog.c:4933 #, 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:4945 +#: access/transam/xlog.c:4942 #, 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:4952 +#: access/transam/xlog.c:4949 #, 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:4961 +#: access/transam/xlog.c:4958 #, 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:4973 +#: access/transam/xlog.c:4970 #, 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:4977 +#: access/transam/xlog.c:4974 #, 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:5411 +#: access/transam/xlog.c:5408 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "ブートストラップの先行書き込みログファイルに書き込めませんでした: %m" -#: access/transam/xlog.c:5419 +#: access/transam/xlog.c:5416 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "ブートストラップの先行書き込みログファイルをfsyncできませんでした: %m" -#: access/transam/xlog.c:5425 +#: access/transam/xlog.c:5422 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "ブートストラップの先行書き込みログファイルをクローズできませんでした: %m" -#: access/transam/xlog.c:5486 +#: access/transam/xlog.c:5483 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "リカバリコマンドファイル \"%s\"の使用はサポートされません" -#: access/transam/xlog.c:5551 +#: access/transam/xlog.c:5548 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "スタンバイモードはシングルユーザーサーバーではサポートされません" -#: access/transam/xlog.c:5568 +#: access/transam/xlog.c:5565 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "primary_conninfo と restore_command のどちらも指定されていません" -#: access/transam/xlog.c:5569 +#: access/transam/xlog.c:5566 #, 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:5577 +#: access/transam/xlog.c:5574 #, c-format msgid "must specify restore_command when standby mode is not enabled" msgstr "スタンバイモードを有効にしない場合は、restore_command の指定が必要です" -#: access/transam/xlog.c:5615 +#: access/transam/xlog.c:5612 #, c-format msgid "recovery target timeline %u does not exist" msgstr "リカバリ目標タイムライン%uが存在しません" -#: access/transam/xlog.c:5737 +#: access/transam/xlog.c:5734 #, c-format msgid "archive recovery complete" msgstr "アーカイブリカバリが完了しました" -#: access/transam/xlog.c:5803 access/transam/xlog.c:6079 +#: access/transam/xlog.c:5800 access/transam/xlog.c:6076 #, c-format msgid "recovery stopping after reaching consistency" msgstr "リカバリ処理は一貫性確保後に停止します" -#: access/transam/xlog.c:5824 +#: access/transam/xlog.c:5821 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "リカバリ処理はWAL位置(LSN)\"%X/%X\"の前で停止します" -#: access/transam/xlog.c:5914 +#: access/transam/xlog.c:5911 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "リカバリ処理はトランザクション%uのコミット、時刻%sの前に停止します" -#: access/transam/xlog.c:5921 +#: access/transam/xlog.c:5918 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "リカバリ処理はトランザクション%uのアボート、時刻%sの前に停止します" -#: access/transam/xlog.c:5974 +#: access/transam/xlog.c:5971 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "リカバリ処理は復元ポイント\"%s\"、時刻%s に停止します" -#: access/transam/xlog.c:5992 +#: access/transam/xlog.c:5989 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "リカバリ処理はWAL位置(LSN)\"%X/%X\"の後で停止します" -#: access/transam/xlog.c:6059 +#: access/transam/xlog.c:6056 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "リカバリ処理はトランザクション%uのコミット、時刻%sの後に停止します" -#: access/transam/xlog.c:6067 +#: access/transam/xlog.c:6064 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "リカバリ処理はトランザクション%uのアボート、時刻%sの後に停止します" -#: access/transam/xlog.c:6112 +#: access/transam/xlog.c:6109 #, c-format msgid "pausing at the end of recovery" msgstr "リカバリ完了位置で一時停止しています" -#: access/transam/xlog.c:6113 +#: access/transam/xlog.c:6110 #, c-format msgid "Execute pg_wal_replay_resume() to promote." msgstr "再開するには pg_wal_replay_resume() を実行してください" -#: access/transam/xlog.c:6116 access/transam/xlog.c:6398 +#: access/transam/xlog.c:6113 access/transam/xlog.c:6395 #, c-format msgid "recovery has paused" msgstr "リカバリは一時停止中です" -#: access/transam/xlog.c:6117 +#: access/transam/xlog.c:6114 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "再開するには pg_xlog_replay_resume() を実行してください" -#: access/transam/xlog.c:6389 +#: access/transam/xlog.c:6386 #, c-format msgid "hot standby is not possible because of insufficient parameter settings" msgstr "パラメータ設定値が十分でないため、ホットスタンバイを使用できません" -#: access/transam/xlog.c:6390 access/transam/xlog.c:6417 access/transam/xlog.c:6447 +#: access/transam/xlog.c:6387 access/transam/xlog.c:6414 access/transam/xlog.c:6444 #, c-format msgid "%s = %d is a lower setting than on the primary server, where its value was %d." msgstr "%s = %d はプライマリサーバーでの設定値%dより小さいです。" -#: access/transam/xlog.c:6399 +#: access/transam/xlog.c:6396 #, c-format msgid "If recovery is unpaused, the server will shut down." msgstr "一時停止が解除されると、サーバーはシャットダウンします。" -#: access/transam/xlog.c:6400 +#: access/transam/xlog.c:6397 #, c-format msgid "You can then restart the server after making the necessary configuration changes." msgstr "その後必要な設定変更を行い、サーバーを再起動できます。" -#: access/transam/xlog.c:6411 +#: access/transam/xlog.c:6408 #, c-format msgid "promotion is not possible because of insufficient parameter settings" msgstr "パラメータ設定値が十分でないため昇格できません" -#: access/transam/xlog.c:6421 +#: access/transam/xlog.c:6418 #, c-format msgid "Restart the server after making the necessary configuration changes." msgstr "必要な設定変更を行った後にサーバーを再起動してください。" -#: access/transam/xlog.c:6445 +#: access/transam/xlog.c:6442 #, c-format msgid "recovery aborted because of insufficient parameter settings" msgstr "パラメータの設定値が不足しているためリカバリを中断しました" -#: access/transam/xlog.c:6451 +#: access/transam/xlog.c:6448 #, c-format msgid "You can restart the server after making the necessary configuration changes." msgstr "必要な設定変更を行った後、再起動することができます。" -#: access/transam/xlog.c:6473 +#: access/transam/xlog.c:6470 #, c-format msgid "WAL was generated with wal_level=minimal, cannot continue recovering" msgstr "wal_level=minimal でWALが生成されました、リカバリは継続できません" -#: access/transam/xlog.c:6474 +#: access/transam/xlog.c:6471 #, c-format msgid "This happens if you temporarily set wal_level=minimal on the server." msgstr "これは一時的に wal_level=minimal にした場合に起こります。" -#: access/transam/xlog.c:6475 +#: access/transam/xlog.c:6472 #, c-format msgid "Use a backup taken after setting wal_level to higher than minimal." msgstr "wal_levelをminimalより上に設定したあとに取得されたバックアップを使用してください。" -#: access/transam/xlog.c:6544 +#: access/transam/xlog.c:6541 #, c-format msgid "control file contains invalid checkpoint location" msgstr "制御ファイル内のチェックポイント位置が不正です" -#: access/transam/xlog.c:6555 +#: access/transam/xlog.c:6552 #, c-format msgid "database system was shut down at %s" msgstr "データベースシステムは %s にシャットダウンしました" -#: access/transam/xlog.c:6561 +#: access/transam/xlog.c:6558 #, c-format msgid "database system was shut down in recovery at %s" msgstr "データベースシステムはリカバリ中 %s にシャットダウンしました" -#: access/transam/xlog.c:6567 +#: access/transam/xlog.c:6564 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "データベースシステムはシャットダウン中に中断されました; %s まで動作していたことは確認できます" -#: access/transam/xlog.c:6573 +#: access/transam/xlog.c:6570 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "データベースシステムはリカバリ中 %s に中断されました" -#: access/transam/xlog.c:6575 +#: access/transam/xlog.c:6572 #, 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:6581 +#: access/transam/xlog.c:6578 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "データベースシステムはリカバリ中ログ時刻 %s に中断されました" -#: access/transam/xlog.c:6583 +#: access/transam/xlog.c:6580 #, 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:6589 +#: access/transam/xlog.c:6586 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "データベースシステムは中断されました: %s まで動作していたことは確認できます" -#: access/transam/xlog.c:6595 +#: access/transam/xlog.c:6592 #, c-format msgid "control file contains invalid database cluster state" msgstr "制御ファイル内のデータベース・クラスタ状態が不正です" -#: access/transam/xlog.c:6652 +#: access/transam/xlog.c:6649 #, c-format msgid "entering standby mode" msgstr "スタンバイモードに入ります" -#: access/transam/xlog.c:6655 +#: access/transam/xlog.c:6652 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "XID%uまでのポイントインタイムリカバリを開始します" -#: access/transam/xlog.c:6659 +#: access/transam/xlog.c:6656 #, c-format msgid "starting point-in-time recovery to %s" msgstr "%sまでのポイントインタイムリカバリを開始します" -#: access/transam/xlog.c:6663 +#: access/transam/xlog.c:6660 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "\"%s\"までのポイントインタイムリカバリを開始します" -#: access/transam/xlog.c:6667 +#: access/transam/xlog.c:6664 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "WAL位置(LSN) \"%X/%X\"までのポイントインタイムリカバリを開始します" -#: access/transam/xlog.c:6671 +#: access/transam/xlog.c:6668 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "最も古い一貫性確保点までのポイントインタイムリカバリを開始します" -#: access/transam/xlog.c:6674 +#: access/transam/xlog.c:6671 #, c-format msgid "starting archive recovery" msgstr "アーカイブリカバリを開始しています" -#: access/transam/xlog.c:6748 +#: access/transam/xlog.c:6745 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "チェックポイントレコードが参照している redo 位置を見つけられませんでした" -#: access/transam/xlog.c:6749 access/transam/xlog.c:6759 +#: access/transam/xlog.c:6746 access/transam/xlog.c:6756 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" @@ -2360,475 +2360,475 @@ msgstr "" "バックアップからの復旧でなければ、\"%s/backup_label\"の削除を試みてください。.\n" "バックアップから復旧で\"%s/backup_label\"を削除すると、クラスタは壊れた状態で復旧されることに注意してください。" -#: access/transam/xlog.c:6758 +#: access/transam/xlog.c:6755 #, c-format msgid "could not locate required checkpoint record" msgstr "必要なチェックポイントが見つかりませんでした" -#: access/transam/xlog.c:6787 commands/tablespace.c:665 +#: access/transam/xlog.c:6784 commands/tablespace.c:665 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "シンボリックリンク\"%s\"を作成できませんでした: %m" -#: access/transam/xlog.c:6819 access/transam/xlog.c:6825 +#: access/transam/xlog.c:6816 access/transam/xlog.c:6822 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "ファイル\"%2$s\"が存在しないためファイル\"%1$s\"を無視します" -#: access/transam/xlog.c:6821 access/transam/xlog.c:12389 +#: access/transam/xlog.c:6818 access/transam/xlog.c:12386 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "ファイル\"%s\"は\"%s\"にリネームされました。" -#: access/transam/xlog.c:6827 +#: access/transam/xlog.c:6824 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "ファイル\"%s\"の名前を\"%s\"に変更できませんでした: %m。" -#: access/transam/xlog.c:6878 +#: access/transam/xlog.c:6875 #, c-format msgid "could not locate a valid checkpoint record" msgstr "有効なチェックポイントが見つかりませんでした" -#: access/transam/xlog.c:6916 +#: access/transam/xlog.c:6913 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "要求されたタイムライン%uはこのサーバーの履歴からの子孫ではありません" -#: access/transam/xlog.c:6918 +#: access/transam/xlog.c:6915 #, 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:6932 +#: access/transam/xlog.c:6929 #, 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:6962 +#: access/transam/xlog.c:6959 #, c-format msgid "invalid next transaction ID" msgstr "次のトランザクションIDが不正です" -#: access/transam/xlog.c:7062 +#: access/transam/xlog.c:7059 #, c-format msgid "invalid redo in checkpoint record" msgstr "チェックポイントレコード内の不正なREDO" -#: access/transam/xlog.c:7073 +#: access/transam/xlog.c:7070 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "シャットダウン・チェックポイントにおける不正なREDOレコード" -#: access/transam/xlog.c:7113 +#: access/transam/xlog.c:7110 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "データベースシステムは正しくシャットダウンされていません; 自動リカバリを実行中" -#: access/transam/xlog.c:7117 +#: access/transam/xlog.c:7114 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "タイムライン%uから、タイムライン%uを目標としてクラッシュリカバリを開始します" -#: access/transam/xlog.c:7164 +#: access/transam/xlog.c:7161 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_labelに制御ファイルと整合しないデータが含まれます" -#: access/transam/xlog.c:7165 +#: access/transam/xlog.c:7162 #, 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:7392 +#: access/transam/xlog.c:7389 #, c-format msgid "redo starts at %X/%X" msgstr "REDOを%X/%Xから開始します" -#: access/transam/xlog.c:7617 +#: access/transam/xlog.c:7614 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "要求されたリカバリ停止ポイントは、一貫性があるリカバリポイントより前にあります" -#: access/transam/xlog.c:7655 +#: access/transam/xlog.c:7652 #, c-format msgid "redo done at %X/%X system usage: %s" msgstr "REDOが%X/%Xで終了 システム使用状況: %s" -#: access/transam/xlog.c:7661 +#: access/transam/xlog.c:7658 #, c-format msgid "last completed transaction was at log time %s" msgstr "最後に完了したトランザクションのログ時刻は%sでした" -#: access/transam/xlog.c:7670 +#: access/transam/xlog.c:7667 #, c-format msgid "redo is not required" msgstr "REDOは必要ありません" -#: access/transam/xlog.c:7682 +#: access/transam/xlog.c:7679 #, c-format msgid "recovery ended before configured recovery target was reached" msgstr "指定したリカバリターゲットに到達する前にリカバリが終了しました" -#: access/transam/xlog.c:7766 access/transam/xlog.c:7770 +#: access/transam/xlog.c:7763 access/transam/xlog.c:7767 #, c-format msgid "WAL ends before end of online backup" msgstr "オンラインバックアップの終了より前にWALが終了しました" -#: access/transam/xlog.c:7767 +#: access/transam/xlog.c:7764 #, c-format msgid "All WAL generated while online backup was taken must be available at recovery." msgstr "オンラインバックアップ中に生成されたすべてのWALがリカバリで利用可能である必要があります。" -#: access/transam/xlog.c:7771 +#: access/transam/xlog.c:7768 #, 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:7774 +#: access/transam/xlog.c:7771 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WALが一貫性があるリカバリポイントより前で終了しました" -#: access/transam/xlog.c:7809 +#: access/transam/xlog.c:7806 #, c-format msgid "selected new timeline ID: %u" msgstr "新しいタイムラインIDを選択: %u" -#: access/transam/xlog.c:8277 +#: access/transam/xlog.c:8274 #, c-format msgid "unexpected directory entry \"%s\" found in %s" msgstr "%2$s で想定外のディレクトリエントリ\"%1$s\"が見つかりました" -#: access/transam/xlog.c:8279 +#: access/transam/xlog.c:8276 #, c-format msgid "All directory entries in pg_tblspc/ should be symbolic links." msgstr "Pg_tblspc/ のすべてのディレクトリエントリは、シンボリックリンクである必要があります。" -#: access/transam/xlog.c:8280 +#: access/transam/xlog.c:8277 #, c-format msgid "Remove those directories, or set allow_in_place_tablespaces to ON transiently to let recovery complete." msgstr "これらのディレクトリを削除するか、またはallow_in_place_tablespacesを一時的にONに設定することでリカバリを完了させることができます。" -#: access/transam/xlog.c:8364 +#: access/transam/xlog.c:8361 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "%X/%X でリカバリの一貫性が確保されました" -#: access/transam/xlog.c:8573 +#: access/transam/xlog.c:8570 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "制御ファイル内の最初のチェックポイントへのリンクが不正です" -#: access/transam/xlog.c:8577 +#: access/transam/xlog.c:8574 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "backup_labelファイル内のチェックポイントへのリンクが不正です" -#: access/transam/xlog.c:8595 +#: access/transam/xlog.c:8592 #, c-format msgid "invalid primary checkpoint record" msgstr "最初のチェックポイントレコードが不正です" -#: access/transam/xlog.c:8599 +#: access/transam/xlog.c:8596 #, c-format msgid "invalid checkpoint record" msgstr "チェックポイントレコードが不正です" -#: access/transam/xlog.c:8610 +#: access/transam/xlog.c:8607 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "プライマリチェックポイントレコード内のリソースマネージャIDが不正です" -#: access/transam/xlog.c:8614 +#: access/transam/xlog.c:8611 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "チェックポイントレコード内のリソースマネージャIDがで不正です" -#: access/transam/xlog.c:8627 +#: access/transam/xlog.c:8624 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "最初のチェックポイントレコード内のxl_infoが不正です" -#: access/transam/xlog.c:8631 +#: access/transam/xlog.c:8628 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "チェックポイントレコード内のxl_infoが不正です" -#: access/transam/xlog.c:8642 +#: access/transam/xlog.c:8639 #, c-format msgid "invalid length of primary checkpoint record" msgstr "最初のチェックポイントレコード長が不正です" -#: access/transam/xlog.c:8646 +#: access/transam/xlog.c:8643 #, c-format msgid "invalid length of checkpoint record" msgstr "チェックポイントレコード長が不正です" -#: access/transam/xlog.c:8827 +#: access/transam/xlog.c:8824 #, c-format msgid "shutting down" msgstr "シャットダウン処理中" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:8866 +#: access/transam/xlog.c:8863 #, c-format msgid "restartpoint starting:%s%s%s%s%s%s%s%s" msgstr "リスタートポイント開始:%s%s%s%s%s%s%s%s" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:8878 +#: access/transam/xlog.c:8875 #, c-format msgid "checkpoint starting:%s%s%s%s%s%s%s%s" msgstr "チェックポイント開始:%s%s%s%s%s%s%s%s" -#: access/transam/xlog.c:8938 +#: access/transam/xlog.c:8935 #, 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 "リスタートポイント完了: %d個のバッファを出力 (%.1f%%); %d個のWALファイルを追加、%d個を削除、%d個を再利用; 書き出し=%ld.%03d秒, 同期=%ld.%03d秒, 全体=%ld.%03d秒; 同期したファイル=%d, 最長=%ld.%03d秒, 平均=%ld.%03d秒; 距離=%d kB, 予測=%d kB" -#: access/transam/xlog.c:8958 +#: access/transam/xlog.c:8955 #, 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 "チェックポイント完了: %d個のバッファを出力 (%.1f%%); %d個のWALファイルを追加、%d個を削除、%d個を再利用; 書き出し=%ld.%03d秒, 同期=%ld.%03d秒, 全体=%ld.%03d秒; 同期したファイル=%d, 最長=%ld.%03d秒, 平均=%ld.%03d秒; 距離=%d kB, 予測=%d kB" -#: access/transam/xlog.c:9409 +#: access/transam/xlog.c:9406 #, c-format msgid "concurrent write-ahead log activity while database system is shutting down" msgstr "データベースのシャットダウンに並行して、先行書き込みログが発生しました" -#: access/transam/xlog.c:9942 +#: access/transam/xlog.c:9939 #, c-format msgid "recovery restart point at %X/%X" msgstr "リカバリ再開ポイントは%X/%Xです" -#: access/transam/xlog.c:9944 +#: access/transam/xlog.c:9941 #, c-format msgid "Last completed transaction was at log time %s." msgstr "最後に完了したトランザクションはログ時刻 %s のものです" -#: access/transam/xlog.c:10190 +#: access/transam/xlog.c:10187 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "復帰ポイント\"%s\"が%X/%Xに作成されました" -#: access/transam/xlog.c:10335 +#: access/transam/xlog.c:10332 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" msgstr "チェックポイントレコードにおいて想定外の前回のタイムラインID %u(現在のタイムラインIDは%u)がありました" -#: access/transam/xlog.c:10344 +#: access/transam/xlog.c:10341 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "チェックポイントレコードにおいて想定外のタイムラインID %u (%uの後)がありました" -#: access/transam/xlog.c:10360 +#: access/transam/xlog.c:10357 #, 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:10435 +#: access/transam/xlog.c:10432 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "オンラインバックアップはキャンセルされ、リカバリを継続できません" -#: access/transam/xlog.c:10492 access/transam/xlog.c:10548 access/transam/xlog.c:10578 +#: access/transam/xlog.c:10489 access/transam/xlog.c:10545 access/transam/xlog.c:10575 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "チェックポイントレコードにおいて想定外のタイムラインID %u(%uのはず)がありました" -#: access/transam/xlog.c:10736 +#: access/transam/xlog.c:10733 #, c-format msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s" msgstr "%X/%Xで%sに上書きされて失われた継続行を正常にスキップしました" -#: access/transam/xlog.c:10951 +#: access/transam/xlog.c:10948 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "ライトスルーファイル\"%s\"をfsyncできませんでした: %m" -#: access/transam/xlog.c:10957 +#: access/transam/xlog.c:10954 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "ファイル\"%s\"をfdatasyncできませんでした: %m" -#: access/transam/xlog.c:11068 access/transam/xlog.c:11605 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:11065 access/transam/xlog.c:11602 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:11077 access/transam/xlog.c:11614 +#: access/transam/xlog.c:11074 access/transam/xlog.c:11611 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "オンラインバックアップを行うにはWALレベルが不十分です" -#: access/transam/xlog.c:11078 access/transam/xlog.c:11615 access/transam/xlogfuncs.c:308 +#: access/transam/xlog.c:11075 access/transam/xlog.c:11612 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:11083 +#: access/transam/xlog.c:11080 #, c-format msgid "backup label too long (max %d bytes)" msgstr "バックアップラベルが長すぎます (最大%dバイト)" -#: access/transam/xlog.c:11120 access/transam/xlog.c:11404 access/transam/xlog.c:11442 +#: access/transam/xlog.c:11117 access/transam/xlog.c:11401 access/transam/xlog.c:11439 #, c-format msgid "a backup is already in progress" msgstr "すでにバックアップが進行中です" -#: access/transam/xlog.c:11121 +#: access/transam/xlog.c:11118 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "pg_stop_backup()を実行後に再試行してください" -#: access/transam/xlog.c:11217 +#: access/transam/xlog.c:11214 #, 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:11219 access/transam/xlog.c:11810 +#: access/transam/xlog.c:11216 access/transam/xlog.c:11807 #, 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 "つまりこのスタンバイで取得されたバックアップは破損しており、使用すべきではありません。プライマリでfull_page_writesを有効にしCHECKPOINTを実行したのち、再度オンラインバックアップを試行してください。" -#: access/transam/xlog.c:11303 replication/basebackup.c:1433 utils/adt/misc.c:367 +#: access/transam/xlog.c:11300 replication/basebackup.c:1433 utils/adt/misc.c:367 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "シンボリックリンク\"%s\"の参照先が長すぎます" -#: access/transam/xlog.c:11353 commands/tablespace.c:385 commands/tablespace.c:561 replication/basebackup.c:1448 utils/adt/misc.c:375 +#: access/transam/xlog.c:11350 commands/tablespace.c:385 commands/tablespace.c:561 replication/basebackup.c:1448 utils/adt/misc.c:375 #, c-format msgid "tablespaces are not supported on this platform" msgstr "このプラットフォームではテーブル空間はサポートしていません" -#: access/transam/xlog.c:11405 access/transam/xlog.c:11443 +#: access/transam/xlog.c:11402 access/transam/xlog.c:11440 #, 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:11630 +#: access/transam/xlog.c:11627 #, c-format msgid "exclusive backup not in progress" msgstr "排他バックアップは進行中ではありません" -#: access/transam/xlog.c:11657 +#: access/transam/xlog.c:11654 #, c-format msgid "a backup is not in progress" msgstr "バックアップが進行中ではありません" -#: access/transam/xlog.c:11743 access/transam/xlog.c:11756 access/transam/xlog.c:12147 access/transam/xlog.c:12153 access/transam/xlog.c:12201 access/transam/xlog.c:12281 access/transam/xlog.c:12305 access/transam/xlogfuncs.c:733 +#: access/transam/xlog.c:11740 access/transam/xlog.c:11753 access/transam/xlog.c:12144 access/transam/xlog.c:12150 access/transam/xlog.c:12198 access/transam/xlog.c:12278 access/transam/xlog.c:12302 access/transam/xlogfuncs.c:733 #, c-format msgid "invalid data in file \"%s\"" msgstr "ファイル\"%s\"内の不正なデータ" -#: access/transam/xlog.c:11760 replication/basebackup.c:1287 +#: access/transam/xlog.c:11757 replication/basebackup.c:1287 #, c-format msgid "the standby was promoted during online backup" msgstr "オンラインバックアップ中にスタンバイが昇格しました" -#: access/transam/xlog.c:11761 replication/basebackup.c:1288 +#: access/transam/xlog.c:11758 replication/basebackup.c:1288 #, 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:11808 +#: access/transam/xlog.c:11805 #, 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:11928 +#: access/transam/xlog.c:11925 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "ベースバックアップ完了、必要な WAL セグメントがアーカイブされるのを待っています" -#: access/transam/xlog.c:11940 +#: access/transam/xlog.c:11937 #, c-format msgid "still waiting for all required WAL segments to be archived (%d seconds elapsed)" msgstr "まだ必要なすべての WAL セグメントがアーカイブされるのを待っています(%d 秒経過)" -#: access/transam/xlog.c:11942 +#: access/transam/xlog.c:11939 #, 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:11949 +#: access/transam/xlog.c:11946 #, c-format msgid "all required WAL segments have been archived" msgstr "必要なすべての WAL セグメントがアーカイブされました" -#: access/transam/xlog.c:11953 +#: access/transam/xlog.c:11950 #, 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:12008 +#: access/transam/xlog.c:12005 #, c-format msgid "aborting backup due to backend exiting before pg_stop_backup was called" msgstr "バックエンドが pg_stop_backup の呼び出し前に終了したため、バックアップは異常終了しました" -#: access/transam/xlog.c:12202 +#: access/transam/xlog.c:12199 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "読み取られたタイムラインIDは%uでしたが、%uであるはずです。" #. translator: %s is a WAL record description -#: access/transam/xlog.c:12330 +#: access/transam/xlog.c:12327 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "%X/%Xにある%sのWAL再生" -#: access/transam/xlog.c:12378 +#: access/transam/xlog.c:12375 #, c-format msgid "online backup mode was not canceled" msgstr "オンラインバックアップモードはキャンセルされていません" -#: access/transam/xlog.c:12379 +#: access/transam/xlog.c:12376 #, c-format msgid "File \"%s\" could not be renamed to \"%s\": %m." msgstr "ファイル\"%s\"の名前を\"%s\"に変更できませんでした: %m。" -#: access/transam/xlog.c:12388 access/transam/xlog.c:12400 access/transam/xlog.c:12410 +#: access/transam/xlog.c:12385 access/transam/xlog.c:12397 access/transam/xlog.c:12407 #, c-format msgid "online backup mode canceled" msgstr "オンラインバックアップモードがキャンセルされました" -#: access/transam/xlog.c:12401 +#: access/transam/xlog.c:12398 #, c-format msgid "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." msgstr "ファイル\"%s\"、\"%s\"の名前はそれぞれ\"%s\"、\"%s\"へと変更されました。" -#: access/transam/xlog.c:12411 +#: access/transam/xlog.c:12408 #, 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:12544 access/transam/xlogutils.c:967 +#: access/transam/xlog.c:12541 access/transam/xlogutils.c:967 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "ログセグメント%s、オフセット%uを読み取れませんでした: %m" -#: access/transam/xlog.c:12550 access/transam/xlogutils.c:974 +#: access/transam/xlog.c:12547 access/transam/xlogutils.c:974 #, 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:13115 +#: access/transam/xlog.c:13112 #, c-format msgid "WAL receiver process shutdown requested" msgstr "WAL受信プロセスのシャットダウンが要求されました" -#: access/transam/xlog.c:13210 +#: access/transam/xlog.c:13207 #, c-format msgid "received promote request" msgstr "昇格要求を受信しました" -#: access/transam/xlog.c:13223 +#: access/transam/xlog.c:13220 #, c-format msgid "promote trigger file found: %s" msgstr "昇格トリガーファイルがあります: %s" -#: access/transam/xlog.c:13231 +#: access/transam/xlog.c:13228 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "昇格トリガーファイル\"%s\"のstatに失敗しました: %m" @@ -2861,12 +2861,12 @@ msgstr "ファイル\"%s\"をアーカイブからリストアできませんで msgid "%s \"%s\": %s" msgstr "%s \"%s\": %s" -#: access/transam/xlogarchive.c:479 access/transam/xlogarchive.c:543 +#: access/transam/xlogarchive.c:479 access/transam/xlogarchive.c:557 #, c-format msgid "could not create archive status file \"%s\": %m" msgstr "アーカイブステータスファイル\"%s\"を作成できませんでした: %m" -#: access/transam/xlogarchive.c:487 access/transam/xlogarchive.c:551 +#: access/transam/xlogarchive.c:487 access/transam/xlogarchive.c:565 #, c-format msgid "could not write archive status file \"%s\": %m" msgstr "アーカイブステータスファイル\"%s\"に書き込めませんでした: %m" @@ -2886,15 +2886,15 @@ msgstr "非排他バックアップが進行中です" msgid "Did you mean to use pg_stop_backup('f')?" msgstr "pg_stop_backup('f') を実行しようとしていたのではないですか?" -#: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1311 commands/event_trigger.c:1869 commands/extension.c:1966 commands/extension.c:2074 commands/extension.c:2359 commands/prepare.c:713 executor/execExpr.c:2510 executor/execSRF.c:738 executor/functions.c:1074 foreign/foreign.c:530 libpq/hba.c:2722 replication/logical/launcher.c:937 replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 replication/slotfuncs.c:255 +#: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1311 commands/event_trigger.c:1869 commands/extension.c:1966 commands/extension.c:2074 commands/extension.c:2359 commands/prepare.c:713 executor/execExpr.c:2518 executor/execSRF.c:738 executor/functions.c:1074 foreign/foreign.c:530 libpq/hba.c:2726 replication/logical/launcher.c:937 replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 replication/slotfuncs.c:255 #: replication/walsender.c:3328 storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:507 utils/adt/genfile.c:590 utils/adt/jsonfuncs.c:1944 utils/adt/jsonfuncs.c:2056 utils/adt/jsonfuncs.c:2244 utils/adt/jsonfuncs.c:2353 utils/adt/jsonfuncs.c:3814 utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:219 utils/adt/pgstatfuncs.c:477 utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 utils/adt/varlena.c:4821 utils/fmgr/funcapi.c:74 -#: utils/misc/guc.c:10049 utils/mmgr/portalmem.c:1145 +#: utils/misc/guc.c:10088 utils/mmgr/portalmem.c:1145 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "集合を受け付けないコンテキストで集合値関数が呼び出されました" -#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1315 commands/event_trigger.c:1873 commands/extension.c:1970 commands/extension.c:2078 commands/extension.c:2363 commands/prepare.c:717 foreign/foreign.c:535 libpq/hba.c:2726 replication/logical/launcher.c:941 replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 replication/slotfuncs.c:259 replication/walsender.c:3332 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:223 utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4825 utils/misc/guc.c:10053 utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1149 +#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1315 commands/event_trigger.c:1873 commands/extension.c:1970 commands/extension.c:2078 commands/extension.c:2363 commands/prepare.c:717 foreign/foreign.c:535 libpq/hba.c:2730 replication/logical/launcher.c:941 replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 replication/slotfuncs.c:259 replication/walsender.c:3332 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:223 utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4825 utils/misc/guc.c:10092 utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1149 #, c-format msgid "materialize mode required, but it is not allowed in this context" msgstr "マテリアライズモードが必要ですが、現在のコンテクストで禁止されています" @@ -3096,12 +3096,12 @@ msgstr "%X/%X、ブロック %d での圧縮イメージが不正です" msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "-X オプションの値は1MBから1GBの間の2の累乗を指定します" -#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3969 +#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3974 #, c-format msgid "--%s requires a value" msgstr "--%sには値が必要です" -#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3974 +#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3979 #, c-format msgid "-c %s requires a value" msgstr "-c %sは値が必要です" @@ -3251,7 +3251,7 @@ msgstr "ラージオブジェクト%uは存在しません" #: commands/functioncmds.c:772 commands/functioncmds.c:781 commands/functioncmds.c:790 commands/functioncmds.c:799 commands/functioncmds.c:2097 commands/functioncmds.c:2105 commands/publicationcmds.c:87 commands/publicationcmds.c:130 commands/sequence.c:1274 commands/sequence.c:1284 commands/sequence.c:1294 commands/sequence.c:1304 commands/sequence.c:1314 commands/sequence.c:1324 commands/sequence.c:1334 commands/sequence.c:1344 commands/sequence.c:1354 #: commands/subscriptioncmds.c:124 commands/subscriptioncmds.c:134 commands/subscriptioncmds.c:144 commands/subscriptioncmds.c:154 commands/subscriptioncmds.c:170 commands/subscriptioncmds.c:181 commands/subscriptioncmds.c:195 commands/subscriptioncmds.c:205 commands/subscriptioncmds.c:215 commands/tablecmds.c:7684 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:402 replication/pgoutput/pgoutput.c:190 replication/pgoutput/pgoutput.c:211 replication/pgoutput/pgoutput.c:225 replication/pgoutput/pgoutput.c:235 replication/pgoutput/pgoutput.c:245 replication/walsender.c:883 replication/walsender.c:894 replication/walsender.c:904 +#: commands/user.c:655 commands/user.c:663 parser/parse_utilcmd.c:402 replication/pgoutput/pgoutput.c:199 replication/pgoutput/pgoutput.c:220 replication/pgoutput/pgoutput.c:234 replication/pgoutput/pgoutput.c:244 replication/pgoutput/pgoutput.c:254 replication/walsender.c:883 replication/walsender.c:894 replication/walsender.c:904 #, c-format msgid "conflicting or redundant options" msgstr "競合するオプション、あるいは余計なオプションがあります" @@ -3856,8 +3856,8 @@ msgstr[1] "" msgid "cannot drop %s because other objects depend on it" msgstr "他のオブジェクトが依存しているため%sを削除できません" -#: catalog/dependency.c:1204 catalog/dependency.c:1211 catalog/dependency.c:1223 commands/tablecmds.c:1301 commands/tablecmds.c:14021 commands/tablespace.c:464 commands/user.c:1095 commands/view.c:506 libpq/auth.c:338 replication/syncrep.c:1043 storage/lmgr/deadlock.c:1151 storage/lmgr/proc.c:1447 utils/misc/guc.c:7140 utils/misc/guc.c:7176 utils/misc/guc.c:7246 utils/misc/guc.c:11457 utils/misc/guc.c:11491 utils/misc/guc.c:11525 utils/misc/guc.c:11568 -#: utils/misc/guc.c:11610 +#: catalog/dependency.c:1204 catalog/dependency.c:1211 catalog/dependency.c:1223 commands/tablecmds.c:1301 commands/tablecmds.c:14021 commands/tablespace.c:464 commands/user.c:1095 commands/view.c:506 libpq/auth.c:338 replication/syncrep.c:1043 storage/lmgr/deadlock.c:1151 storage/lmgr/proc.c:1447 utils/misc/guc.c:7140 utils/misc/guc.c:7176 utils/misc/guc.c:7246 utils/misc/guc.c:11490 utils/misc/guc.c:11524 utils/misc/guc.c:11558 utils/misc/guc.c:11601 +#: utils/misc/guc.c:11643 #, c-format msgid "%s" msgstr "%s" @@ -4017,12 +4017,12 @@ msgstr "これは生成列を自身の値に依存させることにつながり msgid "generation expression is not immutable" msgstr "生成式は不変ではありません" -#: catalog/heap.c:3142 rewrite/rewriteHandler.c:1291 +#: catalog/heap.c:3142 rewrite/rewriteHandler.c:1285 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "列\"%s\"の型は%sですが、デフォルト式の型は%sです" -#: catalog/heap.c:3147 commands/prepare.c:368 parser/analyze.c:2695 parser/parse_target.c:594 parser/parse_target.c:891 parser/parse_target.c:901 rewrite/rewriteHandler.c:1296 +#: catalog/heap.c:3147 commands/prepare.c:368 parser/analyze.c:2695 parser/parse_target.c:594 parser/parse_target.c:891 parser/parse_target.c:901 rewrite/rewriteHandler.c:1290 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "式を書き換えるかキャストする必要があります。" @@ -4117,12 +4117,12 @@ msgstr "DROP INDEX CONCURRENTLYはトランザクション内で最初の操作 msgid "cannot reindex temporary tables of other sessions" msgstr "他のセッションの一時テーブルはインデクス再構築できません" -#: catalog/index.c:3664 commands/indexcmds.c:3548 +#: catalog/index.c:3664 commands/indexcmds.c:3555 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "TOASTテーブルの無効なインデックスの再作成はできません" -#: catalog/index.c:3680 commands/indexcmds.c:3428 commands/indexcmds.c:3572 commands/tablecmds.c:3282 +#: catalog/index.c:3680 commands/indexcmds.c:3435 commands/indexcmds.c:3579 commands/tablecmds.c:3282 #, c-format msgid "cannot move system relation \"%s\"" msgstr "システムリレーション\"%s\"を移動できません" @@ -4137,7 +4137,7 @@ msgstr "インデックス\"%s\"のインデックス再構築が完了しまし msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" msgstr "TOASTテーブルの無効なインデックス \"%s.%s\"の再作成はできません、スキップします " -#: catalog/namespace.c:259 catalog/namespace.c:463 catalog/namespace.c:555 commands/trigger.c:5253 +#: catalog/namespace.c:259 catalog/namespace.c:463 catalog/namespace.c:555 commands/trigger.c:5251 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "データベース間の参照は実装されていません: \"%s.%s.%s\"" @@ -4267,7 +4267,7 @@ msgstr "リカバリ中は一時テーブルを作成できません" msgid "cannot create temporary tables during a parallel operation" msgstr "並行処理中は一時テーブルを作成できません" -#: catalog/namespace.c:4338 commands/tablespace.c:1211 commands/variable.c:64 tcop/postgres.c:3624 utils/misc/guc.c:11642 utils/misc/guc.c:11720 +#: catalog/namespace.c:4338 commands/tablespace.c:1211 commands/variable.c:64 tcop/postgres.c:3624 utils/misc/guc.c:11675 utils/misc/guc.c:11753 #, c-format msgid "List syntax is invalid." msgstr "リスト文法が無効です" @@ -4413,74 +4413,74 @@ msgid "unrecognized object type \"%s\"" msgstr "認識されないオブジェクトタイプ\"%s\"" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2883 +#: catalog/objectaddress.c:2908 #, c-format msgid "column %s of %s" msgstr "%2$s の列 %1$s" -#: catalog/objectaddress.c:2898 +#: catalog/objectaddress.c:2923 #, c-format msgid "function %s" msgstr "関数%s" -#: catalog/objectaddress.c:2911 +#: catalog/objectaddress.c:2936 #, c-format msgid "type %s" msgstr "型%s" -#: catalog/objectaddress.c:2948 +#: catalog/objectaddress.c:2973 #, c-format msgid "cast from %s to %s" msgstr "%sから%sへの型変換" -#: catalog/objectaddress.c:2981 +#: catalog/objectaddress.c:3006 #, c-format msgid "collation %s" msgstr "照合順序%s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3012 +#: catalog/objectaddress.c:3037 #, c-format msgid "constraint %s on %s" msgstr "%2$sに対する制約%1$s" -#: catalog/objectaddress.c:3018 +#: catalog/objectaddress.c:3043 #, c-format msgid "constraint %s" msgstr "制約%s" -#: catalog/objectaddress.c:3050 +#: catalog/objectaddress.c:3075 #, c-format msgid "conversion %s" msgstr "変換%s" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:3096 +#: catalog/objectaddress.c:3121 #, c-format msgid "default value for %s" msgstr "%s のデフォルト値" -#: catalog/objectaddress.c:3110 +#: catalog/objectaddress.c:3135 #, c-format msgid "language %s" msgstr "言語%s" -#: catalog/objectaddress.c:3118 +#: catalog/objectaddress.c:3143 #, c-format msgid "large object %u" msgstr "ラージオブジェクト%u" -#: catalog/objectaddress.c:3131 +#: catalog/objectaddress.c:3156 #, c-format msgid "operator %s" msgstr "演算子%s" -#: catalog/objectaddress.c:3168 +#: catalog/objectaddress.c:3193 #, c-format msgid "operator class %s for access method %s" msgstr "アクセスメソッド%2$s用の演算子クラス%1$s" -#: catalog/objectaddress.c:3196 +#: catalog/objectaddress.c:3221 #, c-format msgid "access method %s" msgstr "アクセスメソッド%s" @@ -4489,7 +4489,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:3245 +#: catalog/objectaddress.c:3276 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "%4$sの演算子%1$d (%2$s, %3$s): %5$s" @@ -4498,221 +4498,221 @@ 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:3302 +#: catalog/objectaddress.c:3341 #, 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:3354 +#: catalog/objectaddress.c:3395 #, c-format msgid "rule %s on %s" msgstr "%2$sのルール%1$s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3400 +#: catalog/objectaddress.c:3441 #, c-format msgid "trigger %s on %s" msgstr "%2$sのトリガー%1$s" -#: catalog/objectaddress.c:3420 +#: catalog/objectaddress.c:3461 #, c-format msgid "schema %s" msgstr "スキーマ%s" -#: catalog/objectaddress.c:3448 +#: catalog/objectaddress.c:3489 #, c-format msgid "statistics object %s" msgstr "統計オブジェクト%s" -#: catalog/objectaddress.c:3479 +#: catalog/objectaddress.c:3520 #, c-format msgid "text search parser %s" msgstr "テキスト検索パーサ%s" -#: catalog/objectaddress.c:3510 +#: catalog/objectaddress.c:3551 #, c-format msgid "text search dictionary %s" msgstr "テキスト検索辞書%s" -#: catalog/objectaddress.c:3541 +#: catalog/objectaddress.c:3582 #, c-format msgid "text search template %s" msgstr "テキスト検索テンプレート%s" -#: catalog/objectaddress.c:3572 +#: catalog/objectaddress.c:3613 #, c-format msgid "text search configuration %s" msgstr "テキスト検索設定%s" -#: catalog/objectaddress.c:3585 +#: catalog/objectaddress.c:3626 #, c-format msgid "role %s" msgstr "ロール%s" -#: catalog/objectaddress.c:3601 +#: catalog/objectaddress.c:3642 #, c-format msgid "database %s" msgstr "データベース%s" -#: catalog/objectaddress.c:3617 +#: catalog/objectaddress.c:3658 #, c-format msgid "tablespace %s" msgstr "テーブル空間%s" -#: catalog/objectaddress.c:3628 +#: catalog/objectaddress.c:3669 #, c-format msgid "foreign-data wrapper %s" msgstr "外部データラッパー%s" -#: catalog/objectaddress.c:3638 +#: catalog/objectaddress.c:3679 #, c-format msgid "server %s" msgstr "サーバー%s" -#: catalog/objectaddress.c:3671 +#: catalog/objectaddress.c:3712 #, c-format msgid "user mapping for %s on server %s" msgstr "サーバー%2$s上のユーザーマッピング%1$s" -#: catalog/objectaddress.c:3723 +#: catalog/objectaddress.c:3764 #, c-format msgid "default privileges on new relations belonging to role %s in schema %s" msgstr "スキーマ %2$s のロール %1$s のものである新しいリレーションのデフォルト権限" -#: catalog/objectaddress.c:3727 +#: catalog/objectaddress.c:3768 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "新しいリレーションに関するデフォルトの権限は、ロール%sに属します。" -#: catalog/objectaddress.c:3733 +#: catalog/objectaddress.c:3774 #, c-format msgid "default privileges on new sequences belonging to role %s in schema %s" msgstr "スキーマ %2$s のロール %1$s のものである新しいシーケンスのデフォルト権限" -#: catalog/objectaddress.c:3737 +#: catalog/objectaddress.c:3778 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "新しいシーケンスに関するデフォルトの権限は、ロール%sに属します。" -#: catalog/objectaddress.c:3743 +#: catalog/objectaddress.c:3784 #, c-format msgid "default privileges on new functions belonging to role %s in schema %s" msgstr "スキーマ %2$s のロール %1$s のものである新しい関数のデフォルト権限" -#: catalog/objectaddress.c:3747 +#: catalog/objectaddress.c:3788 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "新しい関数に関するデフォルトの権限は、ロール%sに属します。" -#: catalog/objectaddress.c:3753 +#: catalog/objectaddress.c:3794 #, c-format msgid "default privileges on new types belonging to role %s in schema %s" msgstr "スキーマ %2$s のロール %1$s のものである新しい型のデフォルト権限" -#: catalog/objectaddress.c:3757 +#: catalog/objectaddress.c:3798 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "新しい型に関するデフォルトの権限は、ロール%sに属します" -#: catalog/objectaddress.c:3763 +#: catalog/objectaddress.c:3804 #, c-format msgid "default privileges on new schemas belonging to role %s" msgstr "ロール%sに属する新しいスキーマ上のデフォルト権限" -#: catalog/objectaddress.c:3770 +#: catalog/objectaddress.c:3811 #, c-format msgid "default privileges belonging to role %s in schema %s" msgstr "スキーマ %2$s のロール %1$s に属するデフォルト権限" -#: catalog/objectaddress.c:3774 +#: catalog/objectaddress.c:3815 #, c-format msgid "default privileges belonging to role %s" msgstr "デフォルトの権限はロール%sに属します。" -#: catalog/objectaddress.c:3796 +#: catalog/objectaddress.c:3837 #, c-format msgid "extension %s" msgstr "機能拡張%s" -#: catalog/objectaddress.c:3813 +#: catalog/objectaddress.c:3854 #, c-format msgid "event trigger %s" msgstr "イベントトリガー%s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3857 +#: catalog/objectaddress.c:3898 #, c-format msgid "policy %s on %s" msgstr "%2$s のポリシ %1$s" -#: catalog/objectaddress.c:3871 +#: catalog/objectaddress.c:3912 #, c-format msgid "publication %s" msgstr "パブリケーション%s" #. translator: first %s is, e.g., "table %s" -#: catalog/objectaddress.c:3899 +#: catalog/objectaddress.c:3940 #, c-format msgid "publication of %s in publication %s" msgstr "パブリケーション %2$s での %1$s の発行" -#: catalog/objectaddress.c:3912 +#: catalog/objectaddress.c:3953 #, c-format msgid "subscription %s" msgstr "サブスクリプション%s" -#: catalog/objectaddress.c:3933 +#: catalog/objectaddress.c:3974 #, c-format msgid "transform for %s language %s" msgstr "言語%2$sの%1$s型に対する変換" -#: catalog/objectaddress.c:4004 +#: catalog/objectaddress.c:4045 #, c-format msgid "table %s" msgstr "テーブル%s" -#: catalog/objectaddress.c:4009 +#: catalog/objectaddress.c:4050 #, c-format msgid "index %s" msgstr "インデックス%s" -#: catalog/objectaddress.c:4013 +#: catalog/objectaddress.c:4054 #, c-format msgid "sequence %s" msgstr "シーケンス%s" -#: catalog/objectaddress.c:4017 +#: catalog/objectaddress.c:4058 #, c-format msgid "toast table %s" msgstr "TOASTテーブル%s" -#: catalog/objectaddress.c:4021 +#: catalog/objectaddress.c:4062 #, c-format msgid "view %s" msgstr "ビュー%s" -#: catalog/objectaddress.c:4025 +#: catalog/objectaddress.c:4066 #, c-format msgid "materialized view %s" msgstr "実体化ビュー%s" -#: catalog/objectaddress.c:4029 +#: catalog/objectaddress.c:4070 #, c-format msgid "composite type %s" msgstr "複合型%s" -#: catalog/objectaddress.c:4033 +#: catalog/objectaddress.c:4074 #, c-format msgid "foreign table %s" msgstr "外部テーブル%s" -#: catalog/objectaddress.c:4038 +#: catalog/objectaddress.c:4079 #, c-format msgid "relation %s" msgstr "リレーション%s" -#: catalog/objectaddress.c:4079 +#: catalog/objectaddress.c:4120 #, c-format msgid "operator family %s for access method %s" msgstr "アクセスメソッド%2$sの演算子族%1$s" @@ -5312,12 +5312,12 @@ msgstr "\"%s\"の複範囲型を作成中に失敗しました。" msgid "You can manually specify a multirange type name using the \"multirange_type_name\" attribute." msgstr "\"multirange_type_name\"属性で複範囲型の型名を手動で指定することができます。" -#: catalog/storage.c:495 storage/buffer/bufmgr.c:1039 +#: catalog/storage.c:523 storage/buffer/bufmgr.c:1039 #, c-format msgid "invalid page in block %u of relation %s" msgstr "リレーション%2$sのブロック%1$uに不正なページ" -#: catalog/toasting.c:112 commands/indexcmds.c:692 commands/tablecmds.c:6142 commands/tablecmds.c:16694 +#: catalog/toasting.c:112 commands/indexcmds.c:699 commands/tablecmds.c:6142 commands/tablecmds.c:16694 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "\"%s\"はテーブルや実体化ビューではありません" @@ -5412,72 +5412,72 @@ 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:84 commands/event_trigger.c:174 +#: commands/alter.c:85 commands/event_trigger.c:174 #, c-format msgid "event trigger \"%s\" already exists" msgstr "イベントトリガー\"%s\"はすでに存在します" -#: commands/alter.c:87 commands/foreigncmds.c:597 +#: commands/alter.c:88 commands/foreigncmds.c:597 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "外部データラッパー\"%s\"はすでに存在します" -#: commands/alter.c:90 commands/foreigncmds.c:888 +#: commands/alter.c:91 commands/foreigncmds.c:888 #, c-format msgid "server \"%s\" already exists" msgstr "サーバー\"%s\"はすでに存在します" -#: commands/alter.c:93 commands/proclang.c:133 +#: commands/alter.c:94 commands/proclang.c:133 #, c-format msgid "language \"%s\" already exists" msgstr "言語\"%s\"はすでに存在します" -#: commands/alter.c:96 commands/publicationcmds.c:180 +#: commands/alter.c:97 commands/publicationcmds.c:180 #, c-format msgid "publication \"%s\" already exists" msgstr "パブリケーション\"%s\"はすでに存在します" -#: commands/alter.c:99 commands/subscriptioncmds.c:400 +#: commands/alter.c:100 commands/subscriptioncmds.c:400 #, c-format msgid "subscription \"%s\" already exists" msgstr "サブスクリプション\"%s\"はすでに存在します" -#: commands/alter.c:122 +#: commands/alter.c:123 #, c-format msgid "conversion \"%s\" already exists in schema \"%s\"" msgstr "変換\"%s\"はスキーマ\"%s\"内にすでに存在します" -#: commands/alter.c:126 +#: commands/alter.c:127 #, c-format msgid "statistics object \"%s\" already exists in schema \"%s\"" msgstr "統計情報オブジェクト\"%s\"はスキーマ\"%s\"内にすでに存在します" -#: commands/alter.c:130 +#: commands/alter.c:131 #, c-format msgid "text search parser \"%s\" already exists in schema \"%s\"" msgstr "テキスト検索パーサ\"%s\"はすでにスキーマ\"%s\"存在します" -#: commands/alter.c:134 +#: commands/alter.c:135 #, c-format msgid "text search dictionary \"%s\" already exists in schema \"%s\"" msgstr "テキスト検索辞書\"%s\"はすでにスキーマ\"%s\"存在します" -#: commands/alter.c:138 +#: commands/alter.c:139 #, c-format msgid "text search template \"%s\" already exists in schema \"%s\"" msgstr "テキスト検索テンプレート\"%s\"はすでにスキーマ\"%s\"存在します" -#: commands/alter.c:142 +#: commands/alter.c:143 #, c-format msgid "text search configuration \"%s\" already exists in schema \"%s\"" msgstr "テキスト検索設定\"%s\"はすでにスキーマ\"%s\"存在します" -#: commands/alter.c:215 +#: commands/alter.c:216 #, c-format msgid "must be superuser to rename %s" msgstr "%sの名前を変更するにはスーパーユーザーである必要があります" -#: commands/alter.c:744 +#: commands/alter.c:745 #, c-format msgid "must be superuser to set schema of %s" msgstr "%sのスキーマを設定するにはスーパーユーザーである必要があります" @@ -5497,7 +5497,7 @@ msgstr "アクセスメソッドを作成するにはスーパーユーザーで msgid "access method \"%s\" already exists" msgstr "アクセスメソッド\"%s\"は存在しません" -#: commands/amcmds.c:154 commands/indexcmds.c:213 commands/indexcmds.c:843 commands/opclasscmds.c:375 commands/opclasscmds.c:833 +#: commands/amcmds.c:154 commands/indexcmds.c:214 commands/indexcmds.c:850 commands/opclasscmds.c:376 commands/opclasscmds.c:834 #, c-format msgid "access method \"%s\" does not exist" msgstr "アクセスメソッド\"%s\"は存在しません" @@ -5756,7 +5756,7 @@ msgstr "コマンド\"%s\"を実行できませんでした: %m" msgid "no usable system locales were found" msgstr "使用できるシステムロケールが見つかりません" -#: commands/comment.c:61 commands/dbcommands.c:855 commands/dbcommands.c:1072 commands/dbcommands.c:1187 commands/dbcommands.c:1377 commands/dbcommands.c:1627 commands/dbcommands.c:1751 commands/dbcommands.c:2194 utils/init/postinit.c:887 utils/init/postinit.c:993 utils/init/postinit.c:1019 +#: commands/comment.c:61 commands/dbcommands.c:855 commands/dbcommands.c:1072 commands/dbcommands.c:1187 commands/dbcommands.c:1377 commands/dbcommands.c:1627 commands/dbcommands.c:1751 commands/dbcommands.c:2194 utils/init/postinit.c:890 utils/init/postinit.c:996 utils/init/postinit.c:1022 #, c-format msgid "database \"%s\" does not exist" msgstr "データベース\"%s\"は存在しません" @@ -5966,7 +5966,7 @@ msgstr "列\"%s\"は生成カラムです" msgid "Generated columns cannot be used in COPY." msgstr "生成カラムはCOPYでは使えません。" -#: commands/copy.c:749 commands/indexcmds.c:1835 commands/statscmds.c:245 commands/tablecmds.c:2344 commands/tablecmds.c:3000 commands/tablecmds.c:3508 parser/parse_relation.c:3651 parser/parse_relation.c:3671 utils/adt/tsvector_op.c:2683 +#: commands/copy.c:749 commands/indexcmds.c:1842 commands/statscmds.c:245 commands/tablecmds.c:2344 commands/tablecmds.c:3000 commands/tablecmds.c:3508 parser/parse_relation.c:3651 parser/parse_relation.c:3671 utils/adt/tsvector_op.c:2683 #, c-format msgid "column \"%s\" does not exist" msgstr "列\"%s\"は存在しません" @@ -6378,7 +6378,7 @@ msgstr "テンプレートデータベース\"%s\"は存在しません" msgid "cannot use invalid database \"%s\" as template" msgstr "無効なデータベース\"%s\"はテンプレートとして使用できません" -#: commands/dbcommands.c:368 commands/dbcommands.c:1638 utils/init/postinit.c:1002 +#: commands/dbcommands.c:368 commands/dbcommands.c:1638 utils/init/postinit.c:1005 #, c-format msgid "Use DROP DATABASE to drop invalid databases." msgstr "DROP DATABASEを使用して無効なデータベースを削除してください。" @@ -7584,287 +7584,287 @@ msgid_plural "cannot pass more than %d arguments to a procedure" msgstr[0] "プロシージャには %d 個以上の引数を渡すことはできません" msgstr[1] "プロシージャには %d 個以上の引数を渡すことはできません" -#: commands/indexcmds.c:634 +#: commands/indexcmds.c:641 #, c-format msgid "must specify at least one column" msgstr "少なくとも1つの列を指定しなければなりません" -#: commands/indexcmds.c:638 +#: commands/indexcmds.c:645 #, c-format msgid "cannot use more than %d columns in an index" msgstr "インデックスには%dを超える列を使用できません" -#: commands/indexcmds.c:686 +#: commands/indexcmds.c:693 #, c-format msgid "cannot create index on foreign table \"%s\"" msgstr "外部テーブル\"%s\"のインデックスを作成できません" -#: commands/indexcmds.c:717 +#: commands/indexcmds.c:724 #, c-format msgid "cannot create index on partitioned table \"%s\" concurrently" msgstr "パーティション親テーブル\"%s\"に対して並列的にインデックスを作成することはできません" -#: commands/indexcmds.c:722 +#: commands/indexcmds.c:729 #, c-format msgid "cannot create exclusion constraints on partitioned table \"%s\"" msgstr "パーティション親テーブル\"%s\"には排他制約を作成できません" -#: commands/indexcmds.c:732 +#: commands/indexcmds.c:739 #, c-format msgid "cannot create indexes on temporary tables of other sessions" msgstr "他のセッションの一時テーブルに対するインデックスを作成できません" -#: commands/indexcmds.c:770 commands/tablecmds.c:755 commands/tablespace.c:1179 +#: commands/indexcmds.c:777 commands/tablecmds.c:755 commands/tablespace.c:1179 #, c-format msgid "cannot specify default tablespace for partitioned relations" msgstr "パーティション親リレーションにはデフォルトテーブル空間は指定できません" -#: commands/indexcmds.c:802 commands/tablecmds.c:786 commands/tablecmds.c:3289 +#: commands/indexcmds.c:809 commands/tablecmds.c:786 commands/tablecmds.c:3289 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "共有リレーションのみをpg_globalテーブル空間に格納することができます" -#: commands/indexcmds.c:835 +#: commands/indexcmds.c:842 #, c-format msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "古いメソッド\"rtree\"をアクセスメソッド\"gist\"に置換しています" -#: commands/indexcmds.c:856 +#: commands/indexcmds.c:863 #, c-format msgid "access method \"%s\" does not support unique indexes" msgstr "アクセスメソッド\"%s\"では一意性インデックスをサポートしていません" -#: commands/indexcmds.c:861 +#: commands/indexcmds.c:868 #, c-format msgid "access method \"%s\" does not support included columns" msgstr "アクセスメソッド\"%s\"では包含列をサポートしていません" -#: commands/indexcmds.c:866 +#: commands/indexcmds.c:873 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "アクセスメソッド\"%s\"は複数列インデックスをサポートしません" -#: commands/indexcmds.c:871 +#: commands/indexcmds.c:878 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "アクセスメソッド\"%s\"は排除制約をサポートしていません" -#: commands/indexcmds.c:995 +#: commands/indexcmds.c:1002 #, c-format msgid "cannot match partition key to an index using access method \"%s\"" msgstr "パーティションキーはアクセスメソッド\"%s\"を使っているインデックスには適合させられません" -#: commands/indexcmds.c:1005 +#: commands/indexcmds.c:1012 #, c-format msgid "unsupported %s constraint with partition key definition" msgstr "パーティションキー定義では %s 制約はサポートしていません" -#: commands/indexcmds.c:1007 +#: commands/indexcmds.c:1014 #, c-format msgid "%s constraints cannot be used when partition keys include expressions." msgstr "%s 制約はパーティションキーが式を含む場合は使用できません" -#: commands/indexcmds.c:1049 +#: commands/indexcmds.c:1056 #, c-format msgid "unique constraint on partitioned table must include all partitioning columns" msgstr "パーティション親テーブル上のユニーク制約はすべてのパーティショニング列を含まなければなりません" -#: commands/indexcmds.c:1050 +#: commands/indexcmds.c:1057 #, 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:1069 commands/indexcmds.c:1088 +#: commands/indexcmds.c:1076 commands/indexcmds.c:1095 #, c-format msgid "index creation on system columns is not supported" msgstr "システム列へのインデックス作成はサポートされていません" -#: commands/indexcmds.c:1288 tcop/utility.c:1510 +#: commands/indexcmds.c:1295 tcop/utility.c:1510 #, c-format msgid "cannot create unique index on partitioned table \"%s\"" msgstr "パーティション親テーブル\"%s\"にはユニークインデックスを構築できません" -#: commands/indexcmds.c:1290 tcop/utility.c:1512 +#: commands/indexcmds.c:1297 tcop/utility.c:1512 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." msgstr "テーブル\"%s\"は外部テーブルを子テーブルとして含んでいます" -#: commands/indexcmds.c:1752 +#: commands/indexcmds.c:1759 #, c-format msgid "functions in index predicate must be marked IMMUTABLE" msgstr "インデックスの述部の関数はIMMUTABLEマークが必要です" -#: commands/indexcmds.c:1830 parser/parse_utilcmd.c:2533 parser/parse_utilcmd.c:2668 +#: commands/indexcmds.c:1837 parser/parse_utilcmd.c:2533 parser/parse_utilcmd.c:2668 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "キーとして指名された列\"%s\"は存在しません" -#: commands/indexcmds.c:1854 parser/parse_utilcmd.c:1821 +#: commands/indexcmds.c:1861 parser/parse_utilcmd.c:1821 #, c-format msgid "expressions are not supported in included columns" msgstr "包含列では式はサポートされません" -#: commands/indexcmds.c:1895 +#: commands/indexcmds.c:1902 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "式インデックスの関数はIMMUTABLEマークが必要です" -#: commands/indexcmds.c:1910 +#: commands/indexcmds.c:1917 #, c-format msgid "including column does not support a collation" msgstr "包含列は照合順序をサポートしません" -#: commands/indexcmds.c:1914 +#: commands/indexcmds.c:1921 #, c-format msgid "including column does not support an operator class" msgstr "包含列は演算子クラスをサポートしません" -#: commands/indexcmds.c:1918 +#: commands/indexcmds.c:1925 #, c-format msgid "including column does not support ASC/DESC options" msgstr "包含列は ASC/DESC オプションをサポートしません" -#: commands/indexcmds.c:1922 +#: commands/indexcmds.c:1929 #, c-format msgid "including column does not support NULLS FIRST/LAST options" msgstr "包含列はNULLS FIRST/LASTオプションをサポートしません" -#: commands/indexcmds.c:1963 +#: commands/indexcmds.c:1970 #, c-format msgid "could not determine which collation to use for index expression" msgstr "インデックス式で使用する照合順序を特定できませんでした" -#: commands/indexcmds.c:1971 commands/tablecmds.c:17162 commands/typecmds.c:810 parser/parse_expr.c:2693 parser/parse_type.c:566 parser/parse_utilcmd.c:3783 utils/adt/misc.c:621 +#: commands/indexcmds.c:1978 commands/tablecmds.c:17162 commands/typecmds.c:810 parser/parse_expr.c:2693 parser/parse_type.c:566 parser/parse_utilcmd.c:3783 utils/adt/misc.c:621 #, c-format msgid "collations are not supported by type %s" msgstr "%s型では照合順序はサポートされません" -#: commands/indexcmds.c:2036 +#: commands/indexcmds.c:2043 #, c-format msgid "operator %s is not commutative" msgstr "演算子%sは可換ではありません" -#: commands/indexcmds.c:2038 +#: commands/indexcmds.c:2045 #, c-format msgid "Only commutative operators can be used in exclusion constraints." msgstr "排除制約で使えるのは可換演算子だけです" -#: commands/indexcmds.c:2064 +#: commands/indexcmds.c:2071 #, c-format msgid "operator %s is not a member of operator family \"%s\"" msgstr "演算子%sは演算子族\"%s\"のメンバーではありません" -#: commands/indexcmds.c:2067 +#: commands/indexcmds.c:2074 #, c-format msgid "The exclusion operator must be related to the index operator class for the constraint." msgstr "この排除に使用する演算子はこの制約に使用するインデックス演算子に関連付けられている必要があります。" -#: commands/indexcmds.c:2102 +#: commands/indexcmds.c:2109 #, c-format msgid "access method \"%s\" does not support ASC/DESC options" msgstr "アクセスメソッド\"%s\"はASC/DESCオプションをサポートしません" -#: commands/indexcmds.c:2107 +#: commands/indexcmds.c:2114 #, c-format msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "アクセスメソッド\"%s\"はNULLS FIRST/LASTオプションをサポートしません" -#: commands/indexcmds.c:2153 commands/tablecmds.c:17187 commands/tablecmds.c:17193 commands/typecmds.c:2317 +#: commands/indexcmds.c:2160 commands/tablecmds.c:17187 commands/tablecmds.c:17193 commands/typecmds.c:2317 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "アクセスメソッド\"%2$s\"にはデータ型%1$s用のデフォルトの演算子クラスがありません" -#: commands/indexcmds.c:2155 +#: commands/indexcmds.c:2162 #, 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:2184 commands/indexcmds.c:2192 commands/opclasscmds.c:205 +#: commands/indexcmds.c:2191 commands/indexcmds.c:2199 commands/opclasscmds.c:206 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\"" msgstr "アクセスメソッド\"%2$s\"用の演算子クラス\"%1$s\"は存在しません" -#: commands/indexcmds.c:2206 commands/typecmds.c:2305 +#: commands/indexcmds.c:2213 commands/typecmds.c:2305 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "演算子クラス\"%s\"はデータ型%sを受け付けません" -#: commands/indexcmds.c:2296 +#: commands/indexcmds.c:2303 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "データ型%sには複数のデフォルトの演算子クラスがあります" -#: commands/indexcmds.c:2624 +#: commands/indexcmds.c:2631 #, c-format msgid "unrecognized REINDEX option \"%s\"" msgstr "認識されないREINDEXのオプション\"%s\"" -#: commands/indexcmds.c:2848 +#: commands/indexcmds.c:2855 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" msgstr "テーブル\"%s\"には並行インデックス再作成が可能なインデックスがありません" -#: commands/indexcmds.c:2862 +#: commands/indexcmds.c:2869 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "テーブル\"%s\"には再構築すべきインデックスはありません" -#: commands/indexcmds.c:2902 commands/indexcmds.c:3409 commands/indexcmds.c:3537 +#: commands/indexcmds.c:2909 commands/indexcmds.c:3416 commands/indexcmds.c:3544 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "システムカタログではインデックスの並行再構築はできません" -#: commands/indexcmds.c:2925 +#: commands/indexcmds.c:2932 #, c-format msgid "can only reindex the currently open database" msgstr "現在オープンしているデータベースのみをインデックス再構築することができます" -#: commands/indexcmds.c:3013 +#: commands/indexcmds.c:3020 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "システムカタログではインデックスの並行再構築はできません、全てスキップします" -#: commands/indexcmds.c:3046 +#: commands/indexcmds.c:3053 #, c-format msgid "cannot move system relations, skipping all" msgstr "システムリレーションは移動できません、すべてスキップします" -#: commands/indexcmds.c:3093 +#: commands/indexcmds.c:3100 #, c-format msgid "while reindexing partitioned table \"%s.%s\"" msgstr "パーティションテーブル\"%s.%s\"のインデックス再構築中" -#: commands/indexcmds.c:3096 +#: commands/indexcmds.c:3103 #, c-format msgid "while reindexing partitioned index \"%s.%s\"" msgstr "パーティションインデックス\"%s.%s\"の再構築中" -#: commands/indexcmds.c:3289 commands/indexcmds.c:4145 +#: commands/indexcmds.c:3296 commands/indexcmds.c:4152 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "テーブル\"%s.%s\"のインデックス再構築が完了しました" -#: commands/indexcmds.c:3441 commands/indexcmds.c:3493 +#: commands/indexcmds.c:3448 commands/indexcmds.c:3500 #, c-format msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" msgstr "無効なインデックス \"%s.%s\"の並行再構築はできません、スキップします " -#: commands/indexcmds.c:3447 +#: commands/indexcmds.c:3454 #, c-format msgid "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" msgstr "排他制約インデックス\"%s.%s\"を並行再構築することはできません、スキップします " -#: commands/indexcmds.c:3602 +#: commands/indexcmds.c:3609 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "このタイプのリレーションでインデックス並列再構築はできません" -#: commands/indexcmds.c:3623 +#: commands/indexcmds.c:3630 #, c-format msgid "cannot move non-shared relation to tablespace \"%s\"" msgstr "非共有リレーションをテーブルスペース\"%s\"へ移動できません" -#: commands/indexcmds.c:4126 commands/indexcmds.c:4138 +#: commands/indexcmds.c:4133 commands/indexcmds.c:4145 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr " インデックス\"%s.%s\"の再構築が完了しました " @@ -7904,222 +7904,222 @@ msgstr "実体化ビュー\"%s\"に対する新しいデータにはNULL列を msgid "Row: %s" msgstr "行: %s" -#: commands/opclasscmds.c:124 +#: commands/opclasscmds.c:125 #, c-format msgid "operator family \"%s\" does not exist for access method \"%s\"" msgstr "アクセスメソッド\"%2$s\"用の演算子族\"%1$s\"は存在しません" -#: commands/opclasscmds.c:267 +#: commands/opclasscmds.c:268 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"はすでに存在します" -#: commands/opclasscmds.c:416 +#: commands/opclasscmds.c:417 #, c-format msgid "must be superuser to create an operator class" msgstr "演算子クラスを作成するにはスーパーユーザーである必要があります" -#: commands/opclasscmds.c:493 commands/opclasscmds.c:910 commands/opclasscmds.c:1056 +#: commands/opclasscmds.c:494 commands/opclasscmds.c:911 commands/opclasscmds.c:1057 #, c-format msgid "invalid operator number %d, must be between 1 and %d" msgstr "演算子番号%dが不正です。1から%dまででなければなりません" -#: commands/opclasscmds.c:538 commands/opclasscmds.c:960 commands/opclasscmds.c:1072 +#: commands/opclasscmds.c:539 commands/opclasscmds.c:961 commands/opclasscmds.c:1073 #, c-format msgid "invalid function number %d, must be between 1 and %d" msgstr "演算子番号%dが不正です、1と%dの間でなければなりません" -#: commands/opclasscmds.c:567 +#: commands/opclasscmds.c:568 #, c-format msgid "storage type specified more than once" msgstr "格納型が複数指定されました" -#: commands/opclasscmds.c:594 +#: commands/opclasscmds.c:595 #, c-format msgid "storage type cannot be different from data type for access method \"%s\"" msgstr "アクセスメソッド\"%s\"用のデータ型と異なる格納型を使用できません" -#: commands/opclasscmds.c:610 +#: commands/opclasscmds.c:611 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists" msgstr "アクセスメソッド\"%2$s\"の演算子クラス\"%1$s\"はすでに存在します" -#: commands/opclasscmds.c:638 +#: commands/opclasscmds.c:639 #, c-format msgid "could not make operator class \"%s\" be default for type %s" msgstr "演算子クラス\"%s\"を型%sのデフォルトにすることができませんでした" -#: commands/opclasscmds.c:641 +#: commands/opclasscmds.c:642 #, c-format msgid "Operator class \"%s\" already is the default." msgstr "演算子クラス\"%s\"はすでにデフォルトです。" -#: commands/opclasscmds.c:801 +#: commands/opclasscmds.c:802 #, c-format msgid "must be superuser to create an operator family" msgstr "演算子族を作成するにはスーパーユーザーである必要があります" -#: commands/opclasscmds.c:861 +#: commands/opclasscmds.c:862 #, c-format msgid "must be superuser to alter an operator family" msgstr "演算子族を更新するにはスーパーユーザーである必要があります" -#: commands/opclasscmds.c:919 +#: commands/opclasscmds.c:920 #, c-format msgid "operator argument types must be specified in ALTER OPERATOR FAMILY" msgstr "ALTER OPERATOR FAMILYでは演算子の引数型の指定が必要です" -#: commands/opclasscmds.c:994 +#: commands/opclasscmds.c:995 #, c-format msgid "STORAGE cannot be specified in ALTER OPERATOR FAMILY" msgstr "ALTER OPERATOR FAMILYではSTORAGEを指定できません" -#: commands/opclasscmds.c:1128 +#: commands/opclasscmds.c:1129 #, c-format msgid "one or two argument types must be specified" msgstr "1または2つの引数型が指定する必要があります" -#: commands/opclasscmds.c:1154 +#: commands/opclasscmds.c:1155 #, c-format msgid "index operators must be binary" msgstr "インデックス演算子は二項演算子でなければなりません" -#: commands/opclasscmds.c:1173 +#: commands/opclasscmds.c:1174 #, c-format msgid "access method \"%s\" does not support ordering operators" msgstr "アクセスメソッド\"%s\"は並べ替え演算子をサポートしていません" -#: commands/opclasscmds.c:1184 +#: commands/opclasscmds.c:1185 #, c-format msgid "index search operators must return boolean" msgstr "インデックス検索演算子はブール型を返す必要があります" -#: commands/opclasscmds.c:1224 +#: commands/opclasscmds.c:1225 #, c-format msgid "associated data types for operator class options parsing functions must match opclass input type" msgstr "演算子クラスオプションのパース関数に対応するデータ型は演算子クラスの入力型と合致する必要があります" -#: commands/opclasscmds.c:1231 +#: commands/opclasscmds.c:1232 #, c-format msgid "left and right associated data types for operator class options parsing functions must match" msgstr "演算子クラスオプションパース関数の左右辺の関連データ型は合致しなければなりません" -#: commands/opclasscmds.c:1239 +#: commands/opclasscmds.c:1240 #, c-format msgid "invalid operator class options parsing function" msgstr "不正な演算子クラスオプションパース関数" -#: commands/opclasscmds.c:1240 +#: commands/opclasscmds.c:1241 #, c-format msgid "Valid signature of operator class options parsing function is %s." msgstr "演算子クラスオプションのパース関数の妥当なシグネチャは %sです。" -#: commands/opclasscmds.c:1259 +#: commands/opclasscmds.c:1260 #, c-format msgid "btree comparison functions must have two arguments" msgstr "btree比較関数は2つの引数を取る必要があります" -#: commands/opclasscmds.c:1263 +#: commands/opclasscmds.c:1264 #, c-format msgid "btree comparison functions must return integer" msgstr "btree比較関数は整数を返さなければなりません" -#: commands/opclasscmds.c:1280 +#: commands/opclasscmds.c:1281 #, c-format msgid "btree sort support functions must accept type \"internal\"" msgstr "btreeソートサポート関数は\"internal\"型を取らなければなりません" -#: commands/opclasscmds.c:1284 +#: commands/opclasscmds.c:1285 #, c-format msgid "btree sort support functions must return void" msgstr "btreeソートサポート関数はvoidを返さなければなりません" -#: commands/opclasscmds.c:1295 +#: commands/opclasscmds.c:1296 #, c-format msgid "btree in_range functions must have five arguments" msgstr "btree in_range 関数は5つの引数を取る必要があります" -#: commands/opclasscmds.c:1299 +#: commands/opclasscmds.c:1300 #, c-format msgid "btree in_range functions must return boolean" msgstr "btree in_range 関数はブール型を返す必要があります" -#: commands/opclasscmds.c:1315 +#: commands/opclasscmds.c:1316 #, c-format msgid "btree equal image functions must have one argument" msgstr "btreeの equal image 関数は1つの引数を取る必要があります" -#: commands/opclasscmds.c:1319 +#: commands/opclasscmds.c:1320 #, c-format msgid "btree equal image functions must return boolean" msgstr "btreeの euqal image 関数はブール型を返す必要があります" -#: commands/opclasscmds.c:1332 +#: commands/opclasscmds.c:1333 #, c-format msgid "btree equal image functions must not be cross-type" msgstr "btreeの equal image 関数は同じ型の引数を取る必要があります" -#: commands/opclasscmds.c:1342 +#: commands/opclasscmds.c:1343 #, c-format msgid "hash function 1 must have one argument" msgstr "ハッシュ関数1は引数を1つ取る必要があります" -#: commands/opclasscmds.c:1346 +#: commands/opclasscmds.c:1347 #, c-format msgid "hash function 1 must return integer" msgstr "ハッシュ関数1は整数を返す必要があります" -#: commands/opclasscmds.c:1353 +#: commands/opclasscmds.c:1354 #, c-format msgid "hash function 2 must have two arguments" msgstr "ハッシュ関数2は2つの引数を取る必要があります" -#: commands/opclasscmds.c:1357 +#: commands/opclasscmds.c:1358 #, c-format msgid "hash function 2 must return bigint" msgstr "ハッシュ関数2は bigint を返す必要があります" -#: commands/opclasscmds.c:1382 +#: commands/opclasscmds.c:1383 #, c-format msgid "associated data types must be specified for index support function" msgstr "インデックスサポート関数に対して関連データ型を指定する必要があります" -#: commands/opclasscmds.c:1407 +#: commands/opclasscmds.c:1408 #, c-format msgid "function number %d for (%s,%s) appears more than once" msgstr "(%2$s,%3$s)に対応する演算子番号%1$dが複数あります" -#: commands/opclasscmds.c:1414 +#: commands/opclasscmds.c:1415 #, c-format msgid "operator number %d for (%s,%s) appears more than once" msgstr "(%2$s,%3$s)用の演算子番号%1$dが複数あります" -#: commands/opclasscmds.c:1460 +#: commands/opclasscmds.c:1461 #, c-format msgid "operator %d(%s,%s) already exists in operator family \"%s\"" msgstr "演算子%d(%s,%s)はすでに演算子族\"%s\"に存在します" -#: commands/opclasscmds.c:1566 +#: commands/opclasscmds.c:1590 #, c-format msgid "function %d(%s,%s) already exists in operator family \"%s\"" msgstr "関数%d(%s,%s)はすでに演算子族\"%s\"内に存在します" -#: commands/opclasscmds.c:1647 +#: commands/opclasscmds.c:1735 #, c-format msgid "operator %d(%s,%s) does not exist in operator family \"%s\"" msgstr "演算子%d(%s,%s)は演算子族\"%s\"内にありません" -#: commands/opclasscmds.c:1687 +#: commands/opclasscmds.c:1775 #, c-format msgid "function %d(%s,%s) does not exist in operator family \"%s\"" msgstr "関数%d(%s,%s)は演算子族\"%s\"内に存在しません" -#: commands/opclasscmds.c:1718 +#: commands/opclasscmds.c:1806 #, 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:1741 +#: commands/opclasscmds.c:1829 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "アクセスメソッド\"%2$s\"用の演算子族\"%1$s\"はスキーマ\"%3$s\"内にすでに存在します" @@ -8912,7 +8912,7 @@ msgstr "複数の継承される列\"%s\"の定義をマージしています" msgid "inherited column \"%s\" has a type conflict" msgstr "継承される列\"%s\"の型が競合しています" -#: commands/tablecmds.c:2535 commands/tablecmds.c:2558 commands/tablecmds.c:2575 commands/tablecmds.c:2831 commands/tablecmds.c:2861 commands/tablecmds.c:2875 parser/parse_coerce.c:2155 parser/parse_coerce.c:2175 parser/parse_coerce.c:2195 parser/parse_coerce.c:2216 parser/parse_coerce.c:2271 parser/parse_coerce.c:2305 parser/parse_coerce.c:2381 parser/parse_coerce.c:2412 parser/parse_coerce.c:2451 parser/parse_coerce.c:2518 parser/parse_param.c:227 +#: commands/tablecmds.c:2535 commands/tablecmds.c:2558 commands/tablecmds.c:2575 commands/tablecmds.c:2831 commands/tablecmds.c:2861 commands/tablecmds.c:2875 parser/parse_coerce.c:2192 parser/parse_coerce.c:2212 parser/parse_coerce.c:2232 parser/parse_coerce.c:2253 parser/parse_coerce.c:2308 parser/parse_coerce.c:2342 parser/parse_coerce.c:2418 parser/parse_coerce.c:2449 parser/parse_coerce.c:2488 parser/parse_coerce.c:2555 parser/parse_param.c:227 #, c-format msgid "%s versus %s" msgstr "%s対%s" @@ -9604,7 +9604,7 @@ msgstr "型付けされたテーブルの列の型を変更できません" msgid "cannot specify USING when altering type of generated column" msgstr "生成列の型変更の際にはUSINGを指定することはできません" -#: commands/tablecmds.c:11908 commands/tablecmds.c:17005 commands/tablecmds.c:17095 commands/trigger.c:653 rewrite/rewriteHandler.c:930 rewrite/rewriteHandler.c:965 +#: commands/tablecmds.c:11908 commands/tablecmds.c:17005 commands/tablecmds.c:17095 commands/trigger.c:653 rewrite/rewriteHandler.c:936 rewrite/rewriteHandler.c:971 #, c-format msgid "Column \"%s\" is a generated column." msgstr "列\"%s\"は生成カラムです。" @@ -10510,17 +10510,17 @@ msgstr "更新が同時に行われたためアクセスの直列化ができま msgid "could not serialize access due to concurrent delete" msgstr "削除が同時に行われたためアクセスの直列化ができませんでした" -#: commands/trigger.c:4256 +#: commands/trigger.c:4254 #, c-format msgid "cannot fire deferred trigger within security-restricted operation" msgstr "セキュリティー制限された処理中は、遅延トリガーは発火させられません" -#: commands/trigger.c:5304 +#: commands/trigger.c:5302 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "制約\"%s\"は遅延可能ではありません" -#: commands/trigger.c:5327 +#: commands/trigger.c:5325 #, c-format msgid "constraint \"%s\" does not exist" msgstr "制約\"%s\"は存在しません" @@ -11054,7 +11054,7 @@ msgstr "ロールを削除する権限がありません" msgid "cannot use special role specifier in DROP ROLE" msgstr "DROP ROLE で特殊ロールの識別子は使えません" -#: 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:710 +#: commands/user.c:1040 commands/user.c:1197 commands/variable.c:793 commands/variable.c:796 commands/variable.c:913 commands/variable.c:916 utils/adt/acl.c:5103 utils/adt/acl.c:5151 utils/adt/acl.c:5179 utils/adt/acl.c:5198 utils/init/miscinit.c:755 #, c-format msgid "role \"%s\" does not exist" msgstr "ロール\"%s\"は存在しません" @@ -11293,7 +11293,7 @@ msgstr "トランザクションの周回によるデータ損失が発生して msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "\"%s\"をスキップしています --- テーブルではないものや、特別なシステムテーブルに対してはVACUUMを実行できません" -#: commands/variable.c:165 tcop/postgres.c:3640 utils/misc/guc.c:11682 utils/misc/guc.c:11744 +#: commands/variable.c:165 tcop/postgres.c:3640 utils/misc/guc.c:11715 utils/misc/guc.c:11777 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "不明なキーワードです: \"%s\"" @@ -11388,12 +11388,22 @@ msgstr "現在は\"client_encoding\"を変更できません。" msgid "cannot change client_encoding during a parallel operation" msgstr "並列処理中は\"client_encoding\"を変更できません" -#: commands/variable.c:890 +#: commands/variable.c:818 +#, c-format +msgid "permission will be denied to set session authorization \"%s\"" +msgstr "セッション権限を\"%s\"に設定しようとしていますが、これは許可されません" + +#: commands/variable.c:823 +#, c-format +msgid "permission denied to set session authorization \"%s\"" +msgstr "セッション権限を\"%s\"に設定することは許可されていません" + +#: commands/variable.c:933 #, c-format msgid "permission will be denied to set role \"%s\"" msgstr "ロール\"%s\"を設定する権限は拒否されます" -#: commands/variable.c:895 +#: commands/variable.c:938 #, c-format msgid "permission denied to set role \"%s\"" msgstr "ロール\"%s\"を設定する権限がありません" @@ -11478,17 +11488,17 @@ msgstr "カーソル\"%s\"は行上に位置していません" msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "カーソル\"%s\"はテーブル\"%s\"を単純な更新可能スキャンではありません" -#: executor/execCurrent.c:280 executor/execExprInterp.c:2452 +#: executor/execCurrent.c:280 executor/execExprInterp.c:2464 #, 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:2464 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2476 #, c-format msgid "no value found for parameter %d" msgstr "パラメータ%dの値がありません" -#: executor/execExpr.c:636 executor/execExpr.c:643 executor/execExpr.c:649 executor/execExprInterp.c:4033 executor/execExprInterp.c:4050 executor/execExprInterp.c:4149 executor/nodeModifyTable.c:127 executor/nodeModifyTable.c:138 executor/nodeModifyTable.c:155 executor/nodeModifyTable.c:163 +#: executor/execExpr.c:636 executor/execExpr.c:643 executor/execExpr.c:649 executor/execExprInterp.c:4045 executor/execExprInterp.c:4062 executor/execExprInterp.c:4161 executor/nodeModifyTable.c:127 executor/nodeModifyTable.c:138 executor/nodeModifyTable.c:155 executor/nodeModifyTable.c:163 #, c-format msgid "table row type and query-specified row type do not match" msgstr "テーブルの行型と問い合わせで指定した行型が一致しません" @@ -11503,7 +11513,7 @@ msgstr "問い合わせの列が多すぎます" msgid "Query provides a value for a dropped column at ordinal position %d." msgstr "問い合わせで %d 番目に削除される列の値を指定しています。" -#: executor/execExpr.c:650 executor/execExprInterp.c:4051 executor/nodeModifyTable.c:139 +#: executor/execExpr.c:650 executor/execExprInterp.c:4063 executor/nodeModifyTable.c:139 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." msgstr "テーブルでは %2$d 番目の型は %1$s ですが、問い合わせでは %3$s を想定しています。" @@ -11513,107 +11523,107 @@ msgstr "テーブルでは %2$d 番目の型は %1$s ですが、問い合わせ msgid "window function calls cannot be nested" msgstr "ウィンドウ関数の呼び出しを入れ子にすることはできません" -#: executor/execExpr.c:1618 +#: executor/execExpr.c:1626 #, c-format msgid "target type is not an array" msgstr "対象型は配列ではありません" -#: executor/execExpr.c:1958 +#: executor/execExpr.c:1966 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "ROW()列の型が%2$sではなく%1$sです" -#: executor/execExpr.c:2483 executor/execSRF.c:718 parser/parse_func.c:138 parser/parse_func.c:655 parser/parse_func.c:1031 +#: executor/execExpr.c:2491 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" msgstr[0] "関数に%dを超える引数を渡せません" msgstr[1] "関数に%dを超える引数を渡せません" -#: executor/execExpr.c:2916 parser/parse_node.c:277 parser/parse_node.c:327 +#: executor/execExpr.c:2924 parser/parse_node.c:277 parser/parse_node.c:327 #, c-format msgid "cannot subscript type %s because it does not support subscripting" msgstr "添字をサポートしてないため、型%sには添え字をつけられません" -#: executor/execExpr.c:3044 executor/execExpr.c:3066 +#: executor/execExpr.c:3052 executor/execExpr.c:3074 #, c-format msgid "type %s does not support subscripted assignment" msgstr "型%sは添字指定の代入をサポートしていません" -#: executor/execExprInterp.c:1916 +#: executor/execExprInterp.c:1928 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "%2$s型の属性%1$dが削除されています" -#: executor/execExprInterp.c:1922 +#: executor/execExprInterp.c:1934 #, c-format msgid "attribute %d of type %s has wrong type" msgstr "型%2$sの属性%1$dの型が間違っています" -#: executor/execExprInterp.c:1924 executor/execExprInterp.c:3058 executor/execExprInterp.c:3104 +#: executor/execExprInterp.c:1936 executor/execExprInterp.c:3070 executor/execExprInterp.c:3116 #, c-format msgid "Table has type %s, but query expects %s." msgstr "テーブルの型は%sですが、問い合わせでは%sを想定しています。" -#: executor/execExprInterp.c:2004 utils/adt/expandedrecord.c:99 utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1751 utils/cache/typcache.c:1907 utils/cache/typcache.c:2054 utils/fmgr/funcapi.c:500 +#: executor/execExprInterp.c:2016 utils/adt/expandedrecord.c:99 utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1751 utils/cache/typcache.c:1907 utils/cache/typcache.c:2054 utils/fmgr/funcapi.c:500 #, c-format msgid "type %s is not composite" msgstr "型%sは複合型ではありません" -#: executor/execExprInterp.c:2542 +#: executor/execExprInterp.c:2554 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "このタイプのテーブルではWHERE CURRENT OFをサポートしません" -#: executor/execExprInterp.c:2755 +#: executor/execExprInterp.c:2767 #, c-format msgid "cannot merge incompatible arrays" msgstr "互換性がない配列をマージできません" -#: executor/execExprInterp.c:2756 +#: executor/execExprInterp.c:2768 #, 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:2777 utils/adt/arrayfuncs.c:264 utils/adt/arrayfuncs.c:564 utils/adt/arrayfuncs.c:1306 utils/adt/arrayfuncs.c:3429 utils/adt/arrayfuncs.c:5425 utils/adt/arrayfuncs.c:5942 utils/adt/arraysubs.c:150 utils/adt/arraysubs.c:488 +#: executor/execExprInterp.c:2789 utils/adt/arrayfuncs.c:264 utils/adt/arrayfuncs.c:564 utils/adt/arrayfuncs.c:1306 utils/adt/arrayfuncs.c:3429 utils/adt/arrayfuncs.c:5425 utils/adt/arrayfuncs.c:5942 utils/adt/arraysubs.c:150 utils/adt/arraysubs.c:488 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "配列の次元数(%d)が上限(%d)を超えています" -#: executor/execExprInterp.c:2797 executor/execExprInterp.c:2832 +#: executor/execExprInterp.c:2809 executor/execExprInterp.c:2844 #, c-format msgid "multidimensional arrays must have array expressions with matching dimensions" msgstr "多次元配列は次元が合致する配列式でなければなりません" -#: executor/execExprInterp.c:2809 utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:937 utils/adt/arrayfuncs.c:1545 utils/adt/arrayfuncs.c:2353 utils/adt/arrayfuncs.c:2368 utils/adt/arrayfuncs.c:2630 utils/adt/arrayfuncs.c:2646 utils/adt/arrayfuncs.c:2907 utils/adt/arrayfuncs.c:2961 utils/adt/arrayfuncs.c:2976 utils/adt/arrayfuncs.c:3317 utils/adt/arrayfuncs.c:3459 utils/adt/arrayfuncs.c:6034 utils/adt/arrayfuncs.c:6375 utils/adt/arrayutils.c:88 +#: executor/execExprInterp.c:2821 utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:937 utils/adt/arrayfuncs.c:1545 utils/adt/arrayfuncs.c:2353 utils/adt/arrayfuncs.c:2368 utils/adt/arrayfuncs.c:2630 utils/adt/arrayfuncs.c:2646 utils/adt/arrayfuncs.c:2907 utils/adt/arrayfuncs.c:2961 utils/adt/arrayfuncs.c:2976 utils/adt/arrayfuncs.c:3317 utils/adt/arrayfuncs.c:3459 utils/adt/arrayfuncs.c:6034 utils/adt/arrayfuncs.c:6375 utils/adt/arrayutils.c:88 #: utils/adt/arrayutils.c:97 utils/adt/arrayutils.c:104 #, c-format msgid "array size exceeds the maximum allowed (%d)" msgstr "配列の次数が上限(%d)を超えています" -#: executor/execExprInterp.c:3057 executor/execExprInterp.c:3103 +#: executor/execExprInterp.c:3069 executor/execExprInterp.c:3115 #, c-format msgid "attribute %d has wrong type" msgstr "属性%dの型が間違っています" -#: executor/execExprInterp.c:3662 utils/adt/domains.c:149 +#: executor/execExprInterp.c:3674 utils/adt/domains.c:149 #, c-format msgid "domain %s does not allow null values" msgstr "ドメイン%sはnull値を許しません" -#: executor/execExprInterp.c:3677 utils/adt/domains.c:184 +#: executor/execExprInterp.c:3689 utils/adt/domains.c:184 #, c-format msgid "value for domain %s violates check constraint \"%s\"" msgstr "ドメイン%sの値が検査制約\"%s\"に違反しています" -#: executor/execExprInterp.c:4034 +#: executor/execExprInterp.c:4046 #, 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:4150 executor/execSRF.c:977 +#: executor/execExprInterp.c:4162 executor/execSRF.c:977 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "序数位置%dの削除された属性における物理格納形式が合致しません。" @@ -11653,157 +11663,157 @@ msgstr "キー %s が既存のキー %s と競合しています" msgid "Key conflicts with existing key." msgstr "キーが既存のキーと衝突しています" -#: executor/execMain.c:1014 +#: executor/execMain.c:1006 #, c-format msgid "cannot change sequence \"%s\"" msgstr "シーケンス\"%s\"を変更できません" -#: executor/execMain.c:1020 +#: executor/execMain.c:1012 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "TOASTリレーション\"%s\"を変更できません" -#: executor/execMain.c:1038 rewrite/rewriteHandler.c:3108 rewrite/rewriteHandler.c:3953 +#: executor/execMain.c:1030 rewrite/rewriteHandler.c:3141 rewrite/rewriteHandler.c:3986 #, c-format msgid "cannot insert into view \"%s\"" msgstr "ビュー\"%s\"へは挿入(INSERT)できません" -#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3111 rewrite/rewriteHandler.c:3956 +#: executor/execMain.c:1032 rewrite/rewriteHandler.c:3144 rewrite/rewriteHandler.c:3989 #, 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:1046 rewrite/rewriteHandler.c:3116 rewrite/rewriteHandler.c:3961 +#: executor/execMain.c:1038 rewrite/rewriteHandler.c:3149 rewrite/rewriteHandler.c:3994 #, c-format msgid "cannot update view \"%s\"" msgstr "ビュー\"%s\"は更新できません" -#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3119 rewrite/rewriteHandler.c:3964 +#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3152 rewrite/rewriteHandler.c:3997 #, 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:1054 rewrite/rewriteHandler.c:3124 rewrite/rewriteHandler.c:3969 +#: executor/execMain.c:1046 rewrite/rewriteHandler.c:3157 rewrite/rewriteHandler.c:4002 #, c-format msgid "cannot delete from view \"%s\"" msgstr "ビュー\"%s\"からは削除できません" -#: executor/execMain.c:1056 rewrite/rewriteHandler.c:3127 rewrite/rewriteHandler.c:3972 +#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3160 rewrite/rewriteHandler.c:4005 #, 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:1067 +#: executor/execMain.c:1059 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "実体化ビュー\"%s\"を変更できません" -#: executor/execMain.c:1079 +#: executor/execMain.c:1071 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "外部テーブル\"%s\"への挿入ができません" -#: executor/execMain.c:1085 +#: executor/execMain.c:1077 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "外部テーブル\"%s\"は挿入を許しません" -#: executor/execMain.c:1092 +#: executor/execMain.c:1084 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "外部テーブル \"%s\"の更新ができません" -#: executor/execMain.c:1098 +#: executor/execMain.c:1090 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "外部テーブル\"%s\"は更新を許しません" -#: executor/execMain.c:1105 +#: executor/execMain.c:1097 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "外部テーブル\"%s\"からの削除ができません" -#: executor/execMain.c:1111 +#: executor/execMain.c:1103 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "外部テーブル\"%s\"は削除を許しません" -#: executor/execMain.c:1122 +#: executor/execMain.c:1114 #, c-format msgid "cannot change relation \"%s\"" msgstr "リレーション\"%s\"を変更できません" -#: executor/execMain.c:1149 +#: executor/execMain.c:1141 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "シーケンス\"%s\"では行のロックはできません" -#: executor/execMain.c:1156 +#: executor/execMain.c:1148 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "TOAST リレーション\"%s\"では行のロックはできません" -#: executor/execMain.c:1163 +#: executor/execMain.c:1155 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "ビュー\"%s\"では行のロックはできません" -#: executor/execMain.c:1171 +#: executor/execMain.c:1163 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "実体化ビュー\"%s\"では行のロックはできません" -#: executor/execMain.c:1180 executor/execMain.c:2596 executor/nodeLockRows.c:136 +#: executor/execMain.c:1172 executor/execMain.c:2591 executor/nodeLockRows.c:136 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "外部テーブル\"%s\"では行のロックはできません" -#: executor/execMain.c:1186 +#: executor/execMain.c:1178 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "リレーション\"%s\"では行のロックはできません" -#: executor/execMain.c:1812 +#: executor/execMain.c:1807 #, c-format msgid "new row for relation \"%s\" violates partition constraint" msgstr "リレーション\"%s\"の新しい行はパーティション制約に違反しています" -#: executor/execMain.c:1814 executor/execMain.c:1897 executor/execMain.c:1947 executor/execMain.c:2056 +#: executor/execMain.c:1809 executor/execMain.c:1892 executor/execMain.c:1942 executor/execMain.c:2051 #, c-format msgid "Failing row contains %s." msgstr "失敗した行は%sを含みます" -#: executor/execMain.c:1894 +#: executor/execMain.c:1889 #, c-format msgid "null value in column \"%s\" of relation \"%s\" violates not-null constraint" msgstr "リレーション\"%2$s\"の列\"%1$s\"のNULL値が非NULL制約に違反しています" -#: executor/execMain.c:1945 +#: executor/execMain.c:1940 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "リレーション\"%s\"の新しい行は検査制約\"%s\"に違反しています" -#: executor/execMain.c:2054 +#: executor/execMain.c:2049 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "新しい行はビュー\"%s\"のチェックオプションに違反しています" -#: executor/execMain.c:2064 +#: executor/execMain.c:2059 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "新しい行はテーブル\"%2$s\"行レベルセキュリティポリシ\"%1$s\"に違反しています" -#: executor/execMain.c:2069 +#: executor/execMain.c:2064 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "新しい行はテーブル\"%s\"の行レベルセキュリティポリシに違反しています" -#: executor/execMain.c:2076 +#: executor/execMain.c:2071 #, 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:2081 +#: executor/execMain.c:2076 #, c-format msgid "new row violates row-level security policy (USING expression) for table \"%s\"" msgstr "新しい行はテーブル\"%s\"の行レベルセキュリティポリシ(USING式)に違反しています" @@ -12630,7 +12640,7 @@ msgstr "%s制約をNO INHERITをマークすることはできません" msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %d" msgstr "ファイル\"%2$s\"、行%3$dに認識できない設定パラメータ \"%1$s\"" -#: guc-file.l:354 utils/misc/guc.c:7395 utils/misc/guc.c:7597 utils/misc/guc.c:7691 utils/misc/guc.c:7785 utils/misc/guc.c:7905 utils/misc/guc.c:8004 +#: guc-file.l:354 utils/misc/guc.c:7395 utils/misc/guc.c:7597 utils/misc/guc.c:7691 utils/misc/guc.c:7785 utils/misc/guc.c:7907 utils/misc/guc.c:8043 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "パラメータ\"%s\"を変更するにはサーバーの再起動が必要です" @@ -12675,7 +12685,7 @@ msgstr "設定ファイル\"%s\"をオープンできませんでした: 入れ msgid "configuration file recursion in \"%s\"" msgstr "設定ファイル\"%s\"が再帰しています" -#: guc-file.l:633 libpq/hba.c:2255 libpq/hba.c:2669 +#: guc-file.l:633 libpq/hba.c:2255 libpq/hba.c:2673 #, c-format msgid "could not open configuration file \"%s\": %m" msgstr "設定ファイル\"%s\"をオープンできませんでした: %m" @@ -14172,32 +14182,32 @@ msgstr "認証オプション名を認識できません: \"%s\"" msgid "configuration file \"%s\" contains no entries" msgstr "設定ファイル\"%s\"には何も含まれていません" -#: libpq/hba.c:2824 +#: libpq/hba.c:2828 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "不正な正規表現\"%s\": %s" -#: libpq/hba.c:2884 +#: libpq/hba.c:2888 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "正規表現\"%s\"で照合に失敗しました: %s" -#: libpq/hba.c:2903 +#: libpq/hba.c:2907 #, c-format msgid "regular expression \"%s\" has no subexpressions as requested by backreference in \"%s\"" msgstr "正規表現\"%s\"には\"%s\"における後方参照が要求する副表現が含まれていません" -#: libpq/hba.c:2999 +#: libpq/hba.c:3003 #, c-format msgid "provided user name (%s) and authenticated user name (%s) do not match" msgstr "与えられたユーザー名 (%s) と認証されたユーザー名 (%s) が一致しません" -#: libpq/hba.c:3019 +#: libpq/hba.c:3023 #, c-format msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" msgstr "\"%3$s\"として認証されたユーザー\"%2$s\"はユーザーマップ\"%1$s\"に一致しません" -#: libpq/hba.c:3052 +#: libpq/hba.c:3056 #, c-format msgid "could not open usermap file \"%s\": %m" msgstr "ユーザーマップファイル\"%s\"をオープンできませんでした: %m" @@ -14324,7 +14334,7 @@ msgstr "クライアント接続がありません" msgid "could not receive data from client: %m" msgstr "クライアントからデータを受信できませんでした: %m" -#: libpq/pqcomm.c:1179 tcop/postgres.c:4404 +#: libpq/pqcomm.c:1179 tcop/postgres.c:4409 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "プロトコルの同期が失われたためコネクションを終了します" @@ -14389,12 +14399,12 @@ msgstr "メッセージ内の文字列が不正です" msgid "invalid message format" msgstr "メッセージの書式が不正です" -#: main/main.c:245 +#: main/main.c:247 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s: WSAStartupが失敗しました: %d\n" -#: main/main.c:309 +#: main/main.c:311 #, c-format msgid "" "%s is the PostgreSQL server.\n" @@ -14403,7 +14413,7 @@ msgstr "" "%sはPostgreSQLサーバーです\n" "\n" -#: main/main.c:310 +#: main/main.c:312 #, c-format msgid "" "Usage:\n" @@ -14414,107 +14424,107 @@ msgstr "" " %s [オプション]...\n" "\n" -#: main/main.c:311 +#: main/main.c:313 #, c-format msgid "Options:\n" msgstr "オプション:\n" -#: main/main.c:312 +#: main/main.c:314 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B NBUFFERS 共有バッファの数\n" -#: main/main.c:313 +#: main/main.c:315 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c NAME=VALUE 実行時パラメータの設定\n" -#: main/main.c:314 +#: main/main.c:316 #, c-format msgid " -C NAME print value of run-time parameter, then exit\n" msgstr " -C NAME 実行時パラメータの値を表示し、終了します\n" -#: main/main.c:315 +#: main/main.c:317 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 デバッグレベル\n" -#: main/main.c:316 +#: main/main.c:318 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D DATADIR データベースディレクトリ\n" -#: main/main.c:317 +#: main/main.c:319 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e ヨーロッパ式の日付フォーマットでの入力(DMY)\n" -#: main/main.c:318 +#: main/main.c:320 #, c-format msgid " -F turn fsync off\n" msgstr " -F fsyncを無効にします\n" -#: main/main.c:319 +#: main/main.c:321 #, c-format msgid " -h HOSTNAME host name or IP address to listen on\n" msgstr " -h HOSTNAME 接続を待ち受けるホスト名またはIPアドレス\n" -#: main/main.c:320 +#: main/main.c:322 #, c-format msgid " -i enable TCP/IP connections\n" msgstr " -i TCP/IP接続を有効にします\n" -#: main/main.c:321 +#: main/main.c:323 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k DIRECTORY Unixドメインソケットの場所\n" -#: main/main.c:323 +#: main/main.c:325 #, c-format msgid " -l enable SSL connections\n" msgstr " -l SSL接続を有効にします\n" -#: main/main.c:325 +#: main/main.c:327 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N MAX-CONNECT 許容する最大接続数\n" -#: main/main.c:326 +#: main/main.c:328 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p PORT 接続を待ち受けるポート番号\n" -#: main/main.c:327 +#: main/main.c:329 #, c-format msgid " -s show statistics after each query\n" msgstr " -s 各問い合わせの後に統計情報を表示します\n" -#: main/main.c:328 +#: 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:329 +#: main/main.c:331 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示し、終了します\n" -#: main/main.c:330 +#: main/main.c:332 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --NAME=VALUE 実行時パラメータを設定します\n" -#: main/main.c:331 +#: main/main.c:333 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr " --describe-config 設定パラメータの説明を出力し、終了します\n" -#: main/main.c:332 +#: main/main.c:334 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示し、終了します\n" -#: main/main.c:334 +#: main/main.c:336 #, c-format msgid "" "\n" @@ -14523,44 +14533,44 @@ msgstr "" "\n" "開発者向けオプション:\n" -#: main/main.c:335 +#: main/main.c:337 #, c-format msgid " -f s|i|o|b|t|n|m|h forbid use of some plan types\n" msgstr " -f s|i|o|b|t|n|m|h いくつかのプランタイプを禁止します\n" -#: main/main.c:336 +#: main/main.c:338 #, c-format msgid " -n do not reinitialize shared memory after abnormal exit\n" msgstr " -n 異常終了後に共有メモリの再初期化を行いません\n" -#: main/main.c:337 +#: main/main.c:339 #, c-format msgid " -O allow system table structure changes\n" msgstr " -O システムテーブル構造の変更を許可します\n" -#: main/main.c:338 +#: main/main.c:340 #, c-format msgid " -P disable system indexes\n" msgstr " -P システムインデックスを無効にします\n" -#: main/main.c:339 +#: 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:340 +#: main/main.c:342 #, c-format msgid " -T send SIGSTOP to all backend processes if one dies\n" msgstr "" " -T ひとつのバックエンドプロセスが異常停止した時に全ての\n" " バックエンドプロセスにSIGSTOPを送信します\n" -#: main/main.c:341 +#: 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:343 +#: main/main.c:345 #, c-format msgid "" "\n" @@ -14569,39 +14579,39 @@ msgstr "" "\n" "シングルユーザーモード用のオプション:\n" -#: main/main.c:344 +#: main/main.c:346 #, c-format msgid " --single selects single-user mode (must be first argument)\n" msgstr "" " --single シングルユーザーモードを選択します(最初の引数でなければ\n" " なりません)\n" -#: main/main.c:345 +#: main/main.c:347 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " DBNAME データベース名(デフォルトはユーザー名です)\n" -#: main/main.c:346 +#: main/main.c:348 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 デバッグレベルを上書きします\n" -#: main/main.c:347 +#: main/main.c:349 #, c-format msgid " -E echo statement before execution\n" msgstr " -E 実行前に文を表示します\n" -#: main/main.c:348 +#: main/main.c:350 #, c-format msgid " -j do not use newline as interactive query delimiter\n" msgstr " -j 対話式問い合わせの区切りとして改行を使用しません\n" -#: main/main.c:349 main/main.c:354 +#: main/main.c:351 main/main.c:356 #, c-format msgid " -r FILENAME send stdout and stderr to given file\n" msgstr " -r FILENAME 標準出力と標準エラー出力を指定したファイルに出力します\n" -#: main/main.c:351 +#: main/main.c:353 #, c-format msgid "" "\n" @@ -14610,24 +14620,24 @@ msgstr "" "\n" "初期起動用のオプション:\n" -#: main/main.c:352 +#: main/main.c:354 #, c-format msgid " --boot selects bootstrapping mode (must be first argument)\n" msgstr "" " --boot 初期起動モードを選択します(最初の引数でなければ\n" " なりません)\n" -#: main/main.c:353 +#: main/main.c:355 #, c-format msgid " DBNAME database name (mandatory argument in bootstrapping mode)\n" msgstr " DBNAME データベース名(初期起動モードでは必須の引数)\n" -#: main/main.c:355 +#: main/main.c:357 #, c-format msgid " -x NUM internal use\n" msgstr " -x NUM 内部使用\n" -#: main/main.c:357 +#: main/main.c:359 #, c-format msgid "" "\n" @@ -14643,12 +14653,12 @@ msgstr "" "\n" "不具合は<%s>まで報告してください。\n" -#: main/main.c:361 +#: main/main.c:363 #, c-format msgid "%s home page: <%s>\n" msgstr "%s ホームページ: <%s>\n" -#: main/main.c:372 +#: main/main.c:374 #, c-format msgid "" "\"root\" execution of the PostgreSQL server is not permitted.\n" @@ -14661,12 +14671,12 @@ msgstr "" "する必要があります。適切なサーバーの起動方法に関する詳細はドキュメントを\n" "参照してください\n" -#: main/main.c:389 +#: main/main.c:391 #, c-format msgid "%s: real and effective user IDs must match\n" msgstr "%s: 実ユーザーIDと実効ユーザーIDは一致しなければなりません\n" -#: main/main.c:396 +#: main/main.c:398 #, c-format msgid "" "Execution of PostgreSQL by a user with administrative permissions is not\n" @@ -14695,7 +14705,7 @@ msgstr "ExtensibleNodeMethods \"%s\"は登録されていません" msgid "relation \"%s\" does not have a composite type" msgstr "リレーション\"%s\"は複合型を持っていません" -#: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2567 parser/parse_coerce.c:2705 parser/parse_coerce.c:2752 parser/parse_expr.c:2026 parser/parse_func.c:710 parser/parse_oper.c:883 utils/fmgr/funcapi.c:600 +#: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2604 parser/parse_coerce.c:2742 parser/parse_coerce.c:2789 parser/parse_expr.c:2026 parser/parse_func.c:710 parser/parse_oper.c:883 utils/fmgr/funcapi.c:600 #, c-format msgid "could not find array type for data type %s" msgstr "データ型%sの配列型がありませんでした" @@ -14732,7 +14742,7 @@ msgstr "UNION/INTERSECT/EXCEPTでは%sを使用できません" msgid "could not implement GROUP BY" msgstr "GROUP BY を実行できませんでした" -#: optimizer/plan/planner.c:1974 optimizer/plan/planner.c:3631 optimizer/plan/planner.c:4388 optimizer/prep/prepunion.c:1046 +#: optimizer/plan/planner.c:1974 optimizer/plan/planner.c:3631 optimizer/plan/planner.c:4388 optimizer/prep/prepunion.c:1045 #, c-format msgid "Some of the datatypes only support hashing, while others only support sorting." msgstr "一部のデータ型がハッシュのみをサポートする一方で、別の型はソートのみをサポートしています。" @@ -14778,7 +14788,7 @@ msgid "All column datatypes must be hashable." msgstr "すべての列のデータ型はハッシュ可能でなければなりません。" #. translator: %s is UNION, INTERSECT, or EXCEPT -#: optimizer/prep/prepunion.c:1045 +#: optimizer/prep/prepunion.c:1044 #, c-format msgid "could not implement %s" msgstr "%sを実行できませんでした" @@ -15655,113 +15665,113 @@ 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:1383 +#: parser/parse_coerce.c:1420 #, c-format msgid "%s types %s and %s cannot be matched" msgstr "%sの型%sと%sを一致させることができません" -#: parser/parse_coerce.c:1499 +#: parser/parse_coerce.c:1536 #, 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:1551 +#: parser/parse_coerce.c:1588 #, c-format msgid "%s could not convert type %s to %s" msgstr "%sで型%sから%sへ変換できませんでした" -#: parser/parse_coerce.c:2154 parser/parse_coerce.c:2174 parser/parse_coerce.c:2194 parser/parse_coerce.c:2215 parser/parse_coerce.c:2270 parser/parse_coerce.c:2304 +#: parser/parse_coerce.c:2191 parser/parse_coerce.c:2211 parser/parse_coerce.c:2231 parser/parse_coerce.c:2252 parser/parse_coerce.c:2307 parser/parse_coerce.c:2341 #, c-format msgid "arguments declared \"%s\" are not all alike" msgstr "\"%s\"と宣言された引数が全て同じでありません" -#: parser/parse_coerce.c:2249 parser/parse_coerce.c:2362 utils/fmgr/funcapi.c:531 +#: parser/parse_coerce.c:2286 parser/parse_coerce.c:2399 utils/fmgr/funcapi.c:531 #, c-format msgid "argument declared %s is not an array but type %s" msgstr "%sと宣言された引数が配列ではなく%s型です" -#: parser/parse_coerce.c:2282 parser/parse_coerce.c:2432 utils/fmgr/funcapi.c:545 +#: parser/parse_coerce.c:2319 parser/parse_coerce.c:2469 utils/fmgr/funcapi.c:545 #, c-format msgid "argument declared %s is not a range type but type %s" msgstr "%sと宣言された引数が範囲型ではなく型%sです" -#: parser/parse_coerce.c:2316 parser/parse_coerce.c:2396 parser/parse_coerce.c:2529 utils/fmgr/funcapi.c:563 utils/fmgr/funcapi.c:628 +#: parser/parse_coerce.c:2353 parser/parse_coerce.c:2433 parser/parse_coerce.c:2566 utils/fmgr/funcapi.c:563 utils/fmgr/funcapi.c:628 #, c-format msgid "argument declared %s is not a multirange type but type %s" msgstr "%sと宣言された引数が複範囲型ではなく型%sです" -#: parser/parse_coerce.c:2353 +#: parser/parse_coerce.c:2390 #, c-format msgid "cannot determine element type of \"anyarray\" argument" msgstr "\"anyarray\"型の引数の要素型を決定できません" -#: parser/parse_coerce.c:2379 parser/parse_coerce.c:2410 parser/parse_coerce.c:2449 parser/parse_coerce.c:2515 +#: parser/parse_coerce.c:2416 parser/parse_coerce.c:2447 parser/parse_coerce.c:2486 parser/parse_coerce.c:2552 #, c-format msgid "argument declared %s is not consistent with argument declared %s" msgstr "%sと宣言された引数と%sと宣言された引数とで整合性がありません" -#: parser/parse_coerce.c:2474 +#: parser/parse_coerce.c:2511 #, c-format msgid "could not determine polymorphic type because input has type %s" msgstr "入力型が%sであったため多様型が特定できませんでした" -#: parser/parse_coerce.c:2488 +#: parser/parse_coerce.c:2525 #, c-format msgid "type matched to anynonarray is an array type: %s" msgstr "anynonarrayと照合されたは配列型です: %s" -#: parser/parse_coerce.c:2498 +#: parser/parse_coerce.c:2535 #, c-format msgid "type matched to anyenum is not an enum type: %s" msgstr "anyenumと照合された型は列挙型ではありません: %s" -#: parser/parse_coerce.c:2559 +#: parser/parse_coerce.c:2596 #, c-format msgid "arguments of anycompatible family cannot be cast to a common type" msgstr "anycompatible系の引数を共通の型にキャストできません" -#: parser/parse_coerce.c:2577 parser/parse_coerce.c:2598 parser/parse_coerce.c:2648 parser/parse_coerce.c:2653 parser/parse_coerce.c:2717 parser/parse_coerce.c:2729 +#: parser/parse_coerce.c:2614 parser/parse_coerce.c:2635 parser/parse_coerce.c:2685 parser/parse_coerce.c:2690 parser/parse_coerce.c:2754 parser/parse_coerce.c:2766 #, c-format msgid "could not determine polymorphic type %s because input has type %s" msgstr "入力型が%2$sであるため多様型%1$sが特定できませんでした" -#: parser/parse_coerce.c:2587 +#: parser/parse_coerce.c:2624 #, c-format msgid "anycompatiblerange type %s does not match anycompatible type %s" msgstr "anycompatiblerange型%sはanycompatiblerange型%sと合致しません" -#: parser/parse_coerce.c:2608 +#: parser/parse_coerce.c:2645 #, c-format msgid "anycompatiblemultirange type %s does not match anycompatible type %s" msgstr "anycompatiblemultirange型%sはanycompatible型%sと合致しません" -#: parser/parse_coerce.c:2622 +#: parser/parse_coerce.c:2659 #, c-format msgid "type matched to anycompatiblenonarray is an array type: %s" msgstr "anycompatiblenonarrayに対応する型が配列型です: %s" -#: parser/parse_coerce.c:2857 +#: parser/parse_coerce.c:2894 #, c-format msgid "A result of type %s requires at least one input of type anyrange or anymultirange." msgstr "%s型の結果にはanyrangeまたはanymultirange型のの入力が最低でも一つ必要です。" -#: parser/parse_coerce.c:2874 +#: parser/parse_coerce.c:2911 #, c-format msgid "A result of type %s requires at least one input of type anycompatiblerange or anycompatiblemultirange." msgstr "%s型の返却値には少なくとも一つの anycompatiblerange型またはanycompatiblemultirange型の入力が必要です。" -#: parser/parse_coerce.c:2886 +#: parser/parse_coerce.c:2923 #, c-format msgid "A result of type %s requires at least one input of type anyelement, anyarray, anynonarray, anyenum, anyrange, or anymultirange." msgstr "%s型の返却値には少なくとも一つの anyelement, anyarray, anynonarray, anyenum, anyrange, またはanymultirange型の入力が必要です。" -#: parser/parse_coerce.c:2898 +#: parser/parse_coerce.c:2935 #, c-format msgid "A result of type %s requires at least one input of type anycompatible, anycompatiblearray, anycompatiblenonarray, anycompatiblerange, or anycompatiblemultirange." msgstr "%s型の返却値には少なくとも一つの anycompatible, anycompatiblearray, anycompatiblenonarray, anycompatiblerangeまたはanycompatiblemultirange型の入力が必要です。" -#: parser/parse_coerce.c:2928 +#: parser/parse_coerce.c:2965 msgid "A result of type internal requires at least one input of type internal." msgstr "internal型の返却値には少なくとも1つのinternal型の入力が必要です。" @@ -16977,7 +16987,7 @@ msgstr "ルールのWHERE条件に他のリレーションへの参照を持た msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions" msgstr "ルールのWHERE条件はSELECT、INSERT、UPDATE、DELETE動作のみを持つことができます" -#: parser/parse_utilcmd.c:3154 parser/parse_utilcmd.c:3255 rewrite/rewriteHandler.c:533 rewrite/rewriteManip.c:1021 +#: parser/parse_utilcmd.c:3154 parser/parse_utilcmd.c:3255 rewrite/rewriteHandler.c:539 rewrite/rewriteManip.c:1022 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "条件付きのUNION/INTERSECT/EXCEPT文は実装されていません" @@ -17282,12 +17292,12 @@ msgstr "このプラットフォームではヒュージページをサポート msgid "huge pages not supported with the current shared_memory_type setting" msgstr "ヒュージページは現在のshared_memory_typeの設定ではサポートされません" -#: port/pg_shmem.c:753 port/sysv_shmem.c:753 utils/init/miscinit.c:1180 +#: port/pg_shmem.c:753 port/sysv_shmem.c:753 utils/init/miscinit.c:1224 #, c-format msgid "pre-existing shared memory block (key %lu, ID %lu) is still in use" msgstr "既存の共有メモリブロック(キー%lu、ID %lu)がまだ使用中です" -#: port/pg_shmem.c:756 port/sysv_shmem.c:756 utils/init/miscinit.c:1182 +#: port/pg_shmem.c:756 port/sysv_shmem.c:756 utils/init/miscinit.c:1226 #, c-format msgid "Terminate any old server processes associated with data directory \"%s\"." msgstr "データディレクトリ \"%s\". に対応する古いサーバプロセスをすべて終了させてください。" @@ -17445,32 +17455,32 @@ msgstr "自動VACUUM起動プロセスを fork できませんでした: %m" msgid "could not fork autovacuum worker process: %m" msgstr "自動VACUUMワーカープロセスをforkできませんでした: %m" -#: postmaster/autovacuum.c:2317 +#: postmaster/autovacuum.c:2319 #, c-format msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "自動VACUUM: 孤立した一時テーブル\"%s.%s.%s\"を削除します" -#: postmaster/autovacuum.c:2546 +#: postmaster/autovacuum.c:2548 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "テーブル\"%s.%s.%s\"に対する自動VACUUM" -#: postmaster/autovacuum.c:2549 +#: postmaster/autovacuum.c:2551 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "テーブル\"%s.%s.%s\"に対する自動ANALYZE" -#: postmaster/autovacuum.c:2742 +#: postmaster/autovacuum.c:2744 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "リレーション\"%s.%s.%s\"の作業エントリを処理しています" -#: postmaster/autovacuum.c:3428 +#: postmaster/autovacuum.c:3430 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "誤設定のため自動VACUUMが起動できません" -#: postmaster/autovacuum.c:3429 +#: postmaster/autovacuum.c:3431 #, c-format msgid "Enable the \"track_counts\" option." msgstr "\"track_counts\"オプションを有効にしてください。" @@ -17554,52 +17564,52 @@ msgstr "チェックポイント要求が失敗しました" msgid "Consult recent messages in the server log for details." msgstr "詳細はサーバーログの最近のメッセージを調査してください" -#: postmaster/pgarch.c:365 +#: postmaster/pgarch.c:417 #, c-format msgid "archive_mode enabled, yet archive_command is not set" msgstr "archive_modeは有効ですが、archive_commandが設定されていません" -#: postmaster/pgarch.c:387 +#: postmaster/pgarch.c:439 #, c-format msgid "removed orphan archive status file \"%s\"" msgstr "孤立したアーカイブステータスファイル\"%s\"を削除しました" -#: postmaster/pgarch.c:397 +#: postmaster/pgarch.c:449 #, c-format msgid "removal of orphan archive status file \"%s\" failed too many times, will try again later" msgstr "孤立したアーカイブステータスファイル\"%s\"の削除の失敗回数が上限を超えました、あとでリトライします" -#: postmaster/pgarch.c:433 +#: postmaster/pgarch.c:485 #, c-format msgid "archiving write-ahead log file \"%s\" failed too many times, will try again later" msgstr "先行書き込みログファイル\"%s\"のアーカイブ処理の失敗回数が超過しました、後で再度試します" -#: postmaster/pgarch.c:534 +#: postmaster/pgarch.c:586 #, c-format msgid "archive command failed with exit code %d" msgstr "アーカイブコマンドがリターンコード %dで失敗しました" -#: postmaster/pgarch.c:536 postmaster/pgarch.c:546 postmaster/pgarch.c:552 postmaster/pgarch.c:561 +#: postmaster/pgarch.c:588 postmaster/pgarch.c:598 postmaster/pgarch.c:604 postmaster/pgarch.c:613 #, c-format msgid "The failed archive command was: %s" msgstr "失敗したアーカイブコマンドは次のとおりです: %s" -#: postmaster/pgarch.c:543 +#: postmaster/pgarch.c:595 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "アーカイブコマンドが例外0x%Xで終了しました" -#: postmaster/pgarch.c:545 postmaster/postmaster.c:3758 +#: postmaster/pgarch.c:597 postmaster/postmaster.c:3759 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "16進値の説明についてはC インクルードファイル\"ntstatus.h\"を参照してください。" -#: postmaster/pgarch.c:550 +#: postmaster/pgarch.c:602 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "アーカイブコマンドはシグナル%dにより終了しました: %s" -#: postmaster/pgarch.c:559 +#: postmaster/pgarch.c:611 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "アーカイブコマンドは認識できないステータス%dで終了しました" @@ -17795,7 +17805,7 @@ msgstr "この後のログ出力はログ配送先\"%s\"に出力されます。 msgid "starting %s" msgstr "%s を起動しています" -#: postmaster/postmaster.c:1161 postmaster/postmaster.c:1260 utils/init/miscinit.c:1640 +#: postmaster/postmaster.c:1161 postmaster/postmaster.c:1260 utils/init/miscinit.c:1684 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "パラメータ\"%s\"のリスト構文が不正です" @@ -17845,32 +17855,32 @@ msgstr "%s: 外部PIDファイル\"%s\"に書き出せませんでした: %s\n" msgid "could not load pg_hba.conf" msgstr "pg_hba.conf の読み込みができませんでした" -#: postmaster/postmaster.c:1394 +#: postmaster/postmaster.c:1396 #, c-format msgid "postmaster became multithreaded during startup" msgstr "postmasterは起動値処理中はマルチスレッドで動作します" -#: postmaster/postmaster.c:1395 +#: postmaster/postmaster.c:1397 postmaster/postmaster.c:5148 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "LC_ALL環境変数を使用可能なロケールに設定してください。" -#: postmaster/postmaster.c:1490 +#: postmaster/postmaster.c:1492 #, c-format msgid "%s: could not locate my own executable path" msgstr "%s: 自身の実行ファイルが見つかりませんでした" -#: postmaster/postmaster.c:1497 +#: postmaster/postmaster.c:1499 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: 一致するpostgres実行ファイルがありませんでした" -#: postmaster/postmaster.c:1520 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1522 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:1547 +#: postmaster/postmaster.c:1549 #, c-format msgid "" "%s: could not find the database system\n" @@ -17881,470 +17891,470 @@ msgstr "" "ディレクトリ\"%s\"にあるものと想定していましたが、\n" "ファイル\"%s\"をオープンできませんでした: %s\n" -#: postmaster/postmaster.c:1724 +#: postmaster/postmaster.c:1726 #, c-format msgid "select() failed in postmaster: %m" msgstr "postmasterでselect()が失敗しました: %m" -#: postmaster/postmaster.c:1860 +#: postmaster/postmaster.c:1862 #, c-format msgid "issuing SIGKILL to recalcitrant children" msgstr "手に負えない子プロセスにSIGKILLを送出します" -#: postmaster/postmaster.c:1881 +#: postmaster/postmaster.c:1883 #, c-format msgid "performing immediate shutdown because data directory lock file is invalid" msgstr "データディレクトリのロックファイルが不正なため、即時シャットダウンを実行中です" -#: postmaster/postmaster.c:1984 postmaster/postmaster.c:2012 +#: postmaster/postmaster.c:1986 postmaster/postmaster.c:2014 #, c-format msgid "incomplete startup packet" msgstr "開始パケットが不完全です" -#: postmaster/postmaster.c:1996 postmaster/postmaster.c:2029 +#: postmaster/postmaster.c:1998 postmaster/postmaster.c:2031 #, c-format msgid "invalid length of startup packet" msgstr "不正な開始パケット長" -#: postmaster/postmaster.c:2058 +#: postmaster/postmaster.c:2060 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "SSLネゴシエーション応答の送信に失敗しました: %m" -#: postmaster/postmaster.c:2076 +#: postmaster/postmaster.c:2078 #, c-format msgid "received unencrypted data after SSL request" msgstr "SSL要求の後に非暗号化データを受信しました" -#: postmaster/postmaster.c:2077 postmaster/postmaster.c:2121 +#: postmaster/postmaster.c:2079 postmaster/postmaster.c:2123 #, c-format msgid "This could be either a client-software bug or evidence of an attempted man-in-the-middle attack." msgstr "これはクライアントソフトウェアのバグであるか、man-in-the-middle攻撃の証左である可能性があります。" -#: postmaster/postmaster.c:2102 +#: postmaster/postmaster.c:2104 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "GSSAPIネゴシエーション応答の送信に失敗しました: %m" -#: postmaster/postmaster.c:2120 +#: postmaster/postmaster.c:2122 #, c-format msgid "received unencrypted data after GSSAPI encryption request" msgstr "GSSAPI暗号化リクエストの後に非暗号化データを受信" -#: postmaster/postmaster.c:2144 +#: postmaster/postmaster.c:2146 #, 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:2208 utils/misc/guc.c:7138 utils/misc/guc.c:7174 utils/misc/guc.c:7244 utils/misc/guc.c:8589 utils/misc/guc.c:11563 utils/misc/guc.c:11604 +#: postmaster/postmaster.c:2210 utils/misc/guc.c:7138 utils/misc/guc.c:7174 utils/misc/guc.c:7244 utils/misc/guc.c:8628 utils/misc/guc.c:11596 utils/misc/guc.c:11637 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "パラメータ\"%s\"の値が不正です: \"%s\"" -#: postmaster/postmaster.c:2211 +#: postmaster/postmaster.c:2213 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "有効な値: \"false\", 0, \"true\", 1, \"database\"。" -#: postmaster/postmaster.c:2256 +#: postmaster/postmaster.c:2258 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "開始パケットの配置が不正です: 最終バイトはターミネータであるはずです" -#: postmaster/postmaster.c:2273 +#: postmaster/postmaster.c:2275 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "開始パケットで指定されたPostgreSQLユーザー名は存在しません" -#: postmaster/postmaster.c:2337 +#: postmaster/postmaster.c:2339 #, c-format msgid "the database system is starting up" msgstr "データベースシステムは起動処理中です" -#: postmaster/postmaster.c:2343 +#: postmaster/postmaster.c:2345 #, c-format msgid "the database system is not yet accepting connections" msgstr "データベースシステムはまだ接続を受け付けていません" -#: postmaster/postmaster.c:2344 +#: postmaster/postmaster.c:2346 #, c-format msgid "Consistent recovery state has not been yet reached." msgstr "リカバリは一貫性を確保する時点に到達していません" -#: postmaster/postmaster.c:2348 +#: postmaster/postmaster.c:2350 #, c-format msgid "the database system is not accepting connections" msgstr "データベースシステムは接続を受け付けていません" -#: postmaster/postmaster.c:2349 +#: postmaster/postmaster.c:2351 #, c-format msgid "Hot standby mode is disabled." msgstr "ホットスタンバイモードは無効です。" -#: postmaster/postmaster.c:2354 +#: postmaster/postmaster.c:2356 #, c-format msgid "the database system is shutting down" msgstr "データベースシステムはシャットダウンしています" -#: postmaster/postmaster.c:2359 +#: postmaster/postmaster.c:2361 #, c-format msgid "the database system is in recovery mode" msgstr "データベースシステムはリカバリモードです" -#: postmaster/postmaster.c:2364 storage/ipc/procarray.c:499 storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:361 +#: postmaster/postmaster.c:2366 storage/ipc/procarray.c:499 storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:361 #, c-format msgid "sorry, too many clients already" msgstr "現在クライアント数が多すぎます" -#: postmaster/postmaster.c:2454 +#: postmaster/postmaster.c:2456 #, c-format msgid "wrong key in cancel request for process %d" msgstr "プロセス%dに対するキャンセル要求においてキーが間違っています" -#: postmaster/postmaster.c:2466 +#: postmaster/postmaster.c:2468 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "キャンセル要求内のPID %dがどのプロセスにも一致しません" -#: postmaster/postmaster.c:2720 +#: postmaster/postmaster.c:2721 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "SIGHUPを受け取りました。設定ファイルをリロードしています" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2746 postmaster/postmaster.c:2750 +#: postmaster/postmaster.c:2747 postmaster/postmaster.c:2751 #, c-format msgid "%s was not reloaded" msgstr "%s は再読み込みされていません" -#: postmaster/postmaster.c:2760 +#: postmaster/postmaster.c:2761 #, c-format msgid "SSL configuration was not reloaded" msgstr "SSL設定は再読み込みされていません" -#: postmaster/postmaster.c:2816 +#: postmaster/postmaster.c:2817 #, c-format msgid "received smart shutdown request" msgstr "スマートシャットダウン要求を受け取りました" -#: postmaster/postmaster.c:2862 +#: postmaster/postmaster.c:2863 #, c-format msgid "received fast shutdown request" msgstr "高速シャットダウン要求を受け取りました" -#: postmaster/postmaster.c:2880 +#: postmaster/postmaster.c:2881 #, c-format msgid "aborting any active transactions" msgstr "活動中の全トランザクションをアボートしています" -#: postmaster/postmaster.c:2904 +#: postmaster/postmaster.c:2905 #, c-format msgid "received immediate shutdown request" msgstr "即時シャットダウン要求を受け取りました" -#: postmaster/postmaster.c:2981 +#: postmaster/postmaster.c:2982 #, c-format msgid "shutdown at recovery target" msgstr "リカバリ目標でシャットダウンします" -#: postmaster/postmaster.c:2999 postmaster/postmaster.c:3035 +#: postmaster/postmaster.c:3000 postmaster/postmaster.c:3036 msgid "startup process" msgstr "起動プロセス" -#: postmaster/postmaster.c:3002 +#: postmaster/postmaster.c:3003 #, c-format msgid "aborting startup due to startup process failure" msgstr "起動プロセスの失敗のため起動を中断しています" -#: postmaster/postmaster.c:3077 +#: postmaster/postmaster.c:3078 #, c-format msgid "database system is ready to accept connections" msgstr "データベースシステムの接続受け付け準備が整いました" -#: postmaster/postmaster.c:3098 +#: postmaster/postmaster.c:3099 msgid "background writer process" msgstr "バックグランドライタプロセス" -#: postmaster/postmaster.c:3152 +#: postmaster/postmaster.c:3153 msgid "checkpointer process" msgstr "チェックポイント処理プロセス" -#: postmaster/postmaster.c:3168 +#: postmaster/postmaster.c:3169 msgid "WAL writer process" msgstr "WALライタプロセス" -#: postmaster/postmaster.c:3183 +#: postmaster/postmaster.c:3184 msgid "WAL receiver process" msgstr "WAL 受信プロセス" -#: postmaster/postmaster.c:3198 +#: postmaster/postmaster.c:3199 msgid "autovacuum launcher process" msgstr "自動VACUUM起動プロセス" -#: postmaster/postmaster.c:3216 +#: postmaster/postmaster.c:3217 msgid "archiver process" msgstr "アーカイバプロセス" -#: postmaster/postmaster.c:3231 +#: postmaster/postmaster.c:3232 msgid "statistics collector process" msgstr "統計情報収集プロセス" -#: postmaster/postmaster.c:3245 +#: postmaster/postmaster.c:3246 msgid "system logger process" msgstr "システムログ取得プロセス" -#: postmaster/postmaster.c:3309 +#: postmaster/postmaster.c:3310 #, c-format msgid "background worker \"%s\"" msgstr "バックグラウンドワーカー\"%s\"" -#: postmaster/postmaster.c:3393 postmaster/postmaster.c:3413 postmaster/postmaster.c:3420 postmaster/postmaster.c:3438 +#: postmaster/postmaster.c:3394 postmaster/postmaster.c:3414 postmaster/postmaster.c:3421 postmaster/postmaster.c:3439 msgid "server process" msgstr "サーバープロセス" -#: postmaster/postmaster.c:3492 +#: postmaster/postmaster.c:3493 #, 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:3745 +#: postmaster/postmaster.c:3746 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d)は終了コード%dで終了しました" -#: postmaster/postmaster.c:3747 postmaster/postmaster.c:3759 postmaster/postmaster.c:3769 postmaster/postmaster.c:3780 +#: postmaster/postmaster.c:3748 postmaster/postmaster.c:3760 postmaster/postmaster.c:3770 postmaster/postmaster.c:3781 #, 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:3756 +#: postmaster/postmaster.c:3757 #, 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:3766 +#: postmaster/postmaster.c:3767 #, 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:3778 +#: postmaster/postmaster.c:3779 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d)は認識できないステータス%dで終了しました" -#: postmaster/postmaster.c:3992 +#: postmaster/postmaster.c:3993 #, c-format msgid "abnormal database system shutdown" msgstr "データベースシステムは異常にシャットダウンしました" -#: postmaster/postmaster.c:4030 +#: postmaster/postmaster.c:4031 #, c-format msgid "shutting down due to startup process failure" msgstr "起動プロセスの失敗のためシャットダウンします" -#: postmaster/postmaster.c:4036 +#: postmaster/postmaster.c:4037 #, c-format msgid "shutting down because restart_after_crash is off" msgstr "restart_after_crashがoffであるため、シャットダウンします" -#: postmaster/postmaster.c:4048 +#: postmaster/postmaster.c:4049 #, c-format msgid "all server processes terminated; reinitializing" msgstr "全てのサーバープロセスが終了しました: 再初期化しています" -#: postmaster/postmaster.c:4222 postmaster/postmaster.c:5573 postmaster/postmaster.c:5964 +#: postmaster/postmaster.c:4223 postmaster/postmaster.c:5575 postmaster/postmaster.c:5966 #, c-format msgid "could not generate random cancel key" msgstr "ランダムなキャンセルキーを生成できませんでした" -#: postmaster/postmaster.c:4276 +#: postmaster/postmaster.c:4277 #, c-format msgid "could not fork new process for connection: %m" msgstr "接続用の新しいプロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:4318 +#: postmaster/postmaster.c:4319 msgid "could not fork new process for connection: " msgstr "接続用の新しいプロセスをforkできませんでした" -#: postmaster/postmaster.c:4424 +#: postmaster/postmaster.c:4425 #, c-format msgid "connection received: host=%s port=%s" msgstr "接続を受け付けました: ホスト=%s ポート番号=%s" -#: postmaster/postmaster.c:4429 +#: postmaster/postmaster.c:4430 #, c-format msgid "connection received: host=%s" msgstr "接続を受け付けました: ホスト=%s" -#: postmaster/postmaster.c:4672 +#: postmaster/postmaster.c:4673 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "サーバープロセス\"%s\"を実行できませんでした: %m" -#: postmaster/postmaster.c:4730 +#: postmaster/postmaster.c:4731 #, c-format msgid "could not create backend parameter file mapping: error code %lu" msgstr "バックエンドパラメータファイルのマッピングの作成に失敗しました: エラーコード %lu" -#: postmaster/postmaster.c:4739 +#: postmaster/postmaster.c:4740 #, c-format msgid "could not map backend parameter memory: error code %lu" msgstr "バックエンドパラメータのメモリのマップに失敗しました: エラーコード %lu" -#: postmaster/postmaster.c:4766 +#: postmaster/postmaster.c:4767 #, c-format msgid "subprocess command line too long" msgstr "サブプロセスのコマンドラインが長すぎます" -#: postmaster/postmaster.c:4784 +#: postmaster/postmaster.c:4785 #, c-format msgid "CreateProcess() call failed: %m (error code %lu)" msgstr "CreateProcess() の呼び出しに失敗しました: %m (エラーコード %lu)" -#: postmaster/postmaster.c:4811 +#: postmaster/postmaster.c:4812 #, c-format msgid "could not unmap view of backend parameter file: error code %lu" msgstr "バックエンドパラメータファイルのビューのマップ解除に失敗しました: エラーコード %lu" -#: postmaster/postmaster.c:4815 +#: postmaster/postmaster.c:4816 #, c-format msgid "could not close handle to backend parameter file: error code %lu" msgstr "バックエンドパラメータファイルのハンドルのクローズに失敗しました: エラーコード%lu" -#: postmaster/postmaster.c:4837 +#: postmaster/postmaster.c:4838 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "共有メモリの確保のリトライ回数が多すぎるため中断します" -#: postmaster/postmaster.c:4838 +#: postmaster/postmaster.c:4839 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "これはASLRまたはアンチウイルスソフトウェアが原因である可能性があります。" -#: postmaster/postmaster.c:5020 +#: postmaster/postmaster.c:5021 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "SSL構成は子プロセスでは読み込めません" -#: postmaster/postmaster.c:5146 +#: postmaster/postmaster.c:5147 #, c-format -msgid "Please report this to <%s>." -msgstr "これを<%s>まで報告してください。" +msgid "postmaster became multithreaded" +msgstr "postmasterがマルチスレッド動作になっています" -#: postmaster/postmaster.c:5233 +#: postmaster/postmaster.c:5235 #, c-format msgid "database system is ready to accept read-only connections" msgstr "データベースシステムはリードオンリー接続の受け付け準備ができました" -#: postmaster/postmaster.c:5497 +#: postmaster/postmaster.c:5499 #, c-format msgid "could not fork startup process: %m" msgstr "起動プロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:5501 +#: postmaster/postmaster.c:5503 #, c-format msgid "could not fork archiver process: %m" msgstr "アーカイバプロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:5505 +#: postmaster/postmaster.c:5507 #, c-format msgid "could not fork background writer process: %m" msgstr "バックグランドライタプロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:5509 +#: postmaster/postmaster.c:5511 #, c-format msgid "could not fork checkpointer process: %m" msgstr "チェックポイント処理プロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:5513 +#: postmaster/postmaster.c:5515 #, c-format msgid "could not fork WAL writer process: %m" msgstr "WALライタプロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:5517 +#: postmaster/postmaster.c:5519 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "WAL 受信プロセスを fork できませんでした: %m" -#: postmaster/postmaster.c:5521 +#: postmaster/postmaster.c:5523 #, c-format msgid "could not fork process: %m" msgstr "プロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:5722 postmaster/postmaster.c:5745 +#: postmaster/postmaster.c:5724 postmaster/postmaster.c:5747 #, c-format msgid "database connection requirement not indicated during registration" msgstr "登録時にデータベース接続の必要性が示されていません" -#: postmaster/postmaster.c:5729 postmaster/postmaster.c:5752 +#: postmaster/postmaster.c:5731 postmaster/postmaster.c:5754 #, c-format msgid "invalid processing mode in background worker" msgstr "バックグラウンドワーカー内の不正な処理モード" -#: postmaster/postmaster.c:5837 +#: postmaster/postmaster.c:5839 #, c-format msgid "could not fork worker process: %m" msgstr "ワーカープロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:5950 +#: postmaster/postmaster.c:5952 #, c-format msgid "no slot available for new worker process" msgstr "新しいワーカープロセスに割り当て可能なスロットがありません" -#: postmaster/postmaster.c:6284 +#: postmaster/postmaster.c:6286 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "バックエンドで使用するためにソケット%dを複製できませんでした: エラーコード %d" -#: postmaster/postmaster.c:6316 +#: postmaster/postmaster.c:6318 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "継承したソケットを作成できませんでした: エラーコード %d\n" -#: postmaster/postmaster.c:6345 +#: postmaster/postmaster.c:6347 #, c-format msgid "could not open backend variables file \"%s\": %s\n" msgstr "バックエンド変数ファイル\"%s\"をオープンできませんでした: %s\n" -#: postmaster/postmaster.c:6352 +#: postmaster/postmaster.c:6354 #, c-format msgid "could not read from backend variables file \"%s\": %s\n" msgstr "バックエンド変数ファイル\"%s\"から読み取れませんでした: %s\n" -#: postmaster/postmaster.c:6361 +#: postmaster/postmaster.c:6363 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "ファイル\"%s\"を削除できませんでした: %s\n" -#: postmaster/postmaster.c:6378 +#: postmaster/postmaster.c:6380 #, c-format msgid "could not map view of backend variables: error code %lu\n" msgstr "バックエンド変数のビューをマップできませんでした: エラーコード %lu\n" -#: postmaster/postmaster.c:6387 +#: postmaster/postmaster.c:6389 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "バックエンド変数のビューをアンマップできませんでした: エラーコード %lu\n" -#: postmaster/postmaster.c:6394 +#: postmaster/postmaster.c:6396 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "バックエンドパラメータ変数のハンドルをクローズできませんでした: エラーコード%lu\n" -#: postmaster/postmaster.c:6556 +#: postmaster/postmaster.c:6558 #, c-format msgid "could not read exit code for process\n" msgstr "子プロセスの終了コードの読み込みができませんでした\n" -#: postmaster/postmaster.c:6598 +#: postmaster/postmaster.c:6600 #, c-format msgid "could not post child completion status\n" msgstr "個プロセスの終了コードを投稿できませんでした\n" @@ -19118,42 +19128,42 @@ msgstr "サブスクリプション\"%s\"に対応する論理レプリケーシ msgid "subscription has no replication slot set" msgstr "サブスクリプションにレプリケーションスロットが設定されていません" -#: replication/pgoutput/pgoutput.c:196 +#: replication/pgoutput/pgoutput.c:205 #, c-format msgid "invalid proto_version" msgstr "不正なproto_version" -#: replication/pgoutput/pgoutput.c:201 +#: replication/pgoutput/pgoutput.c:210 #, c-format msgid "proto_version \"%s\" out of range" msgstr "proto_version \"%s\"は範囲外です" -#: replication/pgoutput/pgoutput.c:218 +#: replication/pgoutput/pgoutput.c:227 #, c-format msgid "invalid publication_names syntax" msgstr "publication_namesの構文が不正です" -#: replication/pgoutput/pgoutput.c:289 +#: replication/pgoutput/pgoutput.c:324 #, 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:295 +#: replication/pgoutput/pgoutput.c:330 #, 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:301 +#: replication/pgoutput/pgoutput.c:336 #, c-format msgid "publication_names parameter missing" msgstr "publication_namesパラメータが指定されていません" -#: replication/pgoutput/pgoutput.c:314 +#: replication/pgoutput/pgoutput.c:349 #, c-format msgid "requested proto_version=%d does not support streaming, need %d or higher" msgstr "要求されたproto_version=%dはストリーミングをサポートしていません、バージョン%d以上が必要です" -#: replication/pgoutput/pgoutput.c:319 +#: replication/pgoutput/pgoutput.c:354 #, c-format msgid "streaming requested, but not supported by output plugin" msgstr "ストリーミングが要求されましたが、出力プラグインではサポートされていません" @@ -19434,7 +19444,7 @@ msgstr "プライマリサーバーからライムライン%u用のタイムラ msgid "could not write to log segment %s at offset %u, length %lu: %m" msgstr "ログファイルセグメント%sのオフセット%uに長さ%luで書き出せませんでした: %m" -#: replication/walsender.c:525 storage/smgr/md.c:1324 +#: replication/walsender.c:525 storage/smgr/md.c:1336 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "ファイル\"%s\"の終端へシークできませんでした: %m" @@ -19769,216 +19779,216 @@ msgstr "リレーション\"%2$s\"のルール\"%1$s\"は存在しません" msgid "renaming an ON SELECT rule is not allowed" msgstr "ON SELECTルールの名前を変更することはできません" -#: rewrite/rewriteHandler.c:577 +#: rewrite/rewriteHandler.c:583 #, 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:610 #, c-format msgid "INSERT...SELECT rule actions are not supported for queries having data-modifying statements in WITH" msgstr "INSERT...SELECTルールのアクションはWITHにデータ更新文を持つ問い合わせに対してはサポートされません" -#: rewrite/rewriteHandler.c:657 +#: rewrite/rewriteHandler.c:663 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "複数ルールではRETURNINGリストを持つことはできません" -#: rewrite/rewriteHandler.c:889 rewrite/rewriteHandler.c:928 +#: rewrite/rewriteHandler.c:895 rewrite/rewriteHandler.c:934 #, c-format msgid "cannot insert a non-DEFAULT value into column \"%s\"" msgstr "列\"%s\"へはDEFAULT以外の値の挿入はできません" -#: rewrite/rewriteHandler.c:891 rewrite/rewriteHandler.c:957 +#: rewrite/rewriteHandler.c:897 rewrite/rewriteHandler.c:963 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "列\"%s\"は GENERATED ALWAYS として定義されています。" -#: rewrite/rewriteHandler.c:893 +#: rewrite/rewriteHandler.c:899 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "OVERRIDING SYSTEM VALUE を指定することで挿入を強制できます。" -#: rewrite/rewriteHandler.c:955 rewrite/rewriteHandler.c:963 +#: rewrite/rewriteHandler.c:961 rewrite/rewriteHandler.c:969 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "列\"%s\"はDEFAULTにのみ更新可能です" -#: rewrite/rewriteHandler.c:1110 rewrite/rewriteHandler.c:1128 +#: rewrite/rewriteHandler.c:1104 rewrite/rewriteHandler.c:1122 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "同じ列\"%s\"に複数の代入があります" -#: rewrite/rewriteHandler.c:1739 rewrite/rewriteHandler.c:3141 +#: rewrite/rewriteHandler.c:1723 rewrite/rewriteHandler.c:3174 #, c-format msgid "access to non-system view \"%s\" is restricted" msgstr "非システムのビュー\"%s\"へのアクセスは制限されています" -#: rewrite/rewriteHandler.c:2148 rewrite/rewriteHandler.c:4027 +#: rewrite/rewriteHandler.c:2151 rewrite/rewriteHandler.c:4060 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "リレーション\"%s\"のルールで無限再帰を検出しました" -#: rewrite/rewriteHandler.c:2233 +#: rewrite/rewriteHandler.c:2256 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "リレーション\"%s\"のポリシで無限再帰を検出しました" -#: rewrite/rewriteHandler.c:2553 +#: rewrite/rewriteHandler.c:2586 msgid "Junk view columns are not updatable." msgstr "ジャンクビュー列は更新不可です。" -#: rewrite/rewriteHandler.c:2558 +#: rewrite/rewriteHandler.c:2591 msgid "View columns that are not columns of their base relation are not updatable." msgstr "基底リレーションの列ではないビュー列は更新不可です。" -#: rewrite/rewriteHandler.c:2561 +#: rewrite/rewriteHandler.c:2594 msgid "View columns that refer to system columns are not updatable." msgstr "システム列を参照するビュー列は更新不可です。" -#: rewrite/rewriteHandler.c:2564 +#: rewrite/rewriteHandler.c:2597 msgid "View columns that return whole-row references are not updatable." msgstr "行全体参照を返すビュー列は更新不可です。" -#: rewrite/rewriteHandler.c:2625 +#: rewrite/rewriteHandler.c:2658 msgid "Views containing DISTINCT are not automatically updatable." msgstr "DISTINCTを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2628 +#: rewrite/rewriteHandler.c:2661 msgid "Views containing GROUP BY are not automatically updatable." msgstr "GROUP BYを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2631 +#: rewrite/rewriteHandler.c:2664 msgid "Views containing HAVING are not automatically updatable." msgstr "HAVINGを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2634 +#: rewrite/rewriteHandler.c:2667 msgid "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "UNION、INTERSECT、EXCEPTを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2637 +#: rewrite/rewriteHandler.c:2670 msgid "Views containing WITH are not automatically updatable." msgstr "WITHを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2640 +#: rewrite/rewriteHandler.c:2673 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "LIMIT、OFFSETを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2652 +#: rewrite/rewriteHandler.c:2685 msgid "Views that return aggregate functions are not automatically updatable." msgstr "集約関数を返すビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2655 +#: rewrite/rewriteHandler.c:2688 msgid "Views that return window functions are not automatically updatable." msgstr "ウィンドウ関数を返すビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2658 +#: rewrite/rewriteHandler.c:2691 msgid "Views that return set-returning functions are not automatically updatable." msgstr "集合返却関数を返すビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2665 rewrite/rewriteHandler.c:2669 rewrite/rewriteHandler.c:2677 +#: rewrite/rewriteHandler.c:2698 rewrite/rewriteHandler.c:2702 rewrite/rewriteHandler.c:2710 msgid "Views that do not select from a single table or view are not automatically updatable." msgstr "単一のテーブルまたはビューからselectしていないビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2680 +#: rewrite/rewriteHandler.c:2713 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "TABLESAMPLEを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2704 +#: rewrite/rewriteHandler.c:2737 msgid "Views that have no updatable columns are not automatically updatable." msgstr "更新可能な列を持たないビューは自動更新できません。" -#: rewrite/rewriteHandler.c:3201 +#: rewrite/rewriteHandler.c:3234 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "ビュー\"%2$s\"の列\"%1$s\"への挿入はできません" -#: rewrite/rewriteHandler.c:3209 +#: rewrite/rewriteHandler.c:3242 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "ビュー\"%2$s\"の列\"%1$s\"は更新できません" -#: rewrite/rewriteHandler.c:3691 +#: rewrite/rewriteHandler.c:3724 #, c-format msgid "DO INSTEAD NOTIFY rules are not supported for data-modifying statements in WITH" msgstr "WITH句内のデータを変更する文では DO INSTEAD NOTIFY ルールはサポートされません" -#: rewrite/rewriteHandler.c:3702 +#: rewrite/rewriteHandler.c:3735 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH" msgstr "WITH句内のデータを変更する文では DO INSTEAD NOTHING ルールはサポートされません" -#: rewrite/rewriteHandler.c:3716 +#: rewrite/rewriteHandler.c:3749 #, c-format msgid "conditional DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "WITH句内のデータを変更する文では、条件付き DO INSTEAD ルールはサポートされません" -#: rewrite/rewriteHandler.c:3720 +#: rewrite/rewriteHandler.c:3753 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "WITH句内のデータを変更する文では DO ALSO ルールはサポートされません" -#: rewrite/rewriteHandler.c:3725 +#: rewrite/rewriteHandler.c:3758 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "WITH句内のデータを変更する文ではマルチステートメントの DO INSTEAD ルールはサポートされません" -#: rewrite/rewriteHandler.c:3955 rewrite/rewriteHandler.c:3963 rewrite/rewriteHandler.c:3971 +#: rewrite/rewriteHandler.c:3988 rewrite/rewriteHandler.c:3996 rewrite/rewriteHandler.c:4004 #, c-format msgid "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "条件付きDO INSTEADルールを持つビューは自動更新できません。" -#: rewrite/rewriteHandler.c:4076 +#: rewrite/rewriteHandler.c:4109 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "リレーション\"%s\"へのINSERT RETURNINGを行うことはできません" -#: rewrite/rewriteHandler.c:4078 +#: rewrite/rewriteHandler.c:4111 #, 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:4083 +#: rewrite/rewriteHandler.c:4116 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "リレーション\"%s\"へのUPDATE RETURNINGを行うことはできません" -#: rewrite/rewriteHandler.c:4085 +#: rewrite/rewriteHandler.c:4118 #, 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:4090 +#: rewrite/rewriteHandler.c:4123 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "リレーション\"%s\"へのDELETE RETURNINGを行うことはできません" -#: rewrite/rewriteHandler.c:4092 +#: rewrite/rewriteHandler.c:4125 #, 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:4110 +#: rewrite/rewriteHandler.c:4143 #, 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:4167 +#: rewrite/rewriteHandler.c:4200 #, c-format msgid "WITH cannot be used in a query that is rewritten by rules into multiple queries" msgstr "複数問い合わせに対するルールにより書き換えられた問い合わせでは WITH を使用できません" -#: rewrite/rewriteManip.c:1009 +#: rewrite/rewriteManip.c:1010 #, c-format msgid "conditional utility statements are not implemented" msgstr "条件付きのユーティリティ文は実装されていません" -#: rewrite/rewriteManip.c:1175 +#: rewrite/rewriteManip.c:1176 #, c-format msgid "WHERE CURRENT OF on a view is not implemented" msgstr "ビューに対するWHERE CURRENT OFは実装されていません" -#: rewrite/rewriteManip.c:1510 +#: rewrite/rewriteManip.c:1512 #, 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コマンドでの複数列代入の一部となる列を参照することはできません" @@ -20192,7 +20202,7 @@ msgstr "BufFile \"%s\"の一時ファイル\"%s\"のサイズの確認に失敗 msgid "could not delete shared fileset \"%s\": %m" msgstr "共有ファイルセット\"%s\"を削除できませんでした: %m" -#: storage/file/buffile.c:902 storage/smgr/md.c:309 storage/smgr/md.c:869 +#: storage/file/buffile.c:902 storage/smgr/md.c:309 storage/smgr/md.c:871 #, c-format msgid "could not truncate file \"%s\": %m" msgstr "ファイル\"%s\"の切り詰め処理ができませんでした: %m" @@ -20838,22 +20848,22 @@ msgstr "ファイル\"%2$s\"で%1$uブロックが書き出せませんでした 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:840 +#: storage/smgr/md.c:842 #, 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:895 +#: storage/smgr/md.c:897 #, c-format msgid "could not truncate file \"%s\" to %u blocks: %m" msgstr "ファイル\"%s\"を%uブロックに切り詰められませんでした: %m" -#: storage/smgr/md.c:1289 +#: storage/smgr/md.c:1301 #, 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:1303 +#: storage/smgr/md.c:1315 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "ファイル \"%s\"(対象ブロック %u)をオープンできませんでした: %m" @@ -20898,7 +20908,7 @@ msgstr "関数呼び出しメッセージ内の引数サイズ%dが不正です" msgid "incorrect binary data format in function argument %d" msgstr "関数引数%dのバイナリデータ書式が不正です" -#: tcop/postgres.c:449 tcop/postgres.c:4831 +#: tcop/postgres.c:449 tcop/postgres.c:4836 #, c-format msgid "invalid frontend message type %d" msgstr "フロントエンドメッセージタイプ%dが不正です" @@ -21149,47 +21159,47 @@ msgstr "\"max_stack_depth\"は%ldkBを越えてはなりません。" msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." msgstr "プラットフォームのスタック長制限を\"ulimit -s\"または同等の機能を使用して増加してください" -#: tcop/postgres.c:4008 +#: tcop/postgres.c:4013 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "サーバープロセスに対する不正なコマンドライン引数: %s" -#: tcop/postgres.c:4009 tcop/postgres.c:4015 +#: tcop/postgres.c:4014 tcop/postgres.c:4020 #, c-format msgid "Try \"%s --help\" for more information." msgstr "詳細は\"%s --help\"で確認してください。" -#: tcop/postgres.c:4013 +#: tcop/postgres.c:4018 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: 不正なコマンドライン引数: %s" -#: tcop/postgres.c:4076 +#: tcop/postgres.c:4081 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: データベース名もユーザー名も指定されていません" -#: tcop/postgres.c:4733 +#: tcop/postgres.c:4738 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "不正なCLOSEメッセージのサブタイプ%d" -#: tcop/postgres.c:4768 +#: tcop/postgres.c:4773 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "不正なDESCRIBEメッセージのサブタイプ%d" -#: tcop/postgres.c:4852 +#: tcop/postgres.c:4857 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "レプリケーション接続では高速関数呼び出しはサポートされていません" -#: tcop/postgres.c:4856 +#: tcop/postgres.c:4861 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "レプリケーション接続では拡張問い合わせプロトコルはサポートされていません" -#: tcop/postgres.c:5033 +#: tcop/postgres.c:5038 #, 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" @@ -21199,12 +21209,12 @@ msgstr "接続を切断: セッション時間: %d:%02d:%02d.%03d ユーザー=% msgid "bind message has %d result formats but query has %d columns" msgstr "バインドメッセージは%dの結果書式がありましたが、問い合わせは%d列でした" -#: tcop/pquery.c:941 tcop/pquery.c:1703 +#: tcop/pquery.c:939 tcop/pquery.c:1698 #, c-format msgid "cursor can only scan forward" msgstr "カーゾルは前方へのスキャンしかできません" -#: tcop/pquery.c:942 tcop/pquery.c:1704 +#: tcop/pquery.c:940 tcop/pquery.c:1699 #, c-format msgid "Declare it with SCROLL option to enable backward scan." msgstr "後方スキャンを有効にするためにはSCROLLオプションを付けて宣言してください。" @@ -23755,7 +23765,7 @@ msgstr "\"%s\"という名前の関数が複数あります" msgid "more than one operator named %s" msgstr "%sという名前の演算子が複数あります" -#: utils/adt/regproc.c:715 utils/adt/regproc.c:756 utils/adt/regproc.c:2055 utils/adt/ruleutils.c:9822 utils/adt/ruleutils.c:9991 +#: utils/adt/regproc.c:715 utils/adt/regproc.c:756 utils/adt/regproc.c:2055 utils/adt/ruleutils.c:9828 utils/adt/ruleutils.c:9997 #, c-format msgid "too many arguments" msgstr "引数が多すぎます" @@ -23935,7 +23945,7 @@ msgstr "TIMESTAMP(%d)%s の精度は負であってはなりません" msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "TIMESTAMP(%d)%sの位取りを許容最大値%dまで減らしました" -#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12468 +#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12501 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestampが範囲外です: \"%s\"" @@ -24903,177 +24913,172 @@ msgstr "列の別名が提供されていませんでした" msgid "could not determine row description for function returning record" msgstr "レコードを返す関数についての行定義を特定できませんでした" -#: utils/init/miscinit.c:314 +#: utils/init/miscinit.c:315 #, c-format msgid "data directory \"%s\" does not exist" msgstr "データディレクトリ\"%s\"は存在しません" -#: utils/init/miscinit.c:319 +#: utils/init/miscinit.c:320 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "ディレクトリ\"%s\"の権限を読み取れませんでした: %m" -#: utils/init/miscinit.c:327 +#: utils/init/miscinit.c:328 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "指定されたデータディレクトリ\"%s\"はディレクトリではありません" -#: utils/init/miscinit.c:343 +#: utils/init/miscinit.c:344 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "データディレクトリ\"%s\"の所有者情報が間違っています" -#: utils/init/miscinit.c:345 +#: utils/init/miscinit.c:346 #, c-format msgid "The server must be started by the user that owns the data directory." msgstr "データディレクトリを所有するユーザーがサーバーを起動しなければなりません。" -#: utils/init/miscinit.c:363 +#: utils/init/miscinit.c:364 #, c-format msgid "data directory \"%s\" has invalid permissions" msgstr "データディレクトリ\"%s\"の権限設定が不正です" -#: utils/init/miscinit.c:365 +#: utils/init/miscinit.c:366 #, 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:650 utils/misc/guc.c:7520 +#: utils/init/miscinit.c:684 utils/misc/guc.c:7520 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "セキュリティー制限された処理中はパラメーター\"%s\"を設定できません" -#: utils/init/miscinit.c:718 +#: utils/init/miscinit.c:763 #, c-format msgid "role with OID %u does not exist" msgstr "OID が %u であるロールは存在しません" -#: utils/init/miscinit.c:748 +#: utils/init/miscinit.c:808 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "ロール\"%s\"はログインが許可されません" -#: utils/init/miscinit.c:766 +#: utils/init/miscinit.c:829 #, c-format msgid "too many connections for role \"%s\"" msgstr "ロール\"%s\"からの接続が多すぎます" -#: utils/init/miscinit.c:834 -#, c-format -msgid "permission denied to set session authorization" -msgstr "set session authorization用の権限がありません" - -#: utils/init/miscinit.c:917 +#: utils/init/miscinit.c:961 #, c-format msgid "invalid role OID: %u" msgstr "不正なロールID: %u" -#: utils/init/miscinit.c:971 +#: utils/init/miscinit.c:1015 #, c-format msgid "database system is shut down" msgstr "データベースシステムはシャットダウンしました" -#: utils/init/miscinit.c:1058 +#: utils/init/miscinit.c:1102 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "ロックファイル\"%s\"を作成できませんでした: %m" -#: utils/init/miscinit.c:1072 +#: utils/init/miscinit.c:1116 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "ロックファイル\"%s\"をオープンできませんでした: %m" -#: utils/init/miscinit.c:1079 +#: utils/init/miscinit.c:1123 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "ロックファイル\"%s\"を読み取れませんでした: %m" -#: utils/init/miscinit.c:1088 +#: utils/init/miscinit.c:1132 #, c-format msgid "lock file \"%s\" is empty" msgstr "ロックファイル\"%s\"が空です" -#: utils/init/miscinit.c:1089 +#: utils/init/miscinit.c:1133 #, 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:1133 +#: utils/init/miscinit.c:1177 #, c-format msgid "lock file \"%s\" already exists" msgstr "ロックファイル\"%s\"はすでに存在します" -#: utils/init/miscinit.c:1137 +#: utils/init/miscinit.c:1181 #, c-format msgid "Is another postgres (PID %d) running in data directory \"%s\"?" msgstr "他のpostgres(PID %d)がデータディレクトリ\"%s\"で稼動していませんか?" -#: utils/init/miscinit.c:1139 +#: utils/init/miscinit.c:1183 #, c-format msgid "Is another postmaster (PID %d) running in data directory \"%s\"?" msgstr "他のpostmaster(PID %d)がデータディレクトリ\"%s\"で稼動していませんか?" -#: utils/init/miscinit.c:1142 +#: utils/init/miscinit.c:1186 #, c-format msgid "Is another postgres (PID %d) using socket file \"%s\"?" msgstr "他のpostgres(PID %d)がソケットファイル\"%s\"を使用していませんか?" -#: utils/init/miscinit.c:1144 +#: utils/init/miscinit.c:1188 #, c-format msgid "Is another postmaster (PID %d) using socket file \"%s\"?" msgstr "他のpostmaster(PID %d)がソケットファイル\"%s\"を使用していませんか?" -#: utils/init/miscinit.c:1195 +#: utils/init/miscinit.c:1239 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "古いロックファイル\"%s\"を削除できませんでした: %m" -#: utils/init/miscinit.c:1197 +#: utils/init/miscinit.c:1241 #, 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:1234 utils/init/miscinit.c:1248 utils/init/miscinit.c:1259 +#: utils/init/miscinit.c:1278 utils/init/miscinit.c:1292 utils/init/miscinit.c:1303 #, c-format msgid "could not write lock file \"%s\": %m" msgstr "ロックファイル\"%s\"に書き出せませんでした: %m" -#: utils/init/miscinit.c:1370 utils/init/miscinit.c:1512 utils/misc/guc.c:10434 +#: utils/init/miscinit.c:1414 utils/init/miscinit.c:1556 utils/misc/guc.c:10473 #, c-format msgid "could not read from file \"%s\": %m" msgstr "ファイル\"%s\"から読み取れませんでした: %m" -#: utils/init/miscinit.c:1500 +#: utils/init/miscinit.c:1544 #, c-format msgid "could not open file \"%s\": %m; continuing anyway" msgstr "ファイル\"%s\"をオープンできませんでした: %m; とりあえず続けます" -#: utils/init/miscinit.c:1525 +#: utils/init/miscinit.c:1569 #, c-format msgid "lock file \"%s\" contains wrong PID: %ld instead of %ld" msgstr "ロックファイル\"%s\"が誤ったPIDをもっています: %ld、正しくは%ld" -#: utils/init/miscinit.c:1564 utils/init/miscinit.c:1580 +#: utils/init/miscinit.c:1608 utils/init/miscinit.c:1624 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "\"%s\"は有効なデータディレクトリではありません" -#: utils/init/miscinit.c:1566 +#: utils/init/miscinit.c:1610 #, c-format msgid "File \"%s\" is missing." msgstr "ファイル\"%s\"が存在しません" -#: utils/init/miscinit.c:1582 +#: utils/init/miscinit.c:1626 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "ファイル\"%s\"に有効なデータがありません。" -#: utils/init/miscinit.c:1584 +#: utils/init/miscinit.c:1628 #, c-format msgid "You might need to initdb." msgstr "initdbする必要があるかもしれません" -#: utils/init/miscinit.c:1592 +#: utils/init/miscinit.c:1636 #, c-format msgid "The data directory was initialized by PostgreSQL version %s, which is not compatible with this version %s." msgstr "データディレクトリはPostgreSQLバージョン%sで初期化されましたが、これはバージョン%sとは互換性がありません" @@ -25146,87 +25151,87 @@ msgstr "データベース\"%s\"へのアクセスが拒否されました" msgid "User does not have CONNECT privilege." msgstr "ユーザーはCONNECT権限を持ちません。" -#: utils/init/postinit.c:376 +#: utils/init/postinit.c:379 #, c-format msgid "too many connections for database \"%s\"" msgstr "データベース\"%s\"への接続が多すぎます" -#: utils/init/postinit.c:398 utils/init/postinit.c:405 +#: utils/init/postinit.c:401 utils/init/postinit.c:408 #, c-format msgid "database locale is incompatible with operating system" msgstr "データベースのロケールがオペレーティングシステムと互換性がありません" -#: utils/init/postinit.c:399 +#: utils/init/postinit.c:402 #, 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:401 utils/init/postinit.c:408 +#: utils/init/postinit.c:404 utils/init/postinit.c:411 #, c-format msgid "Recreate the database with another locale or install the missing locale." msgstr "データベースを別のロケールで再生成するか、または不足しているロケールをインストールしてください" -#: utils/init/postinit.c:406 +#: utils/init/postinit.c:409 #, 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:761 +#: utils/init/postinit.c:764 #, c-format msgid "no roles are defined in this database system" msgstr "データベースシステム内でロールが定義されていません" -#: utils/init/postinit.c:762 +#: utils/init/postinit.c:765 #, c-format msgid "You should immediately run CREATE USER \"%s\" SUPERUSER;." msgstr "すぐに CREATE USER \"%s\" SUPERUSER; を実行してください。" -#: utils/init/postinit.c:798 +#: utils/init/postinit.c:801 #, c-format msgid "new replication connections are not allowed during database shutdown" msgstr "データベースのシャットダウン中は、新しいレプリケーション接続は許可されません" -#: utils/init/postinit.c:802 +#: utils/init/postinit.c:805 #, c-format msgid "must be superuser to connect during database shutdown" msgstr "データベースのシャットダウン中に接続するにはスーパーユーザーである必要があります" -#: utils/init/postinit.c:812 +#: utils/init/postinit.c:815 #, c-format msgid "must be superuser to connect in binary upgrade mode" msgstr "バイナリアップグレードモード中に接続するにはスーパーユーザーである必要があります" -#: utils/init/postinit.c:825 +#: utils/init/postinit.c:828 #, c-format msgid "remaining connection slots are reserved for non-replication superuser connections" msgstr "残りの接続スロットはレプリケーションユーザーではないスーパーユーザー用に予約されています" -#: utils/init/postinit.c:835 +#: utils/init/postinit.c:838 #, c-format msgid "must be superuser or replication role to start walsender" msgstr "walsenderを起動するにはスーパーユーザーまたはreplicationロールである必要があります" -#: utils/init/postinit.c:904 +#: utils/init/postinit.c:907 #, c-format msgid "database %u does not exist" msgstr "データベース %u は存在しません" -#: utils/init/postinit.c:994 +#: utils/init/postinit.c:997 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "削除またはリネームされたばかりのようです。" -#: utils/init/postinit.c:1001 +#: utils/init/postinit.c:1004 #, c-format msgid "cannot connect to invalid database \"%s\"" msgstr "無効なデータベース\"%s\"への接続はできません" -#: utils/init/postinit.c:1021 +#: utils/init/postinit.c:1024 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "データベースのサブディレクトリ\"%s\"がありません。" -#: utils/init/postinit.c:1026 +#: utils/init/postinit.c:1029 #, c-format msgid "could not access directory \"%s\": %m" msgstr "ディレクトリ\"%s\"にアクセスできませんでした: %m" @@ -25832,8 +25837,8 @@ msgid "WITH OIDS is no longer supported; this can only be false." msgstr "WITH OIDS は今後サポートされません; false のみに設定可能です。" #: utils/misc/guc.c:1769 -msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." -msgstr "標準エラー出力、CSVログ、またはその両方をログファイルに捕捉するための子プロセスを開始します。" +msgid "Start a subprocess to capture stderr, csvlog and/or jsonlog into log files." +msgstr "標準エラー出力、CSVログ、および/またはJSONログをログファイルに記録するための子プロセスを開始します。" #: utils/misc/guc.c:1778 msgid "Truncate existing log files of same name during log rotation." @@ -27181,7 +27186,7 @@ msgstr "設定パラメータ\"%s\"は不正です" msgid "Custom parameter names must be two or more simple identifiers separated by dots." msgstr "独自パラメータの名前は2つ以上の単純識別子をピリオドでつないだ形式でなければなりません。" -#: utils/misc/guc.c:5555 utils/misc/guc.c:9327 +#: utils/misc/guc.c:5555 utils/misc/guc.c:9366 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "設定パラメータ\"%s\"は不明です" @@ -27260,7 +27265,7 @@ msgstr "%g%s%s はパラメータ\"%s\"の有効範囲 (%g .. %g) を超えて msgid "parameter \"%s\" cannot be set during a parallel operation" msgstr "パラメータ\"%s\"は並列操作中には設定できません" -#: utils/misc/guc.c:7372 utils/misc/guc.c:8572 +#: utils/misc/guc.c:7372 utils/misc/guc.c:8611 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "パラメータ\"%s\"を変更できません" @@ -27270,7 +27275,7 @@ msgstr "パラメータ\"%s\"を変更できません" msgid "parameter \"%s\" cannot be changed now" msgstr "現在パラメータ\"%s\"を変更できません" -#: utils/misc/guc.c:7423 utils/misc/guc.c:7474 utils/misc/guc.c:11390 +#: utils/misc/guc.c:7423 utils/misc/guc.c:7474 utils/misc/guc.c:11423 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "パラメータ\"%s\"を設定する権限がありません" @@ -27285,142 +27290,142 @@ msgstr "接続開始後にパラメータ\"%s\"を変更できません" msgid "cannot set parameter \"%s\" within security-definer function" msgstr "セキュリティー定義用関数内でパラメーター\"%s\"を設定できません" -#: utils/misc/guc.c:8145 utils/misc/guc.c:8192 utils/misc/guc.c:9606 +#: utils/misc/guc.c:8184 utils/misc/guc.c:8231 utils/misc/guc.c:9645 #, 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:8276 +#: utils/misc/guc.c:8315 #, c-format msgid "SET %s takes only one argument" msgstr "SET %sは1つの引数のみを取ります" -#: utils/misc/guc.c:8524 +#: utils/misc/guc.c:8563 #, c-format msgid "must be superuser to execute ALTER SYSTEM command" msgstr "ALTER SYSTEM コマンドを実行するにはスーパーユーザーである必要があります" -#: utils/misc/guc.c:8605 +#: utils/misc/guc.c:8644 #, c-format msgid "parameter value for ALTER SYSTEM must not contain a newline" msgstr "ALTER SYSTEMでのパラメータ値は改行を含んではいけません" -#: utils/misc/guc.c:8650 +#: utils/misc/guc.c:8689 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "ファイル\"%s\"の内容をパースできませんでした" -#: utils/misc/guc.c:8731 +#: utils/misc/guc.c:8770 #, c-format msgid "cannot set parameters during a parallel operation" msgstr "並列処理中はパラメータの設定はできません" -#: utils/misc/guc.c:8807 +#: utils/misc/guc.c:8846 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOTはまだ実装されていません" -#: utils/misc/guc.c:8891 +#: utils/misc/guc.c:8930 #, c-format msgid "SET requires parameter name" msgstr "SETにはパラメータ名が必要です" -#: utils/misc/guc.c:9024 +#: utils/misc/guc.c:9063 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "パラメータ\"%s\"を再定義しようとしています" -#: utils/misc/guc.c:10837 +#: utils/misc/guc.c:10870 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "パラメータ\"%s\"の\"%s\"への変更中" -#: utils/misc/guc.c:11002 +#: utils/misc/guc.c:11035 #, c-format msgid "parameter \"%s\" could not be set" msgstr "パラメータ\"%s\"を設定できません" -#: utils/misc/guc.c:11094 +#: utils/misc/guc.c:11127 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "パラメータ\"%s\"の設定をパースできません" -#: utils/misc/guc.c:11452 utils/misc/guc.c:11486 +#: utils/misc/guc.c:11485 utils/misc/guc.c:11519 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "パラメータ\"%s\"の値が無効です: %d" -#: utils/misc/guc.c:11520 +#: utils/misc/guc.c:11553 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "パラメータ\"%s\"の値が無効です: %g" -#: utils/misc/guc.c:11807 +#: utils/misc/guc.c:11840 #, 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:11819 +#: utils/misc/guc.c:11852 #, c-format msgid "Bonjour is not supported by this build" msgstr "このビルドでは bonjour はサポートされていません" -#: utils/misc/guc.c:11832 +#: utils/misc/guc.c:11865 #, c-format msgid "SSL is not supported by this build" msgstr "このインストレーションではSSLはサポートされていません" -#: utils/misc/guc.c:11844 +#: utils/misc/guc.c:11877 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "\"log_statement_stats\"が真の場合、パラメータを有効にできません" -#: utils/misc/guc.c:11856 +#: utils/misc/guc.c:11889 #, 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:12086 +#: utils/misc/guc.c:12119 #, 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:12099 +#: utils/misc/guc.c:12132 #, 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:12113 +#: utils/misc/guc.c:12146 #, c-format msgid "huge_page_size must be 0 on this platform." msgstr "このプラットフォームではhuge_page_sizeを0に設定する必要があります。" -#: utils/misc/guc.c:12127 +#: utils/misc/guc.c:12160 #, c-format msgid "client_connection_check_interval must be set to 0 on platforms that lack POLLRDHUP." msgstr "client_connection_check_intervalはPOLLRDHUPがないプラットフォームでは0に設定しなければなりません。" -#: utils/misc/guc.c:12255 +#: utils/misc/guc.c:12288 #, c-format msgid "invalid character" msgstr "不正な文字" -#: utils/misc/guc.c:12315 +#: utils/misc/guc.c:12348 #, c-format msgid "recovery_target_timeline is not a valid number." msgstr "recovery_target_timelineが妥当な数値ではありません。" -#: utils/misc/guc.c:12355 +#: utils/misc/guc.c:12388 #, c-format msgid "multiple recovery targets specified" msgstr "複数のリカバリ目標が指定されています" -#: utils/misc/guc.c:12356 +#: utils/misc/guc.c:12389 #, 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:12364 +#: utils/misc/guc.c:12397 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "\"immediate\"のみが指定可能です。" @@ -27684,3 +27689,6 @@ msgstr "読み取りのみのシリアライザブルトランザクションで #, c-format msgid "cannot import a snapshot from a different database" msgstr "異なるデータベースからのスナップショットを読み込むことはできません" + +#~ msgid "Please report this to <%s>." +#~ msgstr "これを<%s>まで報告してください。" diff --git a/src/backend/po/ru.po b/src/backend/po/ru.po index 0b3f8b7d69a..3044a238b50 100644 --- a/src/backend/po/ru.po +++ b/src/backend/po/ru.po @@ -4,14 +4,14 @@ # Serguei A. Mokhov , 2001-2005. # Oleg Bartunov , 2004-2005. # Dmitriy Olshevskiy , 2014. -# Alexander Lakhin , 2012-2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024. +# Alexander Lakhin , 2012-2025. # Maxim Yablokov , 2021, 2022, 2024. msgid "" msgstr "" "Project-Id-Version: postgres (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-11-09 07:48+0300\n" -"PO-Revision-Date: 2024-11-02 08:34+0300\n" +"POT-Creation-Date: 2025-02-08 07:45+0200\n" +"PO-Revision-Date: 2025-02-08 08:50+0200\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -37,10 +37,10 @@ msgstr "не удалось открыть файл \"%s\" для чтения: #: ../common/controldata_utils.c:96 ../common/controldata_utils.c:99 #: access/transam/timeline.c:143 access/transam/timeline.c:362 #: access/transam/twophase.c:1329 access/transam/xlog.c:3576 -#: access/transam/xlog.c:4820 access/transam/xlog.c:11665 -#: access/transam/xlog.c:11678 access/transam/xlog.c:12133 -#: access/transam/xlog.c:12213 access/transam/xlog.c:12250 -#: access/transam/xlog.c:12310 access/transam/xlogfuncs.c:703 +#: access/transam/xlog.c:4817 access/transam/xlog.c:11662 +#: access/transam/xlog.c:11675 access/transam/xlog.c:12130 +#: access/transam/xlog.c:12210 access/transam/xlog.c:12247 +#: access/transam/xlog.c:12307 access/transam/xlogfuncs.c:703 #: access/transam/xlogfuncs.c:722 commands/extension.c:3492 libpq/hba.c:534 #: replication/basebackup.c:2016 replication/logical/origin.c:729 #: replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4959 @@ -54,7 +54,7 @@ msgid "could not read file \"%s\": %m" msgstr "не удалось прочитать файл \"%s\": %m" #: ../common/controldata_utils.c:107 ../common/controldata_utils.c:111 -#: access/transam/xlog.c:3581 access/transam/xlog.c:4825 +#: access/transam/xlog.c:3581 access/transam/xlog.c:4822 #: replication/basebackup.c:2020 replication/logical/origin.c:734 #: replication/logical/origin.c:773 replication/logical/snapbuild.c:1877 #: replication/logical/snapbuild.c:1919 replication/logical/snapbuild.c:1946 @@ -68,11 +68,11 @@ msgstr "не удалось прочитать файл \"%s\" (прочитан #: ../common/controldata_utils.c:286 ../common/controldata_utils.c:289 #: access/heap/rewriteheap.c:1178 access/heap/rewriteheap.c:1281 #: access/transam/timeline.c:392 access/transam/timeline.c:438 -#: access/transam/timeline.c:516 access/transam/twophase.c:1341 +#: access/transam/timeline.c:512 access/transam/twophase.c:1341 #: access/transam/twophase.c:1753 access/transam/xlog.c:3445 #: access/transam/xlog.c:3616 access/transam/xlog.c:3621 -#: access/transam/xlog.c:3949 access/transam/xlog.c:4790 -#: access/transam/xlog.c:5715 access/transam/xlogfuncs.c:728 +#: access/transam/xlog.c:3946 access/transam/xlog.c:4787 +#: access/transam/xlog.c:5712 access/transam/xlogfuncs.c:728 #: commands/copyfrom.c:1586 commands/copyto.c:328 libpq/be-fsstubs.c:455 #: libpq/be-fsstubs.c:525 replication/logical/origin.c:667 #: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:5017 @@ -109,9 +109,9 @@ msgstr "" #: access/transam/timeline.c:111 access/transam/timeline.c:251 #: access/transam/timeline.c:348 access/transam/twophase.c:1285 #: access/transam/xlog.c:3331 access/transam/xlog.c:3487 -#: access/transam/xlog.c:3531 access/transam/xlog.c:3729 -#: access/transam/xlog.c:3814 access/transam/xlog.c:3917 -#: access/transam/xlog.c:4810 access/transam/xlogutils.c:803 +#: access/transam/xlog.c:3531 access/transam/xlog.c:3726 +#: access/transam/xlog.c:3811 access/transam/xlog.c:3914 +#: access/transam/xlog.c:4807 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:3612 @@ -123,17 +123,17 @@ msgstr "" #: storage/file/fd.c:713 storage/file/fd.c:3306 storage/file/fd.c:3524 #: storage/file/fd.c:3611 storage/smgr/md.c:506 utils/cache/relmapper.c:724 #: utils/cache/relmapper.c:842 utils/error/elog.c:1958 -#: utils/init/miscinit.c:1359 utils/init/miscinit.c:1493 -#: utils/init/miscinit.c:1570 utils/misc/guc.c:8643 utils/misc/guc.c:8675 +#: utils/init/miscinit.c:1403 utils/init/miscinit.c:1537 +#: utils/init/miscinit.c:1614 utils/misc/guc.c:8682 utils/misc/guc.c:8714 #, c-format msgid "could not open file \"%s\": %m" msgstr "не удалось открыть файл \"%s\": %m" #: ../common/controldata_utils.c:251 ../common/controldata_utils.c:254 #: access/transam/twophase.c:1726 access/transam/twophase.c:1735 -#: access/transam/xlog.c:11422 access/transam/xlog.c:11460 -#: access/transam/xlog.c:11873 access/transam/xlogfuncs.c:782 -#: postmaster/postmaster.c:5684 postmaster/syslogger.c:1499 +#: access/transam/xlog.c:11419 access/transam/xlog.c:11457 +#: access/transam/xlog.c:11870 access/transam/xlogfuncs.c:782 +#: postmaster/postmaster.c:5686 postmaster/syslogger.c:1499 #: postmaster/syslogger.c:1512 utils/cache/relmapper.c:876 #, c-format msgid "could not write file \"%s\": %m" @@ -143,40 +143,40 @@ msgstr "не удалось записать файл \"%s\": %m" #: ../common/file_utils.c:298 ../common/file_utils.c:368 #: access/heap/rewriteheap.c:960 access/heap/rewriteheap.c:1172 #: access/heap/rewriteheap.c:1275 access/transam/timeline.c:432 -#: access/transam/timeline.c:510 access/transam/twophase.c:1747 +#: access/transam/timeline.c:506 access/transam/twophase.c:1747 #: access/transam/xlog.c:3438 access/transam/xlog.c:3610 -#: access/transam/xlog.c:4783 access/transam/xlog.c:10905 -#: access/transam/xlog.c:10946 replication/logical/snapbuild.c:1774 +#: access/transam/xlog.c:4780 access/transam/xlog.c:10902 +#: access/transam/xlog.c:10943 replication/logical/snapbuild.c:1774 #: replication/slot.c:1604 replication/slot.c:1709 storage/file/fd.c:730 -#: storage/file/fd.c:3632 storage/smgr/md.c:954 storage/smgr/md.c:995 -#: storage/sync/sync.c:454 utils/cache/relmapper.c:891 utils/misc/guc.c:8430 +#: storage/file/fd.c:3632 storage/smgr/md.c:956 storage/smgr/md.c:997 +#: storage/sync/sync.c:454 utils/cache/relmapper.c:891 utils/misc/guc.c:8469 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "не удалось синхронизировать с ФС файл \"%s\": %m" #: ../common/cryptohash_openssl.c:104 ../common/exec.c:560 ../common/exec.c:605 #: ../common/exec.c:697 ../common/hmac_openssl.c:101 ../common/psprintf.c:143 -#: ../common/stringinfo.c:305 ../port/path.c:630 ../port/path.c:668 -#: ../port/path.c:685 access/transam/twophase.c:1399 access/transam/xlog.c:6695 +#: ../common/stringinfo.c:305 ../port/path.c:707 ../port/path.c:745 +#: ../port/path.c:762 access/transam/twophase.c:1399 access/transam/xlog.c:6692 #: lib/dshash.c:245 libpq/auth.c:1489 libpq/auth.c:1557 libpq/auth.c:2115 #: libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:349 -#: postmaster/bgworker.c:948 postmaster/postmaster.c:2550 -#: postmaster/postmaster.c:4208 postmaster/postmaster.c:5609 -#: postmaster/postmaster.c:5973 +#: postmaster/bgworker.c:948 postmaster/postmaster.c:2552 +#: postmaster/postmaster.c:4209 postmaster/postmaster.c:5611 +#: postmaster/postmaster.c:5975 #: replication/libpqwalreceiver/libpqwalreceiver.c:287 #: replication/logical/logical.c:206 replication/walsender.c:592 #: storage/buffer/localbuf.c:442 storage/file/fd.c:888 storage/file/fd.c:1360 #: storage/file/fd.c:1521 storage/file/fd.c:2329 storage/ipc/procarray.c:1472 #: storage/ipc/procarray.c:2293 storage/ipc/procarray.c:2300 #: storage/ipc/procarray.c:2805 storage/ipc/procarray.c:3482 -#: 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 +#: tcop/postgres.c:3655 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:5061 -#: utils/misc/guc.c:5077 utils/misc/guc.c:5090 utils/misc/guc.c:8408 +#: utils/misc/guc.c:5077 utils/misc/guc.c:5090 utils/misc/guc.c:8447 #: utils/misc/tzparser.c:476 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:702 #: utils/mmgr/dsa.c:724 utils/mmgr/dsa.c:805 utils/mmgr/generation.c:234 #: utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 @@ -207,12 +207,12 @@ msgstr "не удалось прочитать исполняемый файл \ msgid "could not find a \"%s\" to execute" msgstr "не удалось найти запускаемый файл \"%s\"" -#: ../common/exec.c:282 ../common/exec.c:321 utils/init/miscinit.c:424 +#: ../common/exec.c:282 ../common/exec.c:321 utils/init/miscinit.c:425 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "не удалось перейти в каталог \"%s\": %m" -#: ../common/exec.c:299 access/transam/xlog.c:11296 +#: ../common/exec.c:299 access/transam/xlog.c:11293 #: replication/basebackup.c:1428 utils/adt/misc.c:362 #, c-format msgid "could not read symbolic link \"%s\": %m" @@ -227,8 +227,8 @@ msgstr "ошибка в %s(): %m" #: ../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:208 utils/misc/ps_status.c:216 +#: ../common/psprintf.c:145 ../port/path.c:709 ../port/path.c:747 +#: ../port/path.c:764 utils/misc/ps_status.c:208 utils/misc/ps_status.c:216 #: utils/misc/ps_status.c:246 utils/misc/ps_status.c:254 #, c-format msgid "out of memory\n" @@ -241,23 +241,24 @@ msgstr "попытка дублирования нулевого указате #: ../common/file_utils.c:86 ../common/file_utils.c:446 #: ../common/file_utils.c:450 access/transam/twophase.c:1297 -#: access/transam/xlog.c:11398 access/transam/xlog.c:11436 -#: access/transam/xlog.c:11653 access/transam/xlogarchive.c:110 +#: access/transam/xlog.c:11395 access/transam/xlog.c:11433 +#: access/transam/xlog.c:11650 access/transam/xlogarchive.c:110 #: access/transam/xlogarchive.c:227 commands/copyfrom.c:1536 #: commands/copyto.c:730 commands/extension.c:3471 commands/tablespace.c:805 -#: commands/tablespace.c:894 replication/basebackup.c:439 -#: replication/basebackup.c:622 replication/basebackup.c:698 -#: replication/logical/snapbuild.c:1653 storage/file/copydir.c:68 -#: storage/file/copydir.c:107 storage/file/fd.c:1871 storage/file/fd.c:1957 -#: storage/file/fd.c:3157 storage/file/fd.c:3360 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 utils/adt/misc.c:348 guc-file.l:1062 +#: commands/tablespace.c:894 postmaster/pgarch.c:696 +#: replication/basebackup.c:439 replication/basebackup.c:622 +#: replication/basebackup.c:698 replication/logical/snapbuild.c:1653 +#: storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1871 +#: storage/file/fd.c:1957 storage/file/fd.c:3157 storage/file/fd.c:3360 +#: 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 utils/adt/misc.c:348 +#: guc-file.l:1062 #, c-format msgid "could not stat file \"%s\": %m" msgstr "не удалось получить информацию о файле \"%s\": %m" #: ../common/file_utils.c:161 ../common/pgfnames.c:48 commands/tablespace.c:729 -#: commands/tablespace.c:739 postmaster/postmaster.c:1518 +#: commands/tablespace.c:739 postmaster/postmaster.c:1520 #: storage/file/fd.c:2732 storage/file/reinit.c:122 utils/adt/misc.c:263 #: utils/misc/tzparser.c:338 #, c-format @@ -566,7 +567,7 @@ msgstr "" "Возможно, работе СУБД мешает антивирус, программа резервного копирования или " "что-то подобное." -#: ../port/path.c:654 +#: ../port/path.c:731 #, c-format msgid "could not get current working directory: %s\n" msgstr "не удалось определить текущий рабочий каталог: %s\n" @@ -603,7 +604,7 @@ msgstr "" "записан" #: access/brin/brin.c:1036 access/brin/brin.c:1146 access/gin/ginfast.c:1042 -#: access/transam/xlog.c:11067 access/transam/xlog.c:11604 +#: access/transam/xlog.c:11064 access/transam/xlog.c:11601 #: 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 @@ -828,7 +829,7 @@ msgstr "В RESET не должно передаваться значение п msgid "unrecognized parameter namespace \"%s\"" msgstr "нераспознанное пространство имён параметров \"%s\"" -#: access/common/reloptions.c:1294 utils/misc/guc.c:12571 +#: access/common/reloptions.c:1294 utils/misc/guc.c:12604 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "таблицы со свойством WITH OIDS не поддерживаются" @@ -941,7 +942,7 @@ msgstr "" msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "Для исправления выполните REINDEX INDEX \"%s\"." -#: access/gin/ginutil.c:145 executor/execExpr.c:2169 +#: access/gin/ginutil.c:145 executor/execExpr.c:2177 #: utils/adt/arrayfuncs.c:3873 utils/adt/arrayfuncs.c:6541 #: utils/adt/rowtypes.c:957 #, c-format @@ -1055,7 +1056,7 @@ msgstr "" #: access/hash/hashfunc.c:279 access/hash/hashfunc.c:336 catalog/heap.c:714 #: catalog/heap.c:720 commands/createas.c:206 commands/createas.c:515 -#: commands/indexcmds.c:1964 commands/tablecmds.c:17155 commands/view.c:86 +#: commands/indexcmds.c:1971 commands/tablecmds.c:17155 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:1004 utils/adt/varchar.c:733 @@ -1116,38 +1117,38 @@ msgid "" msgstr "" "в семействе операторов \"%s\" метода доступа %s нет межтипового оператора(ов)" -#: access/heap/heapam.c:2298 +#: access/heap/heapam.c:2299 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "вставлять кортежи в параллельном исполнителе нельзя" -#: access/heap/heapam.c:2769 +#: access/heap/heapam.c:2770 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "удалять кортежи во время параллельных операций нельзя" -#: access/heap/heapam.c:2815 +#: access/heap/heapam.c:2816 #, c-format msgid "attempted to delete invisible tuple" msgstr "попытка удаления невидимого кортежа" -#: access/heap/heapam.c:3261 access/heap/heapam.c:6486 access/index/genam.c:816 +#: access/heap/heapam.c:3262 access/heap/heapam.c:6529 access/index/genam.c:816 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "изменять кортежи во время параллельных операций нельзя" -#: access/heap/heapam.c:3406 +#: access/heap/heapam.c:3449 #, c-format msgid "attempted to update invisible tuple" msgstr "попытка изменения невидимого кортежа" -#: access/heap/heapam.c:4893 access/heap/heapam.c:4931 -#: access/heap/heapam.c:5196 access/heap/heapam_handler.c:457 +#: access/heap/heapam.c:4936 access/heap/heapam.c:4974 +#: access/heap/heapam.c:5239 access/heap/heapam_handler.c:457 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "не удалось получить блокировку строки в таблице \"%s\"" -#: access/heap/heapam.c:6299 commands/trigger.c:3122 +#: access/heap/heapam.c:6342 commands/trigger.c:3122 #: executor/nodeModifyTable.c:1968 executor/nodeModifyTable.c:2058 #, c-format msgid "" @@ -1177,12 +1178,12 @@ msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "не удалось записать в файл \"%s\" (записано байт: %d из %d): %m" #: access/heap/rewriteheap.c:1013 access/heap/rewriteheap.c:1131 -#: access/transam/timeline.c:329 access/transam/timeline.c:485 +#: access/transam/timeline.c:329 access/transam/timeline.c:481 #: access/transam/xlog.c:3354 access/transam/xlog.c:3545 -#: access/transam/xlog.c:4762 access/transam/xlog.c:11413 -#: access/transam/xlog.c:11451 access/transam/xlog.c:11856 -#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4633 -#: postmaster/postmaster.c:5671 replication/logical/origin.c:587 +#: access/transam/xlog.c:4759 access/transam/xlog.c:11410 +#: access/transam/xlog.c:11448 access/transam/xlog.c:11853 +#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4634 +#: postmaster/postmaster.c:5673 replication/logical/origin.c:587 #: replication/slot.c:1551 storage/file/copydir.c:167 storage/smgr/md.c:218 #: utils/time/snapmgr.c:1261 #, c-format @@ -1195,16 +1196,16 @@ msgid "could not truncate file \"%s\" to %u: %m" msgstr "не удалось обрезать файл \"%s\" до нужного размера (%u): %m" #: access/heap/rewriteheap.c:1159 access/transam/timeline.c:384 -#: access/transam/timeline.c:424 access/transam/timeline.c:502 +#: access/transam/timeline.c:424 access/transam/timeline.c:498 #: access/transam/xlog.c:3426 access/transam/xlog.c:3601 -#: access/transam/xlog.c:4774 postmaster/postmaster.c:4643 -#: postmaster/postmaster.c:4653 replication/logical/origin.c:599 +#: access/transam/xlog.c:4771 postmaster/postmaster.c:4644 +#: postmaster/postmaster.c:4654 replication/logical/origin.c:599 #: replication/logical/origin.c:641 replication/logical/origin.c:660 #: replication/logical/snapbuild.c:1750 replication/slot.c:1586 #: storage/file/buffile.c:506 storage/file/copydir.c:207 -#: utils/init/miscinit.c:1434 utils/init/miscinit.c:1445 -#: utils/init/miscinit.c:1453 utils/misc/guc.c:8391 utils/misc/guc.c:8422 -#: utils/misc/guc.c:10349 utils/misc/guc.c:10363 utils/time/snapmgr.c:1266 +#: utils/init/miscinit.c:1478 utils/init/miscinit.c:1489 +#: utils/init/miscinit.c:1497 utils/misc/guc.c:8430 utils/misc/guc.c:8461 +#: utils/misc/guc.c:10388 utils/misc/guc.c:10402 utils/time/snapmgr.c:1266 #: utils/time/snapmgr.c:1273 #, c-format msgid "could not write to file \"%s\": %m" @@ -1380,8 +1381,8 @@ msgstr[0] "замороженных страниц: %u.\n" msgstr[1] "замороженных страниц: %u.\n" msgstr[2] "замороженных страниц: %u.\n" -#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4128 -#: commands/indexcmds.c:4147 +#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4135 +#: commands/indexcmds.c:4154 #, c-format msgid "%s." msgstr "%s." @@ -1576,7 +1577,7 @@ msgid "cannot access index \"%s\" while it is being reindexed" msgstr "индекс \"%s\" перестраивается, обращаться к нему нельзя" #: access/index/indexam.c:208 catalog/objectaddress.c:1355 -#: commands/indexcmds.c:2792 commands/tablecmds.c:267 commands/tablecmds.c:291 +#: commands/indexcmds.c:2799 commands/tablecmds.c:267 commands/tablecmds.c:291 #: commands/tablecmds.c:16851 commands/tablecmds.c:18645 #, c-format msgid "\"%s\" is not an index" @@ -1718,7 +1719,7 @@ msgid "%s cannot be empty." msgstr "Значение %s не может быть пустым." # well-spelled: симв -#: access/table/tableamapi.c:122 utils/misc/guc.c:12495 +#: access/table/tableamapi.c:122 utils/misc/guc.c:12528 #, c-format msgid "%s is too long (maximum %d characters)." msgstr "Длина %s превышает предел (%d симв.)." @@ -1941,36 +1942,36 @@ msgstr "" msgid "invalid MultiXactId: %u" msgstr "неверный MultiXactId: %u" -#: access/transam/parallel.c:731 access/transam/parallel.c:850 +#: access/transam/parallel.c:737 access/transam/parallel.c:856 #, c-format msgid "parallel worker failed to initialize" msgstr "не удалось инициализировать параллельный исполнитель" -#: access/transam/parallel.c:732 access/transam/parallel.c:851 +#: access/transam/parallel.c:738 access/transam/parallel.c:857 #, c-format msgid "More details may be available in the server log." msgstr "Дополнительная информация может быть в журнале сервера." -#: access/transam/parallel.c:912 +#: access/transam/parallel.c:918 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "postmaster завершился в процессе параллельной транзакции" -#: access/transam/parallel.c:1099 +#: access/transam/parallel.c:1105 #, c-format msgid "lost connection to parallel worker" msgstr "потеряно подключение к параллельному исполнителю" -#: access/transam/parallel.c:1165 access/transam/parallel.c:1167 +#: access/transam/parallel.c:1171 access/transam/parallel.c:1173 msgid "parallel worker" msgstr "параллельный исполнитель" -#: access/transam/parallel.c:1320 +#: access/transam/parallel.c:1326 #, c-format msgid "could not map dynamic shared memory segment" msgstr "не удалось отобразить динамический сегмент разделяемой памяти" -#: access/transam/parallel.c:1325 +#: access/transam/parallel.c:1331 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "неверное магическое число в динамическом сегменте разделяемой памяти" @@ -2071,7 +2072,7 @@ msgid "Timeline IDs must be less than child timeline's ID." msgstr "" "Идентификаторы линий времени должны быть меньше идентификатора линии-потомка." -#: access/transam/timeline.c:597 +#: access/transam/timeline.c:589 #, c-format msgid "requested timeline %u is not in this server's history" msgstr "в истории сервера нет запрошенной линии времени %u" @@ -2182,7 +2183,7 @@ msgstr "" "вычисленная контрольная сумма (CRC) не соответствует значению, сохранённому " "в файле \"%s\"" -#: access/transam/twophase.c:1400 access/transam/xlog.c:6696 +#: access/transam/twophase.c:1400 access/transam/xlog.c:6693 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Не удалось разместить обработчик журнала транзакций." @@ -2459,44 +2460,44 @@ msgstr "" "Это известная и безвредная ошибка, иногда возникающая при восстановлении " "архива." -#: access/transam/xlog.c:4017 access/transam/xlogutils.c:798 +#: access/transam/xlog.c:4014 access/transam/xlogutils.c:798 #: replication/walsender.c:2557 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "запрошенный сегмент WAL %s уже удалён" -#: access/transam/xlog.c:4292 +#: access/transam/xlog.c:4289 #, c-format msgid "could not rename file \"%s\": %m" msgstr "не удалось переименовать файл \"%s\": %m" -#: access/transam/xlog.c:4334 access/transam/xlog.c:4344 +#: access/transam/xlog.c:4331 access/transam/xlog.c:4341 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "требуемый каталог WAL \"%s\" не существует" -#: access/transam/xlog.c:4350 +#: access/transam/xlog.c:4347 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "создаётся отсутствующий каталог WAL \"%s\"" -#: access/transam/xlog.c:4353 commands/dbcommands.c:2295 +#: access/transam/xlog.c:4350 commands/dbcommands.c:2295 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "не удалось создать отсутствующий каталог \"%s\": %m" -#: access/transam/xlog.c:4475 +#: access/transam/xlog.c:4472 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "неожиданный ID линии времени %u в сегменте журнала %s, смещение %u" -#: access/transam/xlog.c:4613 +#: access/transam/xlog.c:4610 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "" "новая линия времени %u не является ответвлением линии времени системы БД %u" -#: access/transam/xlog.c:4627 +#: access/transam/xlog.c:4624 #, c-format msgid "" "new timeline %u forked off current database system timeline %u before " @@ -2505,29 +2506,29 @@ msgstr "" "новая линия времени %u ответвилась от текущей линии времени базы данных %u " "до текущей точки восстановления %X/%X" -#: access/transam/xlog.c:4646 +#: access/transam/xlog.c:4643 #, c-format msgid "new target timeline is %u" msgstr "новая целевая линия времени %u" -#: access/transam/xlog.c:4682 +#: access/transam/xlog.c:4679 #, c-format msgid "could not generate secret authorization token" msgstr "не удалось сгенерировать случайное число для аутентификации" -#: access/transam/xlog.c:4841 access/transam/xlog.c:4850 -#: access/transam/xlog.c:4874 access/transam/xlog.c:4881 -#: access/transam/xlog.c:4888 access/transam/xlog.c:4893 -#: access/transam/xlog.c:4900 access/transam/xlog.c:4907 -#: access/transam/xlog.c:4914 access/transam/xlog.c:4921 -#: access/transam/xlog.c:4928 access/transam/xlog.c:4935 -#: access/transam/xlog.c:4944 access/transam/xlog.c:4951 -#: utils/init/miscinit.c:1591 +#: access/transam/xlog.c:4838 access/transam/xlog.c:4847 +#: access/transam/xlog.c:4871 access/transam/xlog.c:4878 +#: access/transam/xlog.c:4885 access/transam/xlog.c:4890 +#: access/transam/xlog.c:4897 access/transam/xlog.c:4904 +#: access/transam/xlog.c:4911 access/transam/xlog.c:4918 +#: access/transam/xlog.c:4925 access/transam/xlog.c:4932 +#: access/transam/xlog.c:4941 access/transam/xlog.c:4948 +#: utils/init/miscinit.c:1635 #, c-format msgid "database files are incompatible with server" msgstr "файлы базы данных несовместимы с сервером" -#: access/transam/xlog.c:4842 +#: access/transam/xlog.c:4839 #, c-format msgid "" "The database cluster was initialized with PG_CONTROL_VERSION %d (0x%08x), " @@ -2536,7 +2537,7 @@ msgstr "" "Кластер баз данных был инициализирован с PG_CONTROL_VERSION %d (0x%08x), но " "сервер скомпилирован с PG_CONTROL_VERSION %d (0x%08x)." -#: access/transam/xlog.c:4846 +#: access/transam/xlog.c:4843 #, c-format msgid "" "This could be a problem of mismatched byte ordering. It looks like you need " @@ -2545,7 +2546,7 @@ msgstr "" "Возможно, проблема вызвана разным порядком байт. Кажется, вам надо выполнить " "initdb." -#: access/transam/xlog.c:4851 +#: access/transam/xlog.c:4848 #, c-format msgid "" "The database cluster was initialized with PG_CONTROL_VERSION %d, but the " @@ -2554,18 +2555,18 @@ msgstr "" "Кластер баз данных был инициализирован с PG_CONTROL_VERSION %d, но сервер " "скомпилирован с PG_CONTROL_VERSION %d." -#: access/transam/xlog.c:4854 access/transam/xlog.c:4878 -#: access/transam/xlog.c:4885 access/transam/xlog.c:4890 +#: access/transam/xlog.c:4851 access/transam/xlog.c:4875 +#: access/transam/xlog.c:4882 access/transam/xlog.c:4887 #, c-format msgid "It looks like you need to initdb." msgstr "Кажется, вам надо выполнить initdb." -#: access/transam/xlog.c:4865 +#: access/transam/xlog.c:4862 #, c-format msgid "incorrect checksum in control file" msgstr "ошибка контрольной суммы в файле pg_control" -#: access/transam/xlog.c:4875 +#: access/transam/xlog.c:4872 #, c-format msgid "" "The database cluster was initialized with CATALOG_VERSION_NO %d, but the " @@ -2574,7 +2575,7 @@ msgstr "" "Кластер баз данных был инициализирован с CATALOG_VERSION_NO %d, но сервер " "скомпилирован с CATALOG_VERSION_NO %d." -#: access/transam/xlog.c:4882 +#: access/transam/xlog.c:4879 #, c-format msgid "" "The database cluster was initialized with MAXALIGN %d, but the server was " @@ -2583,7 +2584,7 @@ msgstr "" "Кластер баз данных был инициализирован с MAXALIGN %d, но сервер " "скомпилирован с MAXALIGN %d." -#: access/transam/xlog.c:4889 +#: access/transam/xlog.c:4886 #, c-format msgid "" "The database cluster appears to use a different floating-point number format " @@ -2592,7 +2593,7 @@ msgstr "" "Кажется, в кластере баз данных и в программе сервера используются разные " "форматы чисел с плавающей точкой." -#: access/transam/xlog.c:4894 +#: access/transam/xlog.c:4891 #, c-format msgid "" "The database cluster was initialized with BLCKSZ %d, but the server was " @@ -2601,16 +2602,16 @@ msgstr "" "Кластер баз данных был инициализирован с BLCKSZ %d, но сервер скомпилирован " "с BLCKSZ %d." -#: access/transam/xlog.c:4897 access/transam/xlog.c:4904 -#: access/transam/xlog.c:4911 access/transam/xlog.c:4918 -#: access/transam/xlog.c:4925 access/transam/xlog.c:4932 -#: access/transam/xlog.c:4939 access/transam/xlog.c:4947 -#: access/transam/xlog.c:4954 +#: access/transam/xlog.c:4894 access/transam/xlog.c:4901 +#: access/transam/xlog.c:4908 access/transam/xlog.c:4915 +#: access/transam/xlog.c:4922 access/transam/xlog.c:4929 +#: access/transam/xlog.c:4936 access/transam/xlog.c:4944 +#: access/transam/xlog.c:4951 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "Кажется, вам надо перекомпилировать сервер или выполнить initdb." -#: access/transam/xlog.c:4901 +#: access/transam/xlog.c:4898 #, c-format msgid "" "The database cluster was initialized with RELSEG_SIZE %d, but the server was " @@ -2619,7 +2620,7 @@ msgstr "" "Кластер баз данных был инициализирован с RELSEG_SIZE %d, но сервер " "скомпилирован с RELSEG_SIZE %d." -#: access/transam/xlog.c:4908 +#: access/transam/xlog.c:4905 #, c-format msgid "" "The database cluster was initialized with XLOG_BLCKSZ %d, but the server was " @@ -2628,7 +2629,7 @@ msgstr "" "Кластер баз данных был инициализирован с XLOG_BLCKSZ %d, но сервер " "скомпилирован с XLOG_BLCKSZ %d." -#: access/transam/xlog.c:4915 +#: access/transam/xlog.c:4912 #, c-format msgid "" "The database cluster was initialized with NAMEDATALEN %d, but the server was " @@ -2637,7 +2638,7 @@ msgstr "" "Кластер баз данных был инициализирован с NAMEDATALEN %d, но сервер " "скомпилирован с NAMEDATALEN %d." -#: access/transam/xlog.c:4922 +#: access/transam/xlog.c:4919 #, c-format msgid "" "The database cluster was initialized with INDEX_MAX_KEYS %d, but the server " @@ -2646,7 +2647,7 @@ msgstr "" "Кластер баз данных был инициализирован с INDEX_MAX_KEYS %d, но сервер " "скомпилирован с INDEX_MAX_KEYS %d." -#: access/transam/xlog.c:4929 +#: access/transam/xlog.c:4926 #, c-format msgid "" "The database cluster was initialized with TOAST_MAX_CHUNK_SIZE %d, but the " @@ -2655,7 +2656,7 @@ msgstr "" "Кластер баз данных был инициализирован с TOAST_MAX_CHUNK_SIZE %d, но сервер " "скомпилирован с TOAST_MAX_CHUNK_SIZE %d." -#: access/transam/xlog.c:4936 +#: access/transam/xlog.c:4933 #, c-format msgid "" "The database cluster was initialized with LOBLKSIZE %d, but the server was " @@ -2664,7 +2665,7 @@ msgstr "" "Кластер баз данных был инициализирован с LOBLKSIZE %d, но сервер " "скомпилирован с LOBLKSIZE %d." -#: access/transam/xlog.c:4945 +#: access/transam/xlog.c:4942 #, c-format msgid "" "The database cluster was initialized without USE_FLOAT8_BYVAL but the server " @@ -2673,7 +2674,7 @@ msgstr "" "Кластер баз данных был инициализирован без USE_FLOAT8_BYVAL, но сервер " "скомпилирован с USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4952 +#: access/transam/xlog.c:4949 #, c-format msgid "" "The database cluster was initialized with USE_FLOAT8_BYVAL but the server " @@ -2682,7 +2683,7 @@ msgstr "" "Кластер баз данных был инициализирован с USE_FLOAT8_BYVAL, но сервер был " "скомпилирован без USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4961 +#: access/transam/xlog.c:4958 #, c-format msgid "" "WAL segment size must be a power of two between 1 MB and 1 GB, but the " @@ -2700,49 +2701,49 @@ msgstr[2] "" "размер сегмента WAL должен задаваться степенью 2 в интервале от 1 МБ до 1 " "ГБ, но в управляющем файле указано значение: %d" -#: access/transam/xlog.c:4973 +#: access/transam/xlog.c:4970 #, 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:4977 +#: access/transam/xlog.c:4974 #, 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:5411 +#: access/transam/xlog.c:5408 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "не удалось записать начальный файл журнала предзаписи: %m" -#: access/transam/xlog.c:5419 +#: access/transam/xlog.c:5416 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "не удалось сбросить на диск начальный файл журнала предзаписи: %m" -#: access/transam/xlog.c:5425 +#: access/transam/xlog.c:5422 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "не удалось закрыть начальный файл журнала предзаписи: %m" -#: access/transam/xlog.c:5486 +#: access/transam/xlog.c:5483 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "" "использование файла с конфигурацией восстановления \"%s\" не поддерживается" -#: access/transam/xlog.c:5551 +#: access/transam/xlog.c:5548 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "" "режим резервного сервера не поддерживается однопользовательским сервером" -#: access/transam/xlog.c:5568 +#: access/transam/xlog.c:5565 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "не указано ни primary_conninfo, ни restore_command" -#: access/transam/xlog.c:5569 +#: access/transam/xlog.c:5566 #, c-format msgid "" "The database server will regularly poll the pg_wal subdirectory to check for " @@ -2751,96 +2752,96 @@ msgstr "" "Сервер БД будет регулярно опрашивать подкаталог pg_wal и проверять " "содержащиеся в нём файлы." -#: access/transam/xlog.c:5577 +#: access/transam/xlog.c:5574 #, c-format msgid "must specify restore_command when standby mode is not enabled" msgstr "" "необходимо задать restore_command, если не выбран режим резервного сервера" -#: access/transam/xlog.c:5615 +#: access/transam/xlog.c:5612 #, c-format msgid "recovery target timeline %u does not exist" msgstr "целевая линия времени для восстановления %u не существует" -#: access/transam/xlog.c:5737 +#: access/transam/xlog.c:5734 #, c-format msgid "archive recovery complete" msgstr "восстановление архива завершено" -#: access/transam/xlog.c:5803 access/transam/xlog.c:6079 +#: access/transam/xlog.c:5800 access/transam/xlog.c:6076 #, c-format msgid "recovery stopping after reaching consistency" msgstr "" "восстановление останавливается после достижения согласованного состояния" -#: access/transam/xlog.c:5824 +#: access/transam/xlog.c:5821 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "восстановление останавливается перед позицией в WAL (LSN) \"%X/%X\"" -#: access/transam/xlog.c:5914 +#: access/transam/xlog.c:5911 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "" "восстановление останавливается перед фиксированием транзакции %u, время %s" -#: access/transam/xlog.c:5921 +#: access/transam/xlog.c:5918 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "" "восстановление останавливается перед прерыванием транзакции %u, время %s" -#: access/transam/xlog.c:5974 +#: access/transam/xlog.c:5971 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "восстановление останавливается в точке восстановления \"%s\", время %s" -#: access/transam/xlog.c:5992 +#: access/transam/xlog.c:5989 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "восстановление останавливается после позиции в WAL (LSN) \"%X/%X\"" -#: access/transam/xlog.c:6059 +#: access/transam/xlog.c:6056 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "" "восстановление останавливается после фиксирования транзакции %u, время %s" -#: access/transam/xlog.c:6067 +#: access/transam/xlog.c:6064 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "" "восстановление останавливается после прерывания транзакции %u, время %s" -#: access/transam/xlog.c:6112 +#: access/transam/xlog.c:6109 #, c-format msgid "pausing at the end of recovery" msgstr "остановка в конце восстановления" -#: access/transam/xlog.c:6113 +#: access/transam/xlog.c:6110 #, c-format msgid "Execute pg_wal_replay_resume() to promote." msgstr "Выполните pg_wal_replay_resume() для повышения." -#: access/transam/xlog.c:6116 access/transam/xlog.c:6398 +#: access/transam/xlog.c:6113 access/transam/xlog.c:6395 #, c-format msgid "recovery has paused" msgstr "восстановление приостановлено" -#: access/transam/xlog.c:6117 +#: access/transam/xlog.c:6114 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Выполните pg_wal_replay_resume() для продолжения." -#: access/transam/xlog.c:6389 +#: access/transam/xlog.c:6386 #, c-format msgid "hot standby is not possible because of insufficient parameter settings" msgstr "" "режим горячего резерва невозможен из-за отсутствия достаточных значений " "параметров" -#: access/transam/xlog.c:6390 access/transam/xlog.c:6417 -#: access/transam/xlog.c:6447 +#: access/transam/xlog.c:6387 access/transam/xlog.c:6414 +#: access/transam/xlog.c:6444 #, c-format msgid "" "%s = %d is a lower setting than on the primary server, where its value was " @@ -2848,12 +2849,12 @@ msgid "" msgstr "" "Параметр %s = %d меньше, чем на ведущем сервере, где его значение было %d." -#: access/transam/xlog.c:6399 +#: access/transam/xlog.c:6396 #, c-format msgid "If recovery is unpaused, the server will shut down." msgstr "В случае возобновления восстановления сервер отключится." -#: access/transam/xlog.c:6400 +#: access/transam/xlog.c:6397 #, c-format msgid "" "You can then restart the server after making the necessary configuration " @@ -2862,24 +2863,24 @@ msgstr "" "Затем вы можете перезапустить сервер после внесения необходимых изменений " "конфигурации." -#: access/transam/xlog.c:6411 +#: access/transam/xlog.c:6408 #, c-format msgid "promotion is not possible because of insufficient parameter settings" msgstr "повышение невозможно из-за отсутствия достаточных значений параметров" -#: access/transam/xlog.c:6421 +#: access/transam/xlog.c:6418 #, c-format msgid "Restart the server after making the necessary configuration changes." msgstr "" "Перезапустите сервер после внесения необходимых изменений конфигурации." -#: access/transam/xlog.c:6445 +#: access/transam/xlog.c:6442 #, c-format msgid "recovery aborted because of insufficient parameter settings" msgstr "" "восстановление прервано из-за отсутствия достаточных значений параметров" -#: access/transam/xlog.c:6451 +#: access/transam/xlog.c:6448 #, c-format msgid "" "You can restart the server after making the necessary configuration changes." @@ -2887,51 +2888,51 @@ msgstr "" "Вы можете перезапустить сервер после внесения необходимых изменений " "конфигурации." -#: access/transam/xlog.c:6473 +#: access/transam/xlog.c:6470 #, c-format msgid "WAL was generated with wal_level=minimal, cannot continue recovering" msgstr "" "WAL был создан с параметром wal_level=minimal, продолжение восстановления " "невозможно" -#: access/transam/xlog.c:6474 +#: access/transam/xlog.c:6471 #, c-format msgid "This happens if you temporarily set wal_level=minimal on the server." msgstr "Это происходит, если вы на время устанавливали wal_level=minimal." -#: access/transam/xlog.c:6475 +#: access/transam/xlog.c:6472 #, c-format msgid "Use a backup taken after setting wal_level to higher than minimal." msgstr "" "Используйте резервную копию, сделанную после переключения wal_level на любой " "уровень выше minimal." -#: access/transam/xlog.c:6544 +#: access/transam/xlog.c:6541 #, c-format msgid "control file contains invalid checkpoint location" msgstr "файл pg_control содержит неправильную позицию контрольной точки" -#: access/transam/xlog.c:6555 +#: access/transam/xlog.c:6552 #, c-format msgid "database system was shut down at %s" msgstr "система БД была выключена: %s" -#: access/transam/xlog.c:6561 +#: access/transam/xlog.c:6558 #, c-format msgid "database system was shut down in recovery at %s" msgstr "система БД была выключена в процессе восстановления: %s" -#: access/transam/xlog.c:6567 +#: access/transam/xlog.c:6564 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "выключение системы БД было прервано; последний момент работы: %s" -#: access/transam/xlog.c:6573 +#: access/transam/xlog.c:6570 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "работа системы БД была прервана во время восстановления: %s" -#: access/transam/xlog.c:6575 +#: access/transam/xlog.c:6572 #, c-format msgid "" "This probably means that some data is corrupted and you will have to use the " @@ -2940,14 +2941,14 @@ msgstr "" "Это скорее всего означает, что некоторые данные повреждены и вам придётся " "восстановить БД из последней резервной копии." -#: access/transam/xlog.c:6581 +#: access/transam/xlog.c:6578 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "" "работа системы БД была прервана в процессе восстановления, время в журнале: " "%s" -#: access/transam/xlog.c:6583 +#: access/transam/xlog.c:6580 #, c-format msgid "" "If this has occurred more than once some data might be corrupted and you " @@ -2956,59 +2957,59 @@ msgstr "" "Если это происходит постоянно, возможно, какие-то данные были испорчены и " "для восстановления стоит выбрать более раннюю точку." -#: access/transam/xlog.c:6589 +#: access/transam/xlog.c:6586 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "работа системы БД была прервана; последний момент работы: %s" -#: access/transam/xlog.c:6595 +#: access/transam/xlog.c:6592 #, c-format msgid "control file contains invalid database cluster state" msgstr "файл pg_control содержит неверный код состояния кластера" -#: access/transam/xlog.c:6652 +#: access/transam/xlog.c:6649 #, c-format msgid "entering standby mode" msgstr "переход в режим резервного сервера" -#: access/transam/xlog.c:6655 +#: access/transam/xlog.c:6652 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "начинается восстановление точки во времени до XID %u" -#: access/transam/xlog.c:6659 +#: access/transam/xlog.c:6656 #, c-format msgid "starting point-in-time recovery to %s" msgstr "начинается восстановление точки во времени до %s" -#: access/transam/xlog.c:6663 +#: access/transam/xlog.c:6660 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "начинается восстановление точки во времени до \"%s\"" -#: access/transam/xlog.c:6667 +#: access/transam/xlog.c:6664 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "" "начинается восстановление точки во времени до позиции в WAL (LSN) \"%X/%X\"" -#: access/transam/xlog.c:6671 +#: access/transam/xlog.c:6668 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "" "начинается восстановление точки во времени до первой точки согласованности" -#: access/transam/xlog.c:6674 +#: access/transam/xlog.c:6671 #, c-format msgid "starting archive recovery" msgstr "начинается восстановление архива" -#: access/transam/xlog.c:6748 +#: access/transam/xlog.c:6745 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "не удалось найти положение REDO, указанное записью контрольной точки" -#: access/transam/xlog.c:6749 access/transam/xlog.c:6759 +#: access/transam/xlog.c:6746 access/transam/xlog.c:6756 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add " @@ -3024,42 +3025,42 @@ msgstr "" "Будьте осторожны: при восстановлении резервной копии удаление \"%s/" "backup_label\" приведёт к повреждению кластера." -#: access/transam/xlog.c:6758 +#: access/transam/xlog.c:6755 #, c-format msgid "could not locate required checkpoint record" msgstr "не удалось считать нужную запись контрольной точки" -#: access/transam/xlog.c:6787 commands/tablespace.c:665 +#: access/transam/xlog.c:6784 commands/tablespace.c:665 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "не удалось создать символическую ссылку \"%s\": %m" -#: access/transam/xlog.c:6819 access/transam/xlog.c:6825 +#: access/transam/xlog.c:6816 access/transam/xlog.c:6822 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "файл \"%s\" игнорируется ввиду отсутствия файла \"%s\"" -#: access/transam/xlog.c:6821 access/transam/xlog.c:12389 +#: access/transam/xlog.c:6818 access/transam/xlog.c:12386 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "Файл \"%s\" был переименован в \"%s\"." -#: access/transam/xlog.c:6827 +#: access/transam/xlog.c:6824 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "Не удалось переименовать файл \"%s\" в \"%s\" (%m)." -#: access/transam/xlog.c:6878 +#: access/transam/xlog.c:6875 #, c-format msgid "could not locate a valid checkpoint record" msgstr "не удалось считать правильную запись контрольной точки" -#: access/transam/xlog.c:6916 +#: access/transam/xlog.c:6913 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "в истории сервера нет ответвления запрошенной линии времени %u" -#: access/transam/xlog.c:6918 +#: access/transam/xlog.c:6915 #, c-format msgid "" "Latest checkpoint is at %X/%X on timeline %u, but in the history of the " @@ -3068,7 +3069,7 @@ msgstr "" "Последняя контрольная точка: %X/%X на линии времени %u, но в истории " "запрошенной линии времени сервер ответвился с этой линии в %X/%X." -#: access/transam/xlog.c:6932 +#: access/transam/xlog.c:6929 #, c-format msgid "" "requested timeline %u does not contain minimum recovery point %X/%X on " @@ -3077,22 +3078,22 @@ msgstr "" "запрошенная линия времени %u не содержит минимальную точку восстановления %X/" "%X на линии времени %u" -#: access/transam/xlog.c:6962 +#: access/transam/xlog.c:6959 #, c-format msgid "invalid next transaction ID" msgstr "неверный ID следующей транзакции" -#: access/transam/xlog.c:7062 +#: access/transam/xlog.c:7059 #, c-format msgid "invalid redo in checkpoint record" msgstr "неверная запись REDO в контрольной точке" -#: access/transam/xlog.c:7073 +#: access/transam/xlog.c:7070 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "неверная запись REDO в контрольной точке выключения" -#: access/transam/xlog.c:7113 +#: access/transam/xlog.c:7110 #, c-format msgid "" "database system was not properly shut down; automatic recovery in progress" @@ -3100,19 +3101,19 @@ msgstr "" "система БД была остановлена нештатно; производится автоматическое " "восстановление" -#: access/transam/xlog.c:7117 +#: access/transam/xlog.c:7114 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "" "восстановление после сбоя начинается на линии времени %u, целевая линия " "времени: %u" -#: access/transam/xlog.c:7164 +#: access/transam/xlog.c:7161 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label содержит данные, не согласованные с файлом pg_control" -#: access/transam/xlog.c:7165 +#: access/transam/xlog.c:7162 #, c-format msgid "" "This means that the backup is corrupted and you will have to use another " @@ -3121,44 +3122,44 @@ msgstr "" "Это означает, что резервная копия повреждена и для восстановления БД " "придётся использовать другую копию." -#: access/transam/xlog.c:7392 +#: access/transam/xlog.c:7389 #, c-format msgid "redo starts at %X/%X" msgstr "запись REDO начинается со смещения %X/%X" -#: access/transam/xlog.c:7617 +#: access/transam/xlog.c:7614 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "" "запрошенная точка остановки восстановления предшествует согласованной точке " "восстановления" -#: access/transam/xlog.c:7655 +#: access/transam/xlog.c:7652 #, c-format msgid "redo done at %X/%X system usage: %s" msgstr "записи REDO обработаны до смещения %X/%X, нагрузка системы: %s" -#: access/transam/xlog.c:7661 +#: access/transam/xlog.c:7658 #, c-format msgid "last completed transaction was at log time %s" msgstr "последняя завершённая транзакция была выполнена в %s" -#: access/transam/xlog.c:7670 +#: access/transam/xlog.c:7667 #, c-format msgid "redo is not required" msgstr "данные REDO не требуются" -#: access/transam/xlog.c:7682 +#: access/transam/xlog.c:7679 #, c-format msgid "recovery ended before configured recovery target was reached" msgstr "восстановление окончилось до достижения заданной цели восстановления" -#: access/transam/xlog.c:7766 access/transam/xlog.c:7770 +#: access/transam/xlog.c:7763 access/transam/xlog.c:7767 #, c-format msgid "WAL ends before end of online backup" msgstr "WAL закончился без признака окончания копирования" -#: access/transam/xlog.c:7767 +#: access/transam/xlog.c:7764 #, c-format msgid "" "All WAL generated while online backup was taken must be available at " @@ -3167,7 +3168,7 @@ msgstr "" "Все журналы WAL, созданные во время резервного копирования \"на ходу\", " "должны быть в наличии для восстановления." -#: access/transam/xlog.c:7771 +#: access/transam/xlog.c:7768 #, c-format msgid "" "Online backup started with pg_start_backup() must be ended with " @@ -3177,28 +3178,28 @@ msgstr "" "должно закончиться pg_stop_backup(), и для восстановления должны быть " "доступны все журналы WAL." -#: access/transam/xlog.c:7774 +#: access/transam/xlog.c:7771 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL закончился до согласованной точки восстановления" -#: access/transam/xlog.c:7809 +#: access/transam/xlog.c:7806 #, c-format msgid "selected new timeline ID: %u" msgstr "выбранный ID новой линии времени: %u" -#: access/transam/xlog.c:8277 +#: access/transam/xlog.c:8274 #, c-format msgid "unexpected directory entry \"%s\" found in %s" msgstr "в %2$s обнаружен недопустимый элемент-каталог \"%1$s\"" -#: access/transam/xlog.c:8279 +#: access/transam/xlog.c:8276 #, c-format msgid "All directory entries in pg_tblspc/ should be symbolic links." msgstr "" "Все элементы-каталоги в pg_tblspc/ должны быть символическими ссылками." -#: access/transam/xlog.c:8280 +#: access/transam/xlog.c:8277 #, c-format msgid "" "Remove those directories, or set allow_in_place_tablespaces to ON " @@ -3207,80 +3208,80 @@ msgstr "" "Удалите эти каталоги или на время установите в allow_in_place_tablespaces " "значение ON, чтобы восстановление завершилось." -#: access/transam/xlog.c:8364 +#: access/transam/xlog.c:8361 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "согласованное состояние восстановления достигнуто в позиции %X/%X" -#: access/transam/xlog.c:8573 +#: access/transam/xlog.c:8570 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "неверная ссылка на первичную контрольную точку в файле pg_control" -#: access/transam/xlog.c:8577 +#: access/transam/xlog.c:8574 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "неверная ссылка на контрольную точку в файле backup_label" -#: access/transam/xlog.c:8595 +#: access/transam/xlog.c:8592 #, c-format msgid "invalid primary checkpoint record" msgstr "неверная запись первичной контрольной точки" -#: access/transam/xlog.c:8599 +#: access/transam/xlog.c:8596 #, c-format msgid "invalid checkpoint record" msgstr "неверная запись контрольной точки" -#: access/transam/xlog.c:8610 +#: access/transam/xlog.c:8607 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "неверный ID менеджера ресурсов в записи первичной контрольной точки" -#: access/transam/xlog.c:8614 +#: access/transam/xlog.c:8611 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "неверный ID менеджера ресурсов в записи контрольной точки" -#: access/transam/xlog.c:8627 +#: access/transam/xlog.c:8624 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "неверные флаги xl_info в записи первичной контрольной точки" -#: access/transam/xlog.c:8631 +#: access/transam/xlog.c:8628 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "неверные флаги xl_info в записи контрольной точки" -#: access/transam/xlog.c:8642 +#: access/transam/xlog.c:8639 #, c-format msgid "invalid length of primary checkpoint record" msgstr "неверная длина записи первичной контрольной точки" -#: access/transam/xlog.c:8646 +#: access/transam/xlog.c:8643 #, c-format msgid "invalid length of checkpoint record" msgstr "неверная длина записи контрольной точки" -#: access/transam/xlog.c:8827 +#: access/transam/xlog.c:8824 #, c-format msgid "shutting down" msgstr "выключение" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:8866 +#: access/transam/xlog.c:8863 #, c-format msgid "restartpoint starting:%s%s%s%s%s%s%s%s" msgstr "начата точка перезапуска:%s%s%s%s%s%s%s%s" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:8878 +#: access/transam/xlog.c:8875 #, c-format msgid "checkpoint starting:%s%s%s%s%s%s%s%s" msgstr "начата контрольная точка:%s%s%s%s%s%s%s%s" # well-spelled: синхр -#: access/transam/xlog.c:8938 +#: access/transam/xlog.c:8935 #, c-format msgid "" "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d " @@ -3294,7 +3295,7 @@ msgstr "" "=%ld.%03d сек., средняя=%ld.%03d сек.; расстояние=%d kB, ожидалось=%d kB" # well-spelled: синхр -#: access/transam/xlog.c:8958 +#: access/transam/xlog.c:8955 #, c-format msgid "" "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d " @@ -3307,7 +3308,7 @@ msgstr "" "сек., всего=%ld.%03d сек.; синхронизировано_файлов=%d, самая_долгая_синхр." "=%ld.%03d сек., средняя=%ld.%03d сек.; расстояние=%d kB, ожидалось=%d kB" -#: access/transam/xlog.c:9409 +#: access/transam/xlog.c:9406 #, c-format msgid "" "concurrent write-ahead log activity while database system is shutting down" @@ -3315,22 +3316,22 @@ msgstr "" "во время выключения системы баз данных отмечена активность в журнале " "предзаписи" -#: access/transam/xlog.c:9942 +#: access/transam/xlog.c:9939 #, c-format msgid "recovery restart point at %X/%X" msgstr "точка перезапуска восстановления в позиции %X/%X" -#: access/transam/xlog.c:9944 +#: access/transam/xlog.c:9941 #, c-format msgid "Last completed transaction was at log time %s." msgstr "Последняя завершённая транзакция была выполнена в %s." -#: access/transam/xlog.c:10190 +#: access/transam/xlog.c:10187 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "точка восстановления \"%s\" создана в позиции %X/%X" -#: access/transam/xlog.c:10335 +#: access/transam/xlog.c:10332 #, c-format msgid "" "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint " @@ -3339,13 +3340,13 @@ msgstr "" "неожиданный ID предыдущей линии времени %u (ID текущей линии времени %u) в " "записи контрольной точки" -#: access/transam/xlog.c:10344 +#: access/transam/xlog.c:10341 #, 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:10360 +#: access/transam/xlog.c:10357 #, c-format msgid "" "unexpected timeline ID %u in checkpoint record, before reaching minimum " @@ -3354,39 +3355,39 @@ msgstr "" "неожиданный ID линии времени %u в записи контрольной точки, до достижения " "минимальной к. т. %X/%X на линии времени %u" -#: access/transam/xlog.c:10435 +#: access/transam/xlog.c:10432 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "" "резервное копирование \"на ходу\" было отменено, продолжить восстановление " "нельзя" -#: access/transam/xlog.c:10492 access/transam/xlog.c:10548 -#: access/transam/xlog.c:10578 +#: access/transam/xlog.c:10489 access/transam/xlog.c:10545 +#: access/transam/xlog.c:10575 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "" "неожиданный ID линии времени %u (должен быть %u) в записи точки " "восстановления" -#: access/transam/xlog.c:10736 +#: access/transam/xlog.c:10733 #, c-format msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s" msgstr "" "успешно пропущена отсутствующая запись contrecord в %X/%X, перезаписанная в " "%s" -#: access/transam/xlog.c:10951 +#: access/transam/xlog.c:10948 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "не удалось синхронизировать с ФС файл сквозной записи %s: %m" -#: access/transam/xlog.c:10957 +#: access/transam/xlog.c:10954 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "не удалось синхронизировать с ФС данные (fdatasync) файла \"%s\": %m" -#: access/transam/xlog.c:11068 access/transam/xlog.c:11605 +#: access/transam/xlog.c:11065 access/transam/xlog.c:11602 #: 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 @@ -3394,35 +3395,35 @@ msgstr "не удалось синхронизировать с ФС данны msgid "WAL control functions cannot be executed during recovery." msgstr "Функции управления WAL нельзя использовать в процессе восстановления." -#: access/transam/xlog.c:11077 access/transam/xlog.c:11614 +#: access/transam/xlog.c:11074 access/transam/xlog.c:11611 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "" "Выбранный уровень WAL недостаточен для резервного копирования \"на ходу\"" -#: access/transam/xlog.c:11078 access/transam/xlog.c:11615 +#: access/transam/xlog.c:11075 access/transam/xlog.c:11612 #: 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:11083 +#: access/transam/xlog.c:11080 #, c-format msgid "backup label too long (max %d bytes)" msgstr "длина метки резервной копии превышает предел (%d байт)" -#: access/transam/xlog.c:11120 access/transam/xlog.c:11404 -#: access/transam/xlog.c:11442 +#: access/transam/xlog.c:11117 access/transam/xlog.c:11401 +#: access/transam/xlog.c:11439 #, c-format msgid "a backup is already in progress" msgstr "резервное копирование уже выполняется" -#: access/transam/xlog.c:11121 +#: access/transam/xlog.c:11118 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "Выполните pg_stop_backup() и повторите операцию." -#: access/transam/xlog.c:11217 +#: access/transam/xlog.c:11214 #, c-format msgid "" "WAL generated with full_page_writes=off was replayed since last restartpoint" @@ -3430,7 +3431,7 @@ msgstr "" "После последней точки перезапуска был воспроизведён WAL, созданный в режиме " "full_page_writes=off." -#: access/transam/xlog.c:11219 access/transam/xlog.c:11810 +#: access/transam/xlog.c:11216 access/transam/xlog.c:11807 #, c-format msgid "" "This means that the backup being taken on the standby is corrupt and should " @@ -3442,19 +3443,19 @@ msgstr "" "CHECKPOINT на ведущем сервере, а затем попробуйте резервное копирование \"на " "ходу\" ещё раз." -#: access/transam/xlog.c:11303 replication/basebackup.c:1433 +#: access/transam/xlog.c:11300 replication/basebackup.c:1433 #: utils/adt/misc.c:367 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "целевой путь символической ссылки \"%s\" слишком длинный" -#: access/transam/xlog.c:11353 commands/tablespace.c:385 +#: access/transam/xlog.c:11350 commands/tablespace.c:385 #: commands/tablespace.c:561 replication/basebackup.c:1448 utils/adt/misc.c:375 #, c-format msgid "tablespaces are not supported on this platform" msgstr "табличные пространства не поддерживаются на этой платформе" -#: access/transam/xlog.c:11405 access/transam/xlog.c:11443 +#: access/transam/xlog.c:11402 access/transam/xlog.c:11440 #, c-format msgid "" "If you're sure there is no backup in progress, remove file \"%s\" and try " @@ -3463,31 +3464,31 @@ msgstr "" "Если вы считаете, что информация о резервном копировании неверна, удалите " "файл \"%s\" и попробуйте снова." -#: access/transam/xlog.c:11630 +#: access/transam/xlog.c:11627 #, c-format msgid "exclusive backup not in progress" msgstr "монопольное резервное копирование не выполняется" -#: access/transam/xlog.c:11657 +#: access/transam/xlog.c:11654 #, c-format msgid "a backup is not in progress" msgstr "резервное копирование не выполняется" -#: access/transam/xlog.c:11743 access/transam/xlog.c:11756 -#: access/transam/xlog.c:12147 access/transam/xlog.c:12153 -#: access/transam/xlog.c:12201 access/transam/xlog.c:12281 -#: access/transam/xlog.c:12305 access/transam/xlogfuncs.c:733 +#: access/transam/xlog.c:11740 access/transam/xlog.c:11753 +#: access/transam/xlog.c:12144 access/transam/xlog.c:12150 +#: access/transam/xlog.c:12198 access/transam/xlog.c:12278 +#: access/transam/xlog.c:12302 access/transam/xlogfuncs.c:733 #, c-format msgid "invalid data in file \"%s\"" msgstr "неверные данные в файле \"%s\"" -#: access/transam/xlog.c:11760 replication/basebackup.c:1287 +#: access/transam/xlog.c:11757 replication/basebackup.c:1287 #, c-format msgid "the standby was promoted during online backup" msgstr "" "ведомый сервер был повышен в процессе резервного копирования \"на ходу\"" -#: access/transam/xlog.c:11761 replication/basebackup.c:1288 +#: access/transam/xlog.c:11758 replication/basebackup.c:1288 #, c-format msgid "" "This means that the backup being taken is corrupt and should not be used. " @@ -3496,7 +3497,7 @@ msgstr "" "Это означает, что создаваемая резервная копия испорчена и использовать её не " "следует. Попробуйте резервное копирование \"на ходу\" ещё раз." -#: access/transam/xlog.c:11808 +#: access/transam/xlog.c:11805 #, c-format msgid "" "WAL generated with full_page_writes=off was replayed during online backup" @@ -3504,13 +3505,13 @@ msgstr "" "В процессе резервного копирования \"на ходу\" был воспроизведён WAL, " "созданный в режиме full_page_writes=off" -#: access/transam/xlog.c:11928 +#: access/transam/xlog.c:11925 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "" "базовое копирование выполнено, ожидается архивация нужных сегментов WAL" -#: access/transam/xlog.c:11940 +#: access/transam/xlog.c:11937 #, c-format msgid "" "still waiting for all required WAL segments to be archived (%d seconds " @@ -3518,7 +3519,7 @@ msgid "" msgstr "" "продолжается ожидание архивации всех нужных сегментов WAL (прошло %d сек.)" -#: access/transam/xlog.c:11942 +#: access/transam/xlog.c:11939 #, c-format msgid "" "Check that your archive_command is executing properly. You can safely " @@ -3529,12 +3530,12 @@ msgstr "" "копирования можно отменить безопасно, но резервная копия базы будет " "непригодна без всех сегментов WAL." -#: access/transam/xlog.c:11949 +#: access/transam/xlog.c:11946 #, c-format msgid "all required WAL segments have been archived" msgstr "все нужные сегменты WAL заархивированы" -#: access/transam/xlog.c:11953 +#: access/transam/xlog.c:11950 #, c-format msgid "" "WAL archiving is not enabled; you must ensure that all required WAL segments " @@ -3543,48 +3544,48 @@ msgstr "" "архивация WAL не настроена; вы должны обеспечить копирование всех требуемых " "сегментов WAL другими средствами для получения резервной копии" -#: access/transam/xlog.c:12008 +#: access/transam/xlog.c:12005 #, c-format msgid "aborting backup due to backend exiting before pg_stop_backup was called" msgstr "" "прерывание резервного копирования из-за завершения обслуживающего процесса " "до вызова pg_stop_backup" -#: access/transam/xlog.c:12202 +#: access/transam/xlog.c:12199 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "Получен идентификатор линии времени %u, но ожидался %u." #. translator: %s is a WAL record description -#: access/transam/xlog.c:12330 +#: access/transam/xlog.c:12327 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "запись REDO в WAL в позиции %X/%X для %s" -#: access/transam/xlog.c:12378 +#: access/transam/xlog.c:12375 #, c-format msgid "online backup mode was not canceled" msgstr "режим копирования \"на ходу\" не был отменён" -#: access/transam/xlog.c:12379 +#: access/transam/xlog.c:12376 #, c-format msgid "File \"%s\" could not be renamed to \"%s\": %m." msgstr "Не удалось переименовать файл \"%s\" в \"%s\": %m." -#: access/transam/xlog.c:12388 access/transam/xlog.c:12400 -#: access/transam/xlog.c:12410 +#: access/transam/xlog.c:12385 access/transam/xlog.c:12397 +#: access/transam/xlog.c:12407 #, c-format msgid "online backup mode canceled" msgstr "режим копирования \"на ходу\" отменён" -#: access/transam/xlog.c:12401 +#: access/transam/xlog.c:12398 #, c-format msgid "" "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." msgstr "" "Файлы \"%s\" и \"%s\" были переименованы в \"%s\" и \"%s\", соответственно." -#: access/transam/xlog.c:12411 +#: access/transam/xlog.c:12408 #, c-format msgid "" "File \"%s\" was renamed to \"%s\", but file \"%s\" could not be renamed to " @@ -3593,34 +3594,34 @@ msgstr "" "Файл \"%s\" был переименован в \"%s\", но переименовать \"%s\" в \"%s\" не " "удалось: %m." -#: access/transam/xlog.c:12544 access/transam/xlogutils.c:967 +#: access/transam/xlog.c:12541 access/transam/xlogutils.c:967 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "не удалось прочитать сегмент журнала %s, смещение %u: %m" -#: access/transam/xlog.c:12550 access/transam/xlogutils.c:974 +#: access/transam/xlog.c:12547 access/transam/xlogutils.c:974 #, 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:13115 +#: access/transam/xlog.c:13112 #, c-format msgid "WAL receiver process shutdown requested" msgstr "получен запрос на выключение процесса приёмника WAL" -#: access/transam/xlog.c:13210 +#: access/transam/xlog.c:13207 #, c-format msgid "received promote request" msgstr "получен запрос повышения статуса" -#: access/transam/xlog.c:13223 +#: access/transam/xlog.c:13220 #, c-format msgid "promote trigger file found: %s" msgstr "найден файл триггера повышения: %s" -#: access/transam/xlog.c:13231 +#: access/transam/xlog.c:13228 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "не удалось получить информацию о файле триггера повышения \"%s\": %m" @@ -3655,12 +3656,12 @@ msgstr "восстановить файл \"%s\" из архива не удал msgid "%s \"%s\": %s" msgstr "%s \"%s\": %s" -#: access/transam/xlogarchive.c:479 access/transam/xlogarchive.c:543 +#: access/transam/xlogarchive.c:479 access/transam/xlogarchive.c:557 #, c-format msgid "could not create archive status file \"%s\": %m" msgstr "не удалось создать файл состояния архива \"%s\": %m" -#: access/transam/xlogarchive.c:487 access/transam/xlogarchive.c:551 +#: access/transam/xlogarchive.c:487 access/transam/xlogarchive.c:565 #, c-format msgid "could not write archive status file \"%s\": %m" msgstr "не удалось записать файл состояния архива \"%s\": %m" @@ -3683,8 +3684,8 @@ msgstr "Вероятно, подразумевалось pg_stop_backup('f')?" #: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1311 #: commands/event_trigger.c:1869 commands/extension.c:1966 #: commands/extension.c:2074 commands/extension.c:2359 commands/prepare.c:713 -#: executor/execExpr.c:2510 executor/execSRF.c:738 executor/functions.c:1074 -#: foreign/foreign.c:530 libpq/hba.c:2722 replication/logical/launcher.c:937 +#: executor/execExpr.c:2518 executor/execSRF.c:738 executor/functions.c:1074 +#: foreign/foreign.c:530 libpq/hba.c:2726 replication/logical/launcher.c:937 #: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 #: replication/slotfuncs.c:255 replication/walsender.c:3328 #: storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:507 @@ -3693,7 +3694,7 @@ msgstr "Вероятно, подразумевалось pg_stop_backup('f')?" #: utils/adt/jsonfuncs.c:2353 utils/adt/jsonfuncs.c:3814 #: utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:219 utils/adt/pgstatfuncs.c:477 #: utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 -#: utils/adt/varlena.c:4821 utils/fmgr/funcapi.c:74 utils/misc/guc.c:10049 +#: utils/adt/varlena.c:4821 utils/fmgr/funcapi.c:74 utils/misc/guc.c:10088 #: utils/mmgr/portalmem.c:1145 #, c-format msgid "set-valued function called in context that cannot accept a set" @@ -3703,13 +3704,13 @@ msgstr "" #: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1315 #: commands/event_trigger.c:1873 commands/extension.c:1970 #: commands/extension.c:2078 commands/extension.c:2363 commands/prepare.c:717 -#: foreign/foreign.c:535 libpq/hba.c:2726 replication/logical/launcher.c:941 +#: foreign/foreign.c:535 libpq/hba.c:2730 replication/logical/launcher.c:941 #: replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 #: replication/slotfuncs.c:259 replication/walsender.c:3332 #: 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:223 #: utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 -#: utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4825 utils/misc/guc.c:10053 +#: utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4825 utils/misc/guc.c:10092 #: utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1149 #, c-format msgid "materialize mode required, but it is not allowed in this context" @@ -3952,12 +3953,12 @@ msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "" "для -X требуется число, равное степени двух, в интервале от 1 МБ до 1 ГБ" -#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3969 +#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3974 #, c-format msgid "--%s requires a value" msgstr "для --%s требуется значение" -#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3974 +#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3979 #, c-format msgid "-c %s requires a value" msgstr "для -c %s требуется значение" @@ -4146,9 +4147,9 @@ msgstr "большой объект %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:402 -#: replication/pgoutput/pgoutput.c:190 replication/pgoutput/pgoutput.c:211 -#: replication/pgoutput/pgoutput.c:225 replication/pgoutput/pgoutput.c:235 -#: replication/pgoutput/pgoutput.c:245 replication/walsender.c:883 +#: replication/pgoutput/pgoutput.c:199 replication/pgoutput/pgoutput.c:220 +#: replication/pgoutput/pgoutput.c:234 replication/pgoutput/pgoutput.c:244 +#: replication/pgoutput/pgoutput.c:254 replication/walsender.c:883 #: replication/walsender.c:894 replication/walsender.c:904 #, c-format msgid "conflicting or redundant options" @@ -4801,9 +4802,9 @@ msgstr "удалить объект %s нельзя, так как от него #: commands/tablecmds.c:14021 commands/tablespace.c:464 commands/user.c:1095 #: commands/view.c:506 libpq/auth.c:338 replication/syncrep.c:1043 #: storage/lmgr/deadlock.c:1151 storage/lmgr/proc.c:1447 utils/misc/guc.c:7140 -#: utils/misc/guc.c:7176 utils/misc/guc.c:7246 utils/misc/guc.c:11457 -#: utils/misc/guc.c:11491 utils/misc/guc.c:11525 utils/misc/guc.c:11568 -#: utils/misc/guc.c:11610 +#: utils/misc/guc.c:7176 utils/misc/guc.c:7246 utils/misc/guc.c:11490 +#: utils/misc/guc.c:11524 utils/misc/guc.c:11558 utils/misc/guc.c:11601 +#: utils/misc/guc.c:11643 #, c-format msgid "%s" msgstr "%s" @@ -4993,14 +4994,14 @@ msgstr "" msgid "generation expression is not immutable" msgstr "генерирующее выражение не является постоянным" -#: catalog/heap.c:3142 rewrite/rewriteHandler.c:1291 +#: catalog/heap.c:3142 rewrite/rewriteHandler.c:1285 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "столбец \"%s\" имеет тип %s, но тип выражения по умолчанию %s" #: catalog/heap.c:3147 commands/prepare.c:368 parser/analyze.c:2695 #: parser/parse_target.c:594 parser/parse_target.c:891 -#: parser/parse_target.c:901 rewrite/rewriteHandler.c:1296 +#: parser/parse_target.c:901 rewrite/rewriteHandler.c:1290 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Перепишите выражение или преобразуйте его тип." @@ -5107,12 +5108,12 @@ msgstr "DROP INDEX CONCURRENTLY должен быть первым действ msgid "cannot reindex temporary tables of other sessions" msgstr "переиндексировать временные таблицы других сеансов нельзя" -#: catalog/index.c:3664 commands/indexcmds.c:3548 +#: catalog/index.c:3664 commands/indexcmds.c:3555 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "перестроить нерабочий индекс в таблице TOAST нельзя" -#: catalog/index.c:3680 commands/indexcmds.c:3428 commands/indexcmds.c:3572 +#: catalog/index.c:3680 commands/indexcmds.c:3435 commands/indexcmds.c:3579 #: commands/tablecmds.c:3282 #, c-format msgid "cannot move system relation \"%s\"" @@ -5131,7 +5132,7 @@ msgstr "" "пропускается" #: catalog/namespace.c:259 catalog/namespace.c:463 catalog/namespace.c:555 -#: commands/trigger.c:5253 +#: commands/trigger.c:5251 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "ссылки между базами не реализованы: \"%s.%s.%s\"" @@ -5267,7 +5268,7 @@ msgid "cannot create temporary tables during a parallel operation" msgstr "создавать временные таблицы во время параллельных операций нельзя" #: catalog/namespace.c:4338 commands/tablespace.c:1211 commands/variable.c:64 -#: tcop/postgres.c:3624 utils/misc/guc.c:11642 utils/misc/guc.c:11720 +#: tcop/postgres.c:3624 utils/misc/guc.c:11675 utils/misc/guc.c:11753 #, c-format msgid "List syntax is invalid." msgstr "Ошибка синтаксиса в списке." @@ -5430,74 +5431,74 @@ msgid "unrecognized object type \"%s\"" msgstr "нераспознанный тип объекта \"%s\"" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2883 +#: catalog/objectaddress.c:2908 #, c-format msgid "column %s of %s" msgstr "столбец %s отношения %s" -#: catalog/objectaddress.c:2898 +#: catalog/objectaddress.c:2923 #, c-format msgid "function %s" msgstr "функция %s" -#: catalog/objectaddress.c:2911 +#: catalog/objectaddress.c:2936 #, c-format msgid "type %s" msgstr "тип %s" -#: catalog/objectaddress.c:2948 +#: catalog/objectaddress.c:2973 #, c-format msgid "cast from %s to %s" msgstr "приведение %s к %s" -#: catalog/objectaddress.c:2981 +#: catalog/objectaddress.c:3006 #, c-format msgid "collation %s" msgstr "правило сортировки %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3012 +#: catalog/objectaddress.c:3037 #, c-format msgid "constraint %s on %s" msgstr "ограничение %s в отношении %s" -#: catalog/objectaddress.c:3018 +#: catalog/objectaddress.c:3043 #, c-format msgid "constraint %s" msgstr "ограничение %s" -#: catalog/objectaddress.c:3050 +#: catalog/objectaddress.c:3075 #, c-format msgid "conversion %s" msgstr "преобразование %s" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:3096 +#: catalog/objectaddress.c:3121 #, c-format msgid "default value for %s" msgstr "значение по умолчанию для %s" -#: catalog/objectaddress.c:3110 +#: catalog/objectaddress.c:3135 #, c-format msgid "language %s" msgstr "язык %s" -#: catalog/objectaddress.c:3118 +#: catalog/objectaddress.c:3143 #, c-format msgid "large object %u" msgstr "большой объект %u" -#: catalog/objectaddress.c:3131 +#: catalog/objectaddress.c:3156 #, c-format msgid "operator %s" msgstr "оператор %s" -#: catalog/objectaddress.c:3168 +#: catalog/objectaddress.c:3193 #, c-format msgid "operator class %s for access method %s" msgstr "класс операторов %s для метода доступа %s" -#: catalog/objectaddress.c:3196 +#: catalog/objectaddress.c:3221 #, c-format msgid "access method %s" msgstr "метод доступа %s" @@ -5506,7 +5507,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:3245 +#: catalog/objectaddress.c:3276 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "оператор %d (%s, %s) из семейства \"%s\": %s" @@ -5515,226 +5516,226 @@ 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:3302 +#: catalog/objectaddress.c:3341 #, 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:3354 +#: catalog/objectaddress.c:3395 #, c-format msgid "rule %s on %s" msgstr "правило %s для отношения %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3400 +#: catalog/objectaddress.c:3441 #, c-format msgid "trigger %s on %s" msgstr "триггер %s в отношении %s" -#: catalog/objectaddress.c:3420 +#: catalog/objectaddress.c:3461 #, c-format msgid "schema %s" msgstr "схема %s" -#: catalog/objectaddress.c:3448 +#: catalog/objectaddress.c:3489 #, c-format msgid "statistics object %s" msgstr "объект статистики %s" -#: catalog/objectaddress.c:3479 +#: catalog/objectaddress.c:3520 #, c-format msgid "text search parser %s" msgstr "анализатор текстового поиска %s" -#: catalog/objectaddress.c:3510 +#: catalog/objectaddress.c:3551 #, c-format msgid "text search dictionary %s" msgstr "словарь текстового поиска %s" -#: catalog/objectaddress.c:3541 +#: catalog/objectaddress.c:3582 #, c-format msgid "text search template %s" msgstr "шаблон текстового поиска %s" -#: catalog/objectaddress.c:3572 +#: catalog/objectaddress.c:3613 #, c-format msgid "text search configuration %s" msgstr "конфигурация текстового поиска %s" -#: catalog/objectaddress.c:3585 +#: catalog/objectaddress.c:3626 #, c-format msgid "role %s" msgstr "роль %s" -#: catalog/objectaddress.c:3601 +#: catalog/objectaddress.c:3642 #, c-format msgid "database %s" msgstr "база данных %s" -#: catalog/objectaddress.c:3617 +#: catalog/objectaddress.c:3658 #, c-format msgid "tablespace %s" msgstr "табличное пространство %s" -#: catalog/objectaddress.c:3628 +#: catalog/objectaddress.c:3669 #, c-format msgid "foreign-data wrapper %s" msgstr "обёртка сторонних данных %s" -#: catalog/objectaddress.c:3638 +#: catalog/objectaddress.c:3679 #, c-format msgid "server %s" msgstr "сервер %s" -#: catalog/objectaddress.c:3671 +#: catalog/objectaddress.c:3712 #, c-format msgid "user mapping for %s on server %s" msgstr "сопоставление для пользователя %s на сервере %s" -#: catalog/objectaddress.c:3723 +#: catalog/objectaddress.c:3764 #, c-format msgid "default privileges on new relations belonging to role %s in schema %s" msgstr "" "права по умолчанию для новых отношений, принадлежащих роли %s в схеме %s" -#: catalog/objectaddress.c:3727 +#: catalog/objectaddress.c:3768 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "права по умолчанию для новых отношений, принадлежащих роли %s" -#: catalog/objectaddress.c:3733 +#: catalog/objectaddress.c:3774 #, c-format msgid "default privileges on new sequences belonging to role %s in schema %s" msgstr "" "права по умолчанию для новых последовательностей, принадлежащих роли %s в " "схеме %s" -#: catalog/objectaddress.c:3737 +#: catalog/objectaddress.c:3778 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "" "права по умолчанию для новых последовательностей, принадлежащих роли %s" -#: catalog/objectaddress.c:3743 +#: catalog/objectaddress.c:3784 #, c-format msgid "default privileges on new functions belonging to role %s in schema %s" msgstr "права по умолчанию для новых функций, принадлежащих роли %s в схеме %s" -#: catalog/objectaddress.c:3747 +#: catalog/objectaddress.c:3788 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "права по умолчанию для новых функций, принадлежащих роли %s" -#: catalog/objectaddress.c:3753 +#: catalog/objectaddress.c:3794 #, c-format msgid "default privileges on new types belonging to role %s in schema %s" msgstr "права по умолчанию для новых типов, принадлежащих роли %s в схеме %s" -#: catalog/objectaddress.c:3757 +#: catalog/objectaddress.c:3798 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "права по умолчанию для новых типов, принадлежащих роли %s" -#: catalog/objectaddress.c:3763 +#: catalog/objectaddress.c:3804 #, c-format msgid "default privileges on new schemas belonging to role %s" msgstr "права по умолчанию для новых схем, принадлежащих роли %s" -#: catalog/objectaddress.c:3770 +#: catalog/objectaddress.c:3811 #, c-format msgid "default privileges belonging to role %s in schema %s" msgstr "" "права по умолчанию для новых объектов, принадлежащих роли %s в схеме %s" -#: catalog/objectaddress.c:3774 +#: catalog/objectaddress.c:3815 #, c-format msgid "default privileges belonging to role %s" msgstr "права по умолчанию для новых объектов, принадлежащих роли %s" -#: catalog/objectaddress.c:3796 +#: catalog/objectaddress.c:3837 #, c-format msgid "extension %s" msgstr "расширение %s" -#: catalog/objectaddress.c:3813 +#: catalog/objectaddress.c:3854 #, c-format msgid "event trigger %s" msgstr "событийный триггер %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3857 +#: catalog/objectaddress.c:3898 #, c-format msgid "policy %s on %s" msgstr "политика %s отношения %s" -#: catalog/objectaddress.c:3871 +#: catalog/objectaddress.c:3912 #, c-format msgid "publication %s" msgstr "публикация %s" #. translator: first %s is, e.g., "table %s" -#: catalog/objectaddress.c:3899 +#: catalog/objectaddress.c:3940 #, c-format msgid "publication of %s in publication %s" msgstr "публикуемое отношение %s в публикации %s" -#: catalog/objectaddress.c:3912 +#: catalog/objectaddress.c:3953 #, c-format msgid "subscription %s" msgstr "подписка %s" -#: catalog/objectaddress.c:3933 +#: catalog/objectaddress.c:3974 #, c-format msgid "transform for %s language %s" msgstr "преобразование для %s, языка %s" -#: catalog/objectaddress.c:4004 +#: catalog/objectaddress.c:4045 #, c-format msgid "table %s" msgstr "таблица %s" -#: catalog/objectaddress.c:4009 +#: catalog/objectaddress.c:4050 #, c-format msgid "index %s" msgstr "индекс %s" -#: catalog/objectaddress.c:4013 +#: catalog/objectaddress.c:4054 #, c-format msgid "sequence %s" msgstr "последовательность %s" -#: catalog/objectaddress.c:4017 +#: catalog/objectaddress.c:4058 #, c-format msgid "toast table %s" msgstr "TOAST-таблица %s" -#: catalog/objectaddress.c:4021 +#: catalog/objectaddress.c:4062 #, c-format msgid "view %s" msgstr "представление %s" -#: catalog/objectaddress.c:4025 +#: catalog/objectaddress.c:4066 #, c-format msgid "materialized view %s" msgstr "материализованное представление %s" -#: catalog/objectaddress.c:4029 +#: catalog/objectaddress.c:4070 #, c-format msgid "composite type %s" msgstr "составной тип %s" -#: catalog/objectaddress.c:4033 +#: catalog/objectaddress.c:4074 #, c-format msgid "foreign table %s" msgstr "сторонняя таблица %s" -#: catalog/objectaddress.c:4038 +#: catalog/objectaddress.c:4079 #, c-format msgid "relation %s" msgstr "отношение %s" -#: catalog/objectaddress.c:4079 +#: catalog/objectaddress.c:4120 #, c-format msgid "operator family %s for access method %s" msgstr "семейство операторов %s для метода доступа %s" @@ -6419,12 +6420,12 @@ msgstr "" "Имя мультидиапазонного типа можно указать вручную, воспользовавшись " "атрибутом \"multirange_type_name\"." -#: catalog/storage.c:495 storage/buffer/bufmgr.c:1039 +#: catalog/storage.c:523 storage/buffer/bufmgr.c:1039 #, c-format msgid "invalid page in block %u of relation %s" msgstr "неверная страница в блоке %u отношения %s" -#: catalog/toasting.c:112 commands/indexcmds.c:692 commands/tablecmds.c:6142 +#: catalog/toasting.c:112 commands/indexcmds.c:699 commands/tablecmds.c:6142 #: commands/tablecmds.c:16694 #, c-format msgid "\"%s\" is not a table or materialized view" @@ -6528,72 +6529,72 @@ msgstr "" "параметр \"%s\" должен иметь характеристику READ_ONLY, SHAREABLE или " "READ_WRITE" -#: commands/alter.c:84 commands/event_trigger.c:174 +#: commands/alter.c:85 commands/event_trigger.c:174 #, c-format msgid "event trigger \"%s\" already exists" msgstr "событийный триггер \"%s\" уже существует" -#: commands/alter.c:87 commands/foreigncmds.c:597 +#: commands/alter.c:88 commands/foreigncmds.c:597 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "обёртка сторонних данных \"%s\" уже существует" -#: commands/alter.c:90 commands/foreigncmds.c:888 +#: commands/alter.c:91 commands/foreigncmds.c:888 #, c-format msgid "server \"%s\" already exists" msgstr "сервер \"%s\" уже существует" -#: commands/alter.c:93 commands/proclang.c:133 +#: commands/alter.c:94 commands/proclang.c:133 #, c-format msgid "language \"%s\" already exists" msgstr "язык \"%s\" уже существует" -#: commands/alter.c:96 commands/publicationcmds.c:180 +#: commands/alter.c:97 commands/publicationcmds.c:180 #, c-format msgid "publication \"%s\" already exists" msgstr "публикация \"%s\" уже существует" -#: commands/alter.c:99 commands/subscriptioncmds.c:400 +#: commands/alter.c:100 commands/subscriptioncmds.c:400 #, c-format msgid "subscription \"%s\" already exists" msgstr "подписка \"%s\" уже существует" -#: commands/alter.c:122 +#: commands/alter.c:123 #, c-format msgid "conversion \"%s\" already exists in schema \"%s\"" msgstr "преобразование \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:126 +#: commands/alter.c:127 #, c-format msgid "statistics object \"%s\" already exists in schema \"%s\"" msgstr "объект статистики \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:130 +#: commands/alter.c:131 #, c-format msgid "text search parser \"%s\" already exists in schema \"%s\"" msgstr "анализатор текстового поиска \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:134 +#: commands/alter.c:135 #, c-format msgid "text search dictionary \"%s\" already exists in schema \"%s\"" msgstr "словарь текстового поиска \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:138 +#: commands/alter.c:139 #, c-format msgid "text search template \"%s\" already exists in schema \"%s\"" msgstr "шаблон текстового поиска \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:142 +#: commands/alter.c:143 #, c-format msgid "text search configuration \"%s\" already exists in schema \"%s\"" msgstr "конфигурация текстового поиска \"%s\" уже существует в схеме \"%s\"" -#: commands/alter.c:215 +#: commands/alter.c:216 #, c-format msgid "must be superuser to rename %s" msgstr "переименовать \"%s\" может только суперпользователь" -#: commands/alter.c:744 +#: commands/alter.c:745 #, c-format msgid "must be superuser to set schema of %s" msgstr "для назначения схемы объекта %s нужно быть суперпользователем" @@ -6613,8 +6614,8 @@ msgstr "Для создания метода доступа нужно быть msgid "access method \"%s\" already exists" msgstr "метод доступа \"%s\" уже существует" -#: commands/amcmds.c:154 commands/indexcmds.c:213 commands/indexcmds.c:843 -#: commands/opclasscmds.c:375 commands/opclasscmds.c:833 +#: commands/amcmds.c:154 commands/indexcmds.c:214 commands/indexcmds.c:850 +#: commands/opclasscmds.c:376 commands/opclasscmds.c:834 #, c-format msgid "access method \"%s\" does not exist" msgstr "метод доступа \"%s\" не существует" @@ -6914,8 +6915,8 @@ msgstr "пригодные системные локали не найдены" #: commands/comment.c:61 commands/dbcommands.c:855 commands/dbcommands.c:1072 #: commands/dbcommands.c:1187 commands/dbcommands.c:1377 #: commands/dbcommands.c:1627 commands/dbcommands.c:1751 -#: commands/dbcommands.c:2194 utils/init/postinit.c:887 -#: utils/init/postinit.c:993 utils/init/postinit.c:1019 +#: commands/dbcommands.c:2194 utils/init/postinit.c:890 +#: utils/init/postinit.c:996 utils/init/postinit.c:1022 #, c-format msgid "database \"%s\" does not exist" msgstr "база данных \"%s\" не существует" @@ -7153,7 +7154,7 @@ msgstr "столбец \"%s\" — генерируемый" msgid "Generated columns cannot be used in COPY." msgstr "Генерируемые столбцы нельзя использовать в COPY." -#: commands/copy.c:749 commands/indexcmds.c:1835 commands/statscmds.c:245 +#: commands/copy.c:749 commands/indexcmds.c:1842 commands/statscmds.c:245 #: commands/tablecmds.c:2344 commands/tablecmds.c:3000 #: commands/tablecmds.c:3508 parser/parse_relation.c:3651 #: parser/parse_relation.c:3671 utils/adt/tsvector_op.c:2683 @@ -7590,7 +7591,7 @@ msgid "cannot use invalid database \"%s\" as template" msgstr "использовать некорректную базу \"%s\" в качестве шаблона нельзя" #: commands/dbcommands.c:368 commands/dbcommands.c:1638 -#: utils/init/postinit.c:1002 +#: utils/init/postinit.c:1005 #, c-format msgid "Use DROP DATABASE to drop invalid databases." msgstr "Выполните DROP DATABASE для удаления некорректных баз данных." @@ -8922,97 +8923,97 @@ msgstr[0] "процедуре нельзя передать больше %d ар msgstr[1] "процедуре нельзя передать больше %d аргументов" msgstr[2] "процедуре нельзя передать больше %d аргументов" -#: commands/indexcmds.c:634 +#: commands/indexcmds.c:641 #, c-format msgid "must specify at least one column" msgstr "нужно указать минимум один столбец" -#: commands/indexcmds.c:638 +#: commands/indexcmds.c:645 #, c-format msgid "cannot use more than %d columns in an index" msgstr "число столбцов в индексе не может превышать %d" -#: commands/indexcmds.c:686 +#: commands/indexcmds.c:693 #, c-format msgid "cannot create index on foreign table \"%s\"" msgstr "создать индекс в сторонней таблице \"%s\" нельзя" -#: commands/indexcmds.c:717 +#: commands/indexcmds.c:724 #, c-format msgid "cannot create index on partitioned table \"%s\" concurrently" msgstr "" "создать индекс в секционированной таблице \"%s\" параллельным способом нельзя" -#: commands/indexcmds.c:722 +#: commands/indexcmds.c:729 #, c-format msgid "cannot create exclusion constraints on partitioned table \"%s\"" msgstr "" "создать ограничение-исключение в секционированной таблице \"%s\" нельзя" -#: commands/indexcmds.c:732 +#: commands/indexcmds.c:739 #, c-format msgid "cannot create indexes on temporary tables of other sessions" msgstr "создавать индексы во временных таблицах других сеансов нельзя" -#: commands/indexcmds.c:770 commands/tablecmds.c:755 commands/tablespace.c:1179 +#: commands/indexcmds.c:777 commands/tablecmds.c:755 commands/tablespace.c:1179 #, c-format msgid "cannot specify default tablespace for partitioned relations" msgstr "" "для секционированных отношений нельзя назначить табличное пространство по " "умолчанию" -#: commands/indexcmds.c:802 commands/tablecmds.c:786 commands/tablecmds.c:3289 +#: commands/indexcmds.c:809 commands/tablecmds.c:786 commands/tablecmds.c:3289 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "" "в табличное пространство pg_global можно поместить только разделяемые таблицы" -#: commands/indexcmds.c:835 +#: commands/indexcmds.c:842 #, c-format msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "устаревший метод доступа \"rtree\" подменяется методом \"gist\"" -#: commands/indexcmds.c:856 +#: commands/indexcmds.c:863 #, c-format msgid "access method \"%s\" does not support unique indexes" msgstr "метод доступа \"%s\" не поддерживает уникальные индексы" -#: commands/indexcmds.c:861 +#: commands/indexcmds.c:868 #, c-format msgid "access method \"%s\" does not support included columns" msgstr "метод доступа \"%s\" не поддерживает включаемые столбцы" -#: commands/indexcmds.c:866 +#: commands/indexcmds.c:873 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "метод доступа \"%s\" не поддерживает индексы по многим столбцам" -#: commands/indexcmds.c:871 +#: commands/indexcmds.c:878 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "метод доступа \"%s\" не поддерживает ограничения-исключения" -#: commands/indexcmds.c:995 +#: commands/indexcmds.c:1002 #, c-format msgid "cannot match partition key to an index using access method \"%s\"" msgstr "" "сопоставить ключ секционирования с индексом, использующим метод доступа " "\"%s\", нельзя" -#: commands/indexcmds.c:1005 +#: commands/indexcmds.c:1012 #, c-format msgid "unsupported %s constraint with partition key definition" msgstr "" "неподдерживаемое ограничение \"%s\" с определением ключа секционирования" -#: commands/indexcmds.c:1007 +#: commands/indexcmds.c:1014 #, c-format msgid "%s constraints cannot be used when partition keys include expressions." msgstr "" "Ограничения %s не могут использоваться, когда ключи секционирования включают " "выражения." -#: commands/indexcmds.c:1049 +#: commands/indexcmds.c:1056 #, c-format msgid "" "unique constraint on partitioned table must include all partitioning columns" @@ -9020,7 +9021,7 @@ msgstr "" "ограничение уникальности в секционированной таблице должно включать все " "секционирующие столбцы" -#: commands/indexcmds.c:1050 +#: commands/indexcmds.c:1057 #, c-format msgid "" "%s constraint on table \"%s\" lacks column \"%s\" which is part of the " @@ -9029,92 +9030,92 @@ msgstr "" "В ограничении %s таблицы \"%s\" не хватает столбца \"%s\", входящего в ключ " "секционирования." -#: commands/indexcmds.c:1069 commands/indexcmds.c:1088 +#: commands/indexcmds.c:1076 commands/indexcmds.c:1095 #, c-format msgid "index creation on system columns is not supported" msgstr "создание индекса для системных столбцов не поддерживается" -#: commands/indexcmds.c:1288 tcop/utility.c:1510 +#: commands/indexcmds.c:1295 tcop/utility.c:1510 #, c-format msgid "cannot create unique index on partitioned table \"%s\"" msgstr "создать уникальный индекс в секционированной таблице \"%s\" нельзя" -#: commands/indexcmds.c:1290 tcop/utility.c:1512 +#: commands/indexcmds.c:1297 tcop/utility.c:1512 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." msgstr "Таблица \"%s\" содержит секции, являющиеся сторонними таблицами." -#: commands/indexcmds.c:1752 +#: commands/indexcmds.c:1759 #, c-format msgid "functions in index predicate must be marked IMMUTABLE" msgstr "функции в предикате индекса должны быть помечены как IMMUTABLE" -#: commands/indexcmds.c:1830 parser/parse_utilcmd.c:2533 +#: commands/indexcmds.c:1837 parser/parse_utilcmd.c:2533 #: parser/parse_utilcmd.c:2668 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "указанный в ключе столбец \"%s\" не существует" -#: commands/indexcmds.c:1854 parser/parse_utilcmd.c:1821 +#: commands/indexcmds.c:1861 parser/parse_utilcmd.c:1821 #, c-format msgid "expressions are not supported in included columns" msgstr "выражения во включаемых столбцах не поддерживаются" -#: commands/indexcmds.c:1895 +#: commands/indexcmds.c:1902 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "функции в индексном выражении должны быть помечены как IMMUTABLE" -#: commands/indexcmds.c:1910 +#: commands/indexcmds.c:1917 #, c-format msgid "including column does not support a collation" msgstr "включаемые столбцы не поддерживают правила сортировки" -#: commands/indexcmds.c:1914 +#: commands/indexcmds.c:1921 #, c-format msgid "including column does not support an operator class" msgstr "включаемые столбцы не поддерживают классы операторов" -#: commands/indexcmds.c:1918 +#: commands/indexcmds.c:1925 #, c-format msgid "including column does not support ASC/DESC options" msgstr "включаемые столбцы не поддерживают сортировку ASC/DESC" -#: commands/indexcmds.c:1922 +#: commands/indexcmds.c:1929 #, c-format msgid "including column does not support NULLS FIRST/LAST options" msgstr "включаемые столбцы не поддерживают указания NULLS FIRST/LAST" -#: commands/indexcmds.c:1963 +#: commands/indexcmds.c:1970 #, c-format msgid "could not determine which collation to use for index expression" msgstr "не удалось определить правило сортировки для индексного выражения" -#: commands/indexcmds.c:1971 commands/tablecmds.c:17162 commands/typecmds.c:810 +#: commands/indexcmds.c:1978 commands/tablecmds.c:17162 commands/typecmds.c:810 #: parser/parse_expr.c:2693 parser/parse_type.c:566 parser/parse_utilcmd.c:3783 #: utils/adt/misc.c:621 #, c-format msgid "collations are not supported by type %s" msgstr "тип %s не поддерживает сортировку (COLLATION)" -#: commands/indexcmds.c:2036 +#: commands/indexcmds.c:2043 #, c-format msgid "operator %s is not commutative" msgstr "оператор %s не коммутативен" -#: commands/indexcmds.c:2038 +#: commands/indexcmds.c:2045 #, c-format msgid "Only commutative operators can be used in exclusion constraints." msgstr "" "В ограничениях-исключениях могут использоваться только коммутативные " "операторы." -#: commands/indexcmds.c:2064 +#: commands/indexcmds.c:2071 #, c-format msgid "operator %s is not a member of operator family \"%s\"" msgstr "оператор \"%s\" не входит в семейство операторов \"%s\"" -#: commands/indexcmds.c:2067 +#: commands/indexcmds.c:2074 #, c-format msgid "" "The exclusion operator must be related to the index operator class for the " @@ -9123,17 +9124,17 @@ msgstr "" "Оператор исключения для ограничения должен относиться к классу операторов " "индекса." -#: commands/indexcmds.c:2102 +#: commands/indexcmds.c:2109 #, c-format msgid "access method \"%s\" does not support ASC/DESC options" msgstr "метод доступа \"%s\" не поддерживает сортировку ASC/DESC" -#: commands/indexcmds.c:2107 +#: commands/indexcmds.c:2114 #, c-format msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "метод доступа \"%s\" не поддерживает параметр NULLS FIRST/LAST" -#: commands/indexcmds.c:2153 commands/tablecmds.c:17187 +#: commands/indexcmds.c:2160 commands/tablecmds.c:17187 #: commands/tablecmds.c:17193 commands/typecmds.c:2317 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" @@ -9141,7 +9142,7 @@ msgstr "" "для типа данных %s не определён класс операторов по умолчанию для метода " "доступа \"%s\"" -#: commands/indexcmds.c:2155 +#: commands/indexcmds.c:2162 #, c-format msgid "" "You must specify an operator class for the index or define a default " @@ -9150,86 +9151,86 @@ msgstr "" "Вы должны указать класс операторов для индекса или определить класс " "операторов по умолчанию для этого типа данных." -#: commands/indexcmds.c:2184 commands/indexcmds.c:2192 -#: commands/opclasscmds.c:205 +#: commands/indexcmds.c:2191 commands/indexcmds.c:2199 +#: commands/opclasscmds.c:206 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\"" msgstr "класс операторов \"%s\" для метода доступа \"%s\" не существует" -#: commands/indexcmds.c:2206 commands/typecmds.c:2305 +#: commands/indexcmds.c:2213 commands/typecmds.c:2305 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "класс операторов \"%s\" не принимает тип данных %s" -#: commands/indexcmds.c:2296 +#: commands/indexcmds.c:2303 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "" "для типа данных %s определено несколько классов операторов по умолчанию" -#: commands/indexcmds.c:2624 +#: commands/indexcmds.c:2631 #, c-format msgid "unrecognized REINDEX option \"%s\"" msgstr "нераспознанный параметр REINDEX: \"%s\"" -#: commands/indexcmds.c:2848 +#: commands/indexcmds.c:2855 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" msgstr "" "в таблице \"%s\" нет индексов, которые можно переиндексировать неблокирующим " "способом" -#: commands/indexcmds.c:2862 +#: commands/indexcmds.c:2869 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "в таблице \"%s\" нет индексов для переиндексации" -#: commands/indexcmds.c:2902 commands/indexcmds.c:3409 -#: commands/indexcmds.c:3537 +#: commands/indexcmds.c:2909 commands/indexcmds.c:3416 +#: commands/indexcmds.c:3544 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "Переиндексировать системные каталоги неблокирующим способом нельзя" -#: commands/indexcmds.c:2925 +#: commands/indexcmds.c:2932 #, c-format msgid "can only reindex the currently open database" msgstr "переиндексировать можно только текущую базу данных" -#: commands/indexcmds.c:3013 +#: commands/indexcmds.c:3020 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "" "все системные каталоги пропускаются, так как их нельзя переиндексировать " "неблокирующим способом" -#: commands/indexcmds.c:3046 +#: commands/indexcmds.c:3053 #, c-format msgid "cannot move system relations, skipping all" msgstr "переместить системные отношения нельзя, все они пропускаются" -#: commands/indexcmds.c:3093 +#: commands/indexcmds.c:3100 #, c-format msgid "while reindexing partitioned table \"%s.%s\"" msgstr "при переиндексировании секционированной таблицы \"%s.%s\"" -#: commands/indexcmds.c:3096 +#: commands/indexcmds.c:3103 #, c-format msgid "while reindexing partitioned index \"%s.%s\"" msgstr "при перестроении секционированного индекса \"%s.%s\"" -#: commands/indexcmds.c:3289 commands/indexcmds.c:4145 +#: commands/indexcmds.c:3296 commands/indexcmds.c:4152 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "таблица \"%s.%s\" переиндексирована" -#: commands/indexcmds.c:3441 commands/indexcmds.c:3493 +#: commands/indexcmds.c:3448 commands/indexcmds.c:3500 #, c-format msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" msgstr "" "перестроить нерабочий индекс \"%s.%s\" неблокирующим способом нельзя, он " "пропускается" -#: commands/indexcmds.c:3447 +#: commands/indexcmds.c:3454 #, c-format msgid "" "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" @@ -9237,19 +9238,19 @@ msgstr "" "перестроить индекс ограничения-исключения \"%s.%s\" неблокирующим способом " "нельзя, он пропускается" -#: commands/indexcmds.c:3602 +#: commands/indexcmds.c:3609 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "переиндексировать отношение такого типа неблокирующим способом нельзя" -#: commands/indexcmds.c:3623 +#: commands/indexcmds.c:3630 #, c-format msgid "cannot move non-shared relation to tablespace \"%s\"" msgstr "" "переместить отношение, не являющееся разделяемым, в табличное пространство " "\"%s\" нельзя" -#: commands/indexcmds.c:4126 commands/indexcmds.c:4138 +#: commands/indexcmds.c:4133 commands/indexcmds.c:4145 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "индекс \"%s.%s\" был перестроен" @@ -9300,102 +9301,102 @@ msgstr "" msgid "Row: %s" msgstr "Строка: %s" -#: commands/opclasscmds.c:124 +#: commands/opclasscmds.c:125 #, c-format msgid "operator family \"%s\" does not exist for access method \"%s\"" msgstr "семейство операторов \"%s\" для метода доступа \"%s\" не существует" -#: commands/opclasscmds.c:267 +#: commands/opclasscmds.c:268 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists" msgstr "семейство операторов \"%s\" для метода доступа \"%s\" уже существует" -#: commands/opclasscmds.c:416 +#: commands/opclasscmds.c:417 #, c-format msgid "must be superuser to create an operator class" msgstr "для создания класса операторов нужно быть суперпользователем" -#: commands/opclasscmds.c:493 commands/opclasscmds.c:910 -#: commands/opclasscmds.c:1056 +#: commands/opclasscmds.c:494 commands/opclasscmds.c:911 +#: commands/opclasscmds.c:1057 #, c-format msgid "invalid operator number %d, must be between 1 and %d" msgstr "неверный номер оператора (%d), требуется число от 1 до %d" -#: commands/opclasscmds.c:538 commands/opclasscmds.c:960 -#: commands/opclasscmds.c:1072 +#: commands/opclasscmds.c:539 commands/opclasscmds.c:961 +#: commands/opclasscmds.c:1073 #, c-format msgid "invalid function number %d, must be between 1 and %d" msgstr "неверный номер функции (%d), требуется число от 1 до %d" -#: commands/opclasscmds.c:567 +#: commands/opclasscmds.c:568 #, c-format msgid "storage type specified more than once" msgstr "тип хранения указан неоднократно" -#: commands/opclasscmds.c:594 +#: commands/opclasscmds.c:595 #, c-format msgid "" "storage type cannot be different from data type for access method \"%s\"" msgstr "" "тип хранения не может отличаться от типа данных для метода доступа \"%s\"" -#: commands/opclasscmds.c:610 +#: commands/opclasscmds.c:611 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists" msgstr "класс операторов \"%s\" для метода доступа \"%s\" уже существует" -#: commands/opclasscmds.c:638 +#: commands/opclasscmds.c:639 #, c-format msgid "could not make operator class \"%s\" be default for type %s" msgstr "" "класс операторов \"%s\" не удалось сделать классом по умолчанию для типа %s" -#: commands/opclasscmds.c:641 +#: commands/opclasscmds.c:642 #, c-format msgid "Operator class \"%s\" already is the default." msgstr "Класс операторов \"%s\" уже является классом по умолчанию." -#: commands/opclasscmds.c:801 +#: commands/opclasscmds.c:802 #, c-format msgid "must be superuser to create an operator family" msgstr "для создания семейства операторов нужно быть суперпользователем" -#: commands/opclasscmds.c:861 +#: commands/opclasscmds.c:862 #, c-format msgid "must be superuser to alter an operator family" msgstr "для изменения семейства операторов нужно быть суперпользователем" -#: commands/opclasscmds.c:919 +#: commands/opclasscmds.c:920 #, c-format msgid "operator argument types must be specified in ALTER OPERATOR FAMILY" msgstr "в ALTER OPERATOR FAMILY должны быть указаны типы аргументов оператора" -#: commands/opclasscmds.c:994 +#: commands/opclasscmds.c:995 #, c-format msgid "STORAGE cannot be specified in ALTER OPERATOR FAMILY" msgstr "в ALTER OPERATOR FAMILY нельзя указать STORAGE" -#: commands/opclasscmds.c:1128 +#: commands/opclasscmds.c:1129 #, c-format msgid "one or two argument types must be specified" msgstr "нужно указать один или два типа аргументов" -#: commands/opclasscmds.c:1154 +#: commands/opclasscmds.c:1155 #, c-format msgid "index operators must be binary" msgstr "индексные операторы должны быть бинарными" -#: commands/opclasscmds.c:1173 +#: commands/opclasscmds.c:1174 #, c-format msgid "access method \"%s\" does not support ordering operators" msgstr "метод доступа \"%s\" не поддерживает сортирующие операторы" -#: commands/opclasscmds.c:1184 +#: commands/opclasscmds.c:1185 #, c-format msgid "index search operators must return boolean" msgstr "операторы поиска по индексу должны возвращать логическое значение" -#: commands/opclasscmds.c:1224 +#: commands/opclasscmds.c:1225 #, c-format msgid "" "associated data types for operator class options parsing functions must " @@ -9404,7 +9405,7 @@ msgstr "" "связанные типы данных для функций, разбирающих параметры класса операторов, " "должны совпадать с входным типом класса" -#: commands/opclasscmds.c:1231 +#: commands/opclasscmds.c:1232 #, c-format msgid "" "left and right associated data types for operator class options parsing " @@ -9413,119 +9414,119 @@ msgstr "" "левый и правый типы данных для функций, разбирающих параметры класса " "операторов, должны совпадать" -#: commands/opclasscmds.c:1239 +#: commands/opclasscmds.c:1240 #, c-format msgid "invalid operator class options parsing function" msgstr "неправильная функция разбора параметров класса операторов" -#: commands/opclasscmds.c:1240 +#: commands/opclasscmds.c:1241 #, c-format msgid "Valid signature of operator class options parsing function is %s." msgstr "" "Правильная сигнатура функции, осуществляющей разбор параметров класса " "операторов: '%s'." -#: commands/opclasscmds.c:1259 +#: commands/opclasscmds.c:1260 #, c-format msgid "btree comparison functions must have two arguments" msgstr "функции сравнения btree должны иметь два аргумента" -#: commands/opclasscmds.c:1263 +#: commands/opclasscmds.c:1264 #, c-format msgid "btree comparison functions must return integer" msgstr "функции сравнения btree должны возвращать целое число" -#: commands/opclasscmds.c:1280 +#: commands/opclasscmds.c:1281 #, c-format msgid "btree sort support functions must accept type \"internal\"" msgstr "опорные функции сортировки btree должны принимать тип \"internal\"" -#: commands/opclasscmds.c:1284 +#: commands/opclasscmds.c:1285 #, c-format msgid "btree sort support functions must return void" msgstr "опорные функции сортировки btree должны возвращать пустое (void)" -#: commands/opclasscmds.c:1295 +#: commands/opclasscmds.c:1296 #, c-format msgid "btree in_range functions must have five arguments" msgstr "функции in_range для btree должны принимать пять аргументов" -#: commands/opclasscmds.c:1299 +#: commands/opclasscmds.c:1300 #, c-format msgid "btree in_range functions must return boolean" msgstr "функции in_range для btree должны возвращать логическое значение" -#: commands/opclasscmds.c:1315 +#: commands/opclasscmds.c:1316 #, c-format msgid "btree equal image functions must have one argument" msgstr "функции равенства образов btree должны иметь один аргумент" -#: commands/opclasscmds.c:1319 +#: commands/opclasscmds.c:1320 #, c-format msgid "btree equal image functions must return boolean" msgstr "функции равенства образов должны возвращать логическое значение" -#: commands/opclasscmds.c:1332 +#: commands/opclasscmds.c:1333 #, c-format msgid "btree equal image functions must not be cross-type" msgstr "функции равенства образов не должны быть межтиповыми" -#: commands/opclasscmds.c:1342 +#: commands/opclasscmds.c:1343 #, c-format msgid "hash function 1 must have one argument" msgstr "функция хеширования 1 должна принимать один аргумент" -#: commands/opclasscmds.c:1346 +#: commands/opclasscmds.c:1347 #, c-format msgid "hash function 1 must return integer" msgstr "функция хеширования 1 должна возвращать целое число" -#: commands/opclasscmds.c:1353 +#: commands/opclasscmds.c:1354 #, c-format msgid "hash function 2 must have two arguments" msgstr "функция хеширования 2 должна принимать два аргумента" -#: commands/opclasscmds.c:1357 +#: commands/opclasscmds.c:1358 #, c-format msgid "hash function 2 must return bigint" msgstr "функция хеширования 2 должна возвращать значение bigint" -#: commands/opclasscmds.c:1382 +#: commands/opclasscmds.c:1383 #, c-format msgid "associated data types must be specified for index support function" msgstr "для опорной функции индексов должны быть указаны связанные типы данных" -#: commands/opclasscmds.c:1407 +#: commands/opclasscmds.c:1408 #, c-format msgid "function number %d for (%s,%s) appears more than once" msgstr "номер функции %d для (%s,%s) дублируется" -#: commands/opclasscmds.c:1414 +#: commands/opclasscmds.c:1415 #, c-format msgid "operator number %d for (%s,%s) appears more than once" msgstr "номер оператора %d для (%s,%s) дублируется" -#: commands/opclasscmds.c:1460 +#: commands/opclasscmds.c:1461 #, c-format msgid "operator %d(%s,%s) already exists in operator family \"%s\"" msgstr "оператор %d(%s,%s) уже существует в семействе \"%s\"" -#: commands/opclasscmds.c:1566 +#: commands/opclasscmds.c:1590 #, c-format msgid "function %d(%s,%s) already exists in operator family \"%s\"" msgstr "функция %d(%s,%s) уже существует в семействе операторов \"%s\"" -#: commands/opclasscmds.c:1647 +#: commands/opclasscmds.c:1735 #, c-format msgid "operator %d(%s,%s) does not exist in operator family \"%s\"" msgstr "оператор %d(%s,%s) не существует в семействе операторов \"%s\"" -#: commands/opclasscmds.c:1687 +#: commands/opclasscmds.c:1775 #, c-format msgid "function %d(%s,%s) does not exist in operator family \"%s\"" msgstr "функция %d(%s,%s) не существует в семействе операторов \"%s\"" -#: commands/opclasscmds.c:1718 +#: commands/opclasscmds.c:1806 #, c-format msgid "" "operator class \"%s\" for access method \"%s\" already exists in schema " @@ -9534,7 +9535,7 @@ msgstr "" "класс операторов \"%s\" для метода доступа \"%s\" уже существует в схеме " "\"%s\"" -#: commands/opclasscmds.c:1741 +#: commands/opclasscmds.c:1829 #, c-format msgid "" "operator family \"%s\" for access method \"%s\" already exists in schema " @@ -10413,11 +10414,11 @@ msgstr "конфликт типов в наследованном столбце #: commands/tablecmds.c:2535 commands/tablecmds.c:2558 #: commands/tablecmds.c:2575 commands/tablecmds.c:2831 #: commands/tablecmds.c:2861 commands/tablecmds.c:2875 -#: parser/parse_coerce.c:2155 parser/parse_coerce.c:2175 -#: parser/parse_coerce.c:2195 parser/parse_coerce.c:2216 -#: parser/parse_coerce.c:2271 parser/parse_coerce.c:2305 -#: parser/parse_coerce.c:2381 parser/parse_coerce.c:2412 -#: parser/parse_coerce.c:2451 parser/parse_coerce.c:2518 +#: parser/parse_coerce.c:2192 parser/parse_coerce.c:2212 +#: parser/parse_coerce.c:2232 parser/parse_coerce.c:2253 +#: parser/parse_coerce.c:2308 parser/parse_coerce.c:2342 +#: parser/parse_coerce.c:2418 parser/parse_coerce.c:2449 +#: parser/parse_coerce.c:2488 parser/parse_coerce.c:2555 #: parser/parse_param.c:227 #, c-format msgid "%s versus %s" @@ -11247,7 +11248,7 @@ msgstr "изменяя тип генерируемого столбца, нел #: commands/tablecmds.c:11908 commands/tablecmds.c:17005 #: commands/tablecmds.c:17095 commands/trigger.c:653 -#: rewrite/rewriteHandler.c:930 rewrite/rewriteHandler.c:965 +#: rewrite/rewriteHandler.c:936 rewrite/rewriteHandler.c:971 #, c-format msgid "Column \"%s\" is a generated column." msgstr "Столбец \"%s\" является генерируемым." @@ -12301,19 +12302,19 @@ msgstr "не удалось сериализовать доступ из-за п msgid "could not serialize access due to concurrent delete" msgstr "не удалось сериализовать доступ из-за параллельного удаления" -#: commands/trigger.c:4256 +#: commands/trigger.c:4254 #, c-format msgid "cannot fire deferred trigger within security-restricted operation" msgstr "" "в рамках операции с ограничениями по безопасности нельзя вызвать отложенный " "триггер" -#: commands/trigger.c:5304 +#: commands/trigger.c:5302 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "ограничение \"%s\" не является откладываемым" -#: commands/trigger.c:5327 +#: commands/trigger.c:5325 #, c-format msgid "constraint \"%s\" does not exist" msgstr "ограничение \"%s\" не существует" @@ -12898,10 +12899,10 @@ msgstr "нет прав для удаления роли" msgid "cannot use special role specifier in DROP ROLE" msgstr "использовать специальную роль в DROP ROLE нельзя" -#: commands/user.c:1040 commands/user.c:1197 commands/variable.c:778 -#: commands/variable.c:781 commands/variable.c:865 commands/variable.c:868 +#: commands/user.c:1040 commands/user.c:1197 commands/variable.c:793 +#: commands/variable.c:796 commands/variable.c:913 commands/variable.c:916 #: utils/adt/acl.c:5103 utils/adt/acl.c:5151 utils/adt/acl.c:5179 -#: utils/adt/acl.c:5198 utils/init/miscinit.c:710 +#: utils/adt/acl.c:5198 utils/init/miscinit.c:755 #, c-format msgid "role \"%s\" does not exist" msgstr "роль \"%s\" не существует" @@ -13163,8 +13164,8 @@ msgstr "" "\"%s\" пропускается --- очищать не таблицы или специальные системные таблицы " "нельзя" -#: commands/variable.c:165 tcop/postgres.c:3640 utils/misc/guc.c:11682 -#: utils/misc/guc.c:11744 +#: commands/variable.c:165 tcop/postgres.c:3640 utils/misc/guc.c:11715 +#: utils/misc/guc.c:11777 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "нераспознанное ключевое слово: \"%s\"." @@ -13269,12 +13270,22 @@ msgstr "Изменить клиентскую кодировку сейчас н msgid "cannot change client_encoding during a parallel operation" msgstr "изменить клиентскую кодировку во время параллельной операции нельзя" -#: commands/variable.c:890 +#: commands/variable.c:818 +#, c-format +msgid "permission will be denied to set session authorization \"%s\"" +msgstr "в доступе для смены объекта авторизации \"%s\" будет отказано" + +#: commands/variable.c:823 +#, c-format +msgid "permission denied to set session authorization \"%s\"" +msgstr "нет доступа для смены объекта авторизации в сеансе \"%s\"" + +#: commands/variable.c:933 #, c-format msgid "permission will be denied to set role \"%s\"" msgstr "нет прав установить роль \"%s\"" -#: commands/variable.c:895 +#: commands/variable.c:938 #, c-format msgid "permission denied to set role \"%s\"" msgstr "нет прав установить роль \"%s\"" @@ -13368,7 +13379,7 @@ msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "" "для курсора \"%s\" не выполняется обновляемое сканирование таблицы \"%s\"" -#: executor/execCurrent.c:280 executor/execExprInterp.c:2452 +#: executor/execCurrent.c:280 executor/execExprInterp.c:2464 #, c-format msgid "" "type of parameter %d (%s) does not match that when preparing the plan (%s)" @@ -13376,14 +13387,14 @@ msgstr "" "тип параметра %d (%s) не соответствует тому, с которым подготавливался план " "(%s)" -#: executor/execCurrent.c:292 executor/execExprInterp.c:2464 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2476 #, c-format msgid "no value found for parameter %d" msgstr "не найдено значение параметра %d" #: executor/execExpr.c:636 executor/execExpr.c:643 executor/execExpr.c:649 -#: executor/execExprInterp.c:4033 executor/execExprInterp.c:4050 -#: executor/execExprInterp.c:4149 executor/nodeModifyTable.c:127 +#: executor/execExprInterp.c:4045 executor/execExprInterp.c:4062 +#: executor/execExprInterp.c:4161 executor/nodeModifyTable.c:127 #: executor/nodeModifyTable.c:138 executor/nodeModifyTable.c:155 #: executor/nodeModifyTable.c:163 #, c-format @@ -13401,7 +13412,7 @@ msgid "Query provides a value for a dropped column at ordinal position %d." msgstr "" "Запрос выдаёт значение для удалённого столбца (с порядковым номером %d)." -#: executor/execExpr.c:650 executor/execExprInterp.c:4051 +#: executor/execExpr.c:650 executor/execExprInterp.c:4063 #: executor/nodeModifyTable.c:139 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." @@ -13414,17 +13425,17 @@ msgstr "" msgid "window function calls cannot be nested" msgstr "вложенные вызовы оконных функций недопустимы" -#: executor/execExpr.c:1618 +#: executor/execExpr.c:1626 #, c-format msgid "target type is not an array" msgstr "целевой тип не является массивом" -#: executor/execExpr.c:1958 +#: executor/execExpr.c:1966 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "столбец ROW() имеет тип %s, а должен - %s" -#: executor/execExpr.c:2483 executor/execSRF.c:718 parser/parse_func.c:138 +#: executor/execExpr.c:2491 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" @@ -13433,35 +13444,35 @@ msgstr[0] "функции нельзя передать больше %d аргу msgstr[1] "функции нельзя передать больше %d аргументов" msgstr[2] "функции нельзя передать больше %d аргументов" -#: executor/execExpr.c:2916 parser/parse_node.c:277 parser/parse_node.c:327 +#: executor/execExpr.c:2924 parser/parse_node.c:277 parser/parse_node.c:327 #, c-format msgid "cannot subscript type %s because it does not support subscripting" msgstr "" "к элементам типа %s нельзя обращаться по индексам, так как он это не " "поддерживает" -#: executor/execExpr.c:3044 executor/execExpr.c:3066 +#: executor/execExpr.c:3052 executor/execExpr.c:3074 #, c-format msgid "type %s does not support subscripted assignment" msgstr "тип %s не поддерживает изменение элемента по индексу" -#: executor/execExprInterp.c:1916 +#: executor/execExprInterp.c:1928 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "атрибут %d типа %s был удалён" -#: executor/execExprInterp.c:1922 +#: executor/execExprInterp.c:1934 #, c-format msgid "attribute %d of type %s has wrong type" msgstr "атрибут %d типа %s имеет неправильный тип" -#: executor/execExprInterp.c:1924 executor/execExprInterp.c:3058 -#: executor/execExprInterp.c:3104 +#: executor/execExprInterp.c:1936 executor/execExprInterp.c:3070 +#: executor/execExprInterp.c:3116 #, c-format msgid "Table has type %s, but query expects %s." msgstr "В таблице задан тип %s, а в запросе ожидается %s." -#: executor/execExprInterp.c:2004 utils/adt/expandedrecord.c:99 +#: executor/execExprInterp.c:2016 utils/adt/expandedrecord.c:99 #: utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1751 #: utils/cache/typcache.c:1907 utils/cache/typcache.c:2054 #: utils/fmgr/funcapi.c:500 @@ -13469,17 +13480,17 @@ msgstr "В таблице задан тип %s, а в запросе ожида msgid "type %s is not composite" msgstr "тип %s не является составным" -#: executor/execExprInterp.c:2542 +#: executor/execExprInterp.c:2554 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF для таблиц такого типа не поддерживается" -#: executor/execExprInterp.c:2755 +#: executor/execExprInterp.c:2767 #, c-format msgid "cannot merge incompatible arrays" msgstr "не удалось объединить несовместимые массивы" -#: executor/execExprInterp.c:2756 +#: executor/execExprInterp.c:2768 #, c-format msgid "" "Array with element type %s cannot be included in ARRAY construct with " @@ -13488,7 +13499,7 @@ msgstr "" "Массив с типом элементов %s нельзя включить в конструкцию ARRAY с типом " "элементов %s." -#: executor/execExprInterp.c:2777 utils/adt/arrayfuncs.c:264 +#: executor/execExprInterp.c:2789 utils/adt/arrayfuncs.c:264 #: utils/adt/arrayfuncs.c:564 utils/adt/arrayfuncs.c:1306 #: utils/adt/arrayfuncs.c:3429 utils/adt/arrayfuncs.c:5425 #: utils/adt/arrayfuncs.c:5942 utils/adt/arraysubs.c:150 @@ -13497,7 +13508,7 @@ msgstr "" msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "число размерностей массива (%d) превышает предел (%d)" -#: executor/execExprInterp.c:2797 executor/execExprInterp.c:2832 +#: executor/execExprInterp.c:2809 executor/execExprInterp.c:2844 #, c-format msgid "" "multidimensional arrays must have array expressions with matching dimensions" @@ -13505,7 +13516,7 @@ msgstr "" "для многомерных массивов должны задаваться выражения с соответствующими " "размерностями" -#: executor/execExprInterp.c:2809 utils/adt/array_expanded.c:274 +#: executor/execExprInterp.c:2821 utils/adt/array_expanded.c:274 #: utils/adt/arrayfuncs.c:937 utils/adt/arrayfuncs.c:1545 #: utils/adt/arrayfuncs.c:2353 utils/adt/arrayfuncs.c:2368 #: utils/adt/arrayfuncs.c:2630 utils/adt/arrayfuncs.c:2646 @@ -13518,22 +13529,22 @@ msgstr "" msgid "array size exceeds the maximum allowed (%d)" msgstr "размер массива превышает предел (%d)" -#: executor/execExprInterp.c:3057 executor/execExprInterp.c:3103 +#: executor/execExprInterp.c:3069 executor/execExprInterp.c:3115 #, c-format msgid "attribute %d has wrong type" msgstr "атрибут %d имеет неверный тип" -#: executor/execExprInterp.c:3662 utils/adt/domains.c:149 +#: executor/execExprInterp.c:3674 utils/adt/domains.c:149 #, c-format msgid "domain %s does not allow null values" msgstr "домен %s не допускает значения null" -#: executor/execExprInterp.c:3677 utils/adt/domains.c:184 +#: executor/execExprInterp.c:3689 utils/adt/domains.c:184 #, c-format msgid "value for domain %s violates check constraint \"%s\"" msgstr "значение домена %s нарушает ограничение-проверку \"%s\"" -#: executor/execExprInterp.c:4034 +#: executor/execExprInterp.c:4046 #, c-format msgid "Table row contains %d attribute, but query expects %d." msgid_plural "Table row contains %d attributes, but query expects %d." @@ -13541,7 +13552,7 @@ msgstr[0] "Строка таблицы содержит %d атрибут, а в msgstr[1] "Строка таблицы содержит %d атрибута, а в запросе ожидается %d." msgstr[2] "Строка таблицы содержит %d атрибутов, а в запросе ожидается %d." -#: executor/execExprInterp.c:4150 executor/execSRF.c:977 +#: executor/execExprInterp.c:4162 executor/execSRF.c:977 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "" @@ -13587,24 +13598,24 @@ msgstr "Ключ %s конфликтует с существующим ключ msgid "Key conflicts with existing key." msgstr "Ключ конфликтует с уже существующим." -#: executor/execMain.c:1014 +#: executor/execMain.c:1006 #, c-format msgid "cannot change sequence \"%s\"" msgstr "последовательность \"%s\" изменить нельзя" -#: executor/execMain.c:1020 +#: executor/execMain.c:1012 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "TOAST-отношение \"%s\" изменить нельзя" -#: executor/execMain.c:1038 rewrite/rewriteHandler.c:3108 -#: rewrite/rewriteHandler.c:3953 +#: executor/execMain.c:1030 rewrite/rewriteHandler.c:3141 +#: rewrite/rewriteHandler.c:3986 #, c-format msgid "cannot insert into view \"%s\"" msgstr "вставить данные в представление \"%s\" нельзя" -#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3111 -#: rewrite/rewriteHandler.c:3956 +#: executor/execMain.c:1032 rewrite/rewriteHandler.c:3144 +#: rewrite/rewriteHandler.c:3989 #, c-format msgid "" "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or " @@ -13613,14 +13624,14 @@ msgstr "" "Чтобы представление допускало добавление данных, установите триггер INSTEAD " "OF INSERT или безусловное правило ON INSERT DO INSTEAD." -#: executor/execMain.c:1046 rewrite/rewriteHandler.c:3116 -#: rewrite/rewriteHandler.c:3961 +#: executor/execMain.c:1038 rewrite/rewriteHandler.c:3149 +#: rewrite/rewriteHandler.c:3994 #, c-format msgid "cannot update view \"%s\"" msgstr "изменить данные в представлении \"%s\" нельзя" -#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3119 -#: rewrite/rewriteHandler.c:3964 +#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3152 +#: rewrite/rewriteHandler.c:3997 #, c-format msgid "" "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an " @@ -13629,14 +13640,14 @@ msgstr "" "Чтобы представление допускало изменение данных, установите триггер INSTEAD " "OF UPDATE или безусловное правило ON UPDATE DO INSTEAD." -#: executor/execMain.c:1054 rewrite/rewriteHandler.c:3124 -#: rewrite/rewriteHandler.c:3969 +#: executor/execMain.c:1046 rewrite/rewriteHandler.c:3157 +#: rewrite/rewriteHandler.c:4002 #, c-format msgid "cannot delete from view \"%s\"" msgstr "удалить данные из представления \"%s\" нельзя" -#: executor/execMain.c:1056 rewrite/rewriteHandler.c:3127 -#: rewrite/rewriteHandler.c:3972 +#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3160 +#: rewrite/rewriteHandler.c:4005 #, c-format msgid "" "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an " @@ -13645,119 +13656,119 @@ msgstr "" "Чтобы представление допускало удаление данных, установите триггер INSTEAD OF " "DELETE или безусловное правило ON DELETE DO INSTEAD." -#: executor/execMain.c:1067 +#: executor/execMain.c:1059 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "изменить материализованное представление \"%s\" нельзя" -#: executor/execMain.c:1079 +#: executor/execMain.c:1071 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "вставлять данные в стороннюю таблицу \"%s\" нельзя" -#: executor/execMain.c:1085 +#: executor/execMain.c:1077 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "сторонняя таблица \"%s\" не допускает добавления" -#: executor/execMain.c:1092 +#: executor/execMain.c:1084 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "изменять данные в сторонней таблице \"%s\"" -#: executor/execMain.c:1098 +#: executor/execMain.c:1090 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "сторонняя таблица \"%s\" не допускает изменения" -#: executor/execMain.c:1105 +#: executor/execMain.c:1097 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "удалять данные из сторонней таблицы \"%s\" нельзя" -#: executor/execMain.c:1111 +#: executor/execMain.c:1103 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "сторонняя таблица \"%s\" не допускает удаления" -#: executor/execMain.c:1122 +#: executor/execMain.c:1114 #, c-format msgid "cannot change relation \"%s\"" msgstr "отношение \"%s\" изменить нельзя" -#: executor/execMain.c:1149 +#: executor/execMain.c:1141 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "блокировать строки в последовательности \"%s\" нельзя" -#: executor/execMain.c:1156 +#: executor/execMain.c:1148 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "блокировать строки в TOAST-отношении \"%s\" нельзя" -#: executor/execMain.c:1163 +#: executor/execMain.c:1155 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "блокировать строки в представлении \"%s\" нельзя" -#: executor/execMain.c:1171 +#: executor/execMain.c:1163 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "блокировать строки в материализованном представлении \"%s\" нельзя" -#: executor/execMain.c:1180 executor/execMain.c:2596 +#: executor/execMain.c:1172 executor/execMain.c:2591 #: executor/nodeLockRows.c:136 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "блокировать строки в сторонней таблице \"%s\" нельзя" -#: executor/execMain.c:1186 +#: executor/execMain.c:1178 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "блокировать строки в отношении \"%s\" нельзя" -#: executor/execMain.c:1812 +#: executor/execMain.c:1807 #, c-format msgid "new row for relation \"%s\" violates partition constraint" msgstr "новая строка в отношении \"%s\" нарушает ограничение секции" -#: executor/execMain.c:1814 executor/execMain.c:1897 executor/execMain.c:1947 -#: executor/execMain.c:2056 +#: executor/execMain.c:1809 executor/execMain.c:1892 executor/execMain.c:1942 +#: executor/execMain.c:2051 #, c-format msgid "Failing row contains %s." msgstr "Ошибочная строка содержит %s." -#: executor/execMain.c:1894 +#: executor/execMain.c:1889 #, c-format msgid "" "null value in column \"%s\" of relation \"%s\" violates not-null constraint" msgstr "" "значение NULL в столбце \"%s\" отношения \"%s\" нарушает ограничение NOT NULL" -#: executor/execMain.c:1945 +#: executor/execMain.c:1940 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "новая строка в отношении \"%s\" нарушает ограничение-проверку \"%s\"" -#: executor/execMain.c:2054 +#: executor/execMain.c:2049 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "новая строка нарушает ограничение-проверку для представления \"%s\"" -#: executor/execMain.c:2064 +#: executor/execMain.c:2059 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "" "новая строка нарушает политику защиты на уровне строк \"%s\" для таблицы " "\"%s\"" -#: executor/execMain.c:2069 +#: executor/execMain.c:2064 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "" "новая строка нарушает политику защиты на уровне строк для таблицы \"%s\"" -#: executor/execMain.c:2076 +#: executor/execMain.c:2071 #, c-format msgid "" "new row violates row-level security policy \"%s\" (USING expression) for " @@ -13766,7 +13777,7 @@ msgstr "" "новая строка нарушает политику защиты на уровне строк \"%s\" (выражение " "USING) для таблицы \"%s\"" -#: executor/execMain.c:2081 +#: executor/execMain.c:2076 #, c-format msgid "" "new row violates row-level security policy (USING expression) for table " @@ -15878,7 +15889,7 @@ msgstr "не удалось разобрать список идентифика msgid "unrecognized authentication option name: \"%s\"" msgstr "нераспознанное имя атрибута проверки подлинности: \"%s\"" -#: libpq/hba.c:2255 libpq/hba.c:2669 guc-file.l:632 +#: libpq/hba.c:2255 libpq/hba.c:2673 guc-file.l:632 #, c-format msgid "could not open configuration file \"%s\": %m" msgstr "открыть файл конфигурации \"%s\" не удалось: %m" @@ -15888,17 +15899,17 @@ msgstr "открыть файл конфигурации \"%s\" не удало msgid "configuration file \"%s\" contains no entries" msgstr "файл конфигурации \"%s\" не содержит записей" -#: libpq/hba.c:2824 +#: libpq/hba.c:2828 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "неверное регулярное выражение \"%s\": %s" -#: libpq/hba.c:2884 +#: libpq/hba.c:2888 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "ошибка при поиске по регулярному выражению для \"%s\": %s" -#: libpq/hba.c:2903 +#: libpq/hba.c:2907 #, c-format msgid "" "regular expression \"%s\" has no subexpressions as requested by " @@ -15907,21 +15918,21 @@ msgstr "" "в регулярном выражении \"%s\" нет подвыражений, требуемых для обратной " "ссылки в \"%s\"" -#: libpq/hba.c:2999 +#: libpq/hba.c:3003 #, c-format msgid "provided user name (%s) and authenticated user name (%s) do not match" msgstr "" "указанное имя пользователя (%s) не совпадает с именем прошедшего проверку " "(%s)" -#: libpq/hba.c:3019 +#: libpq/hba.c:3023 #, c-format msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" msgstr "" "нет соответствия в файле сопоставлений \"%s\" для пользователя \"%s\", " "прошедшего проверку как \"%s\"" -#: libpq/hba.c:3052 +#: libpq/hba.c:3056 #, c-format msgid "could not open usermap file \"%s\": %m" msgstr "не удалось открыть файл сопоставлений пользователей \"%s\": %m" @@ -16058,7 +16069,7 @@ msgstr "нет клиентского подключения" msgid "could not receive data from client: %m" msgstr "не удалось получить данные от клиента: %m" -#: libpq/pqcomm.c:1179 tcop/postgres.c:4404 +#: libpq/pqcomm.c:1179 tcop/postgres.c:4409 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "закрытие подключения из-за потери синхронизации протокола" @@ -16124,12 +16135,12 @@ msgstr "неверная строка в сообщении" msgid "invalid message format" msgstr "неверный формат сообщения" -#: main/main.c:245 +#: main/main.c:247 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s: ошибка WSAStartup: %d\n" -#: main/main.c:309 +#: main/main.c:311 #, c-format msgid "" "%s is the PostgreSQL server.\n" @@ -16138,7 +16149,7 @@ msgstr "" "%s - сервер PostgreSQL.\n" "\n" -#: main/main.c:310 +#: main/main.c:312 #, c-format msgid "" "Usage:\n" @@ -16149,109 +16160,109 @@ msgstr "" " %s [ПАРАМЕТР]...\n" "\n" -#: main/main.c:311 +#: main/main.c:313 #, c-format msgid "Options:\n" msgstr "Параметры:\n" -#: main/main.c:312 +#: main/main.c:314 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B ЧИСЛО_БУФ число разделяемых буферов\n" -#: main/main.c:313 +#: main/main.c:315 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c ИМЯ=ЗНАЧЕНИЕ установить параметр выполнения\n" -#: main/main.c:314 +#: main/main.c:316 #, c-format msgid " -C NAME print value of run-time parameter, then exit\n" msgstr " -C ИМЯ вывести значение параметра выполнения и выйти\n" -#: main/main.c:315 +#: main/main.c:317 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 уровень отладочных сообщений\n" -#: main/main.c:316 +#: main/main.c:318 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D КАТ_ДАННЫХ каталог с данными\n" # well-spelled: ДМГ -#: main/main.c:317 +#: main/main.c:319 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e использовать европейский формат дат (ДМГ)\n" -#: main/main.c:318 +#: main/main.c:320 #, c-format msgid " -F turn fsync off\n" msgstr " -F выключить синхронизацию с ФС\n" -#: main/main.c:319 +#: main/main.c:321 #, c-format msgid " -h HOSTNAME host name or IP address to listen on\n" msgstr " -h ИМЯ имя или IP-адрес для приёма сетевых соединений\n" -#: main/main.c:320 +#: main/main.c:322 #, c-format msgid " -i enable TCP/IP connections\n" msgstr " -i включить соединения TCP/IP\n" -#: main/main.c:321 +#: main/main.c:323 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k КАТАЛОГ расположение Unix-сокетов\n" -#: main/main.c:323 +#: main/main.c:325 #, c-format msgid " -l enable SSL connections\n" msgstr " -l разрешить SSL-подключения\n" # well-spelled: ПОДКЛ -#: main/main.c:325 +#: main/main.c:327 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N МАКС_ПОДКЛ предельное число подключений\n" -#: main/main.c:326 +#: main/main.c:328 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p ПОРТ номер порта для приёма подключений\n" -#: main/main.c:327 +#: main/main.c:329 #, c-format msgid " -s show statistics after each query\n" msgstr " -s показывать статистику после каждого запроса\n" -#: main/main.c:328 +#: 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:329 +#: main/main.c:331 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: main/main.c:330 +#: main/main.c:332 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --ИМЯ=ЗНАЧЕНИЕ установить параметр выполнения\n" -#: main/main.c:331 +#: main/main.c:333 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr " --describe-config вывести параметры конфигурации и выйти\n" -#: main/main.c:332 +#: main/main.c:334 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: main/main.c:334 +#: main/main.c:336 #, c-format msgid "" "\n" @@ -16260,12 +16271,12 @@ msgstr "" "\n" "Параметры для разработчиков:\n" -#: main/main.c:335 +#: main/main.c:337 #, c-format msgid " -f s|i|o|b|t|n|m|h forbid use of some plan types\n" msgstr " -f s|i|o|b|t|n|m|h запретить некоторые типы планов\n" -#: main/main.c:336 +#: main/main.c:338 #, c-format msgid "" " -n do not reinitialize shared memory after abnormal exit\n" @@ -16273,22 +16284,22 @@ msgstr "" " -n не переинициализировать разделяемую память после\n" " аварийного выхода\n" -#: main/main.c:337 +#: main/main.c:339 #, c-format msgid " -O allow system table structure changes\n" msgstr " -O разрешить изменять структуру системных таблиц\n" -#: main/main.c:338 +#: main/main.c:340 #, c-format msgid " -P disable system indexes\n" msgstr " -P отключить системные индексы\n" -#: main/main.c:339 +#: 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:340 +#: main/main.c:342 #, c-format msgid "" " -T send SIGSTOP to all backend processes if one dies\n" @@ -16296,13 +16307,13 @@ msgstr "" " -T посылать сигнал SIGSTOP всем серверным процессам\n" " при отключении одного\n" -#: main/main.c:341 +#: 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:343 +#: main/main.c:345 #, c-format msgid "" "\n" @@ -16311,7 +16322,7 @@ msgstr "" "\n" "Параметры для монопольного режима:\n" -#: main/main.c:344 +#: main/main.c:346 #, c-format msgid "" " --single selects single-user mode (must be first argument)\n" @@ -16319,22 +16330,22 @@ msgstr "" " --single включить монопольный режим\n" " (этот аргумент должен быть первым)\n" -#: main/main.c:345 +#: main/main.c:347 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " ИМЯ_БД база данных (по умолчанию - имя пользователя)\n" -#: main/main.c:346 +#: main/main.c:348 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 переопределить уровень отладочных сообщений\n" -#: main/main.c:347 +#: main/main.c:349 #, c-format msgid " -E echo statement before execution\n" msgstr " -E выводить SQL-операторы перед выполнением\n" -#: main/main.c:348 +#: main/main.c:350 #, c-format msgid "" " -j do not use newline as interactive query delimiter\n" @@ -16342,12 +16353,12 @@ msgstr "" " -j не считать конец строки разделителем интерактивных " "запросов\n" -#: main/main.c:349 main/main.c:354 +#: 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:351 +#: main/main.c:353 #, c-format msgid "" "\n" @@ -16356,7 +16367,7 @@ msgstr "" "\n" "Параметры для режима инициализации:\n" -#: main/main.c:352 +#: main/main.c:354 #, c-format msgid "" " --boot selects bootstrapping mode (must be first argument)\n" @@ -16364,7 +16375,7 @@ msgstr "" " --boot включить режим инициализации\n" " (этот аргумент должен быть первым)\n" -#: main/main.c:353 +#: main/main.c:355 #, c-format msgid "" " DBNAME database name (mandatory argument in bootstrapping " @@ -16372,12 +16383,12 @@ msgid "" msgstr "" " ИМЯ_БД имя базы данных (необходимо в режиме инициализации)\n" -#: main/main.c:355 +#: main/main.c:357 #, c-format msgid " -x NUM internal use\n" msgstr " -x ЧИСЛО параметр для внутреннего использования\n" -#: main/main.c:357 +#: main/main.c:359 #, c-format msgid "" "\n" @@ -16394,12 +16405,12 @@ msgstr "" "\n" "Об ошибках сообщайте по адресу <%s>.\n" -#: main/main.c:361 +#: main/main.c:363 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашняя страница %s: <%s>\n" -#: main/main.c:372 +#: main/main.c:374 #, c-format msgid "" "\"root\" execution of the PostgreSQL server is not permitted.\n" @@ -16412,12 +16423,12 @@ msgstr "" "должен запускать обычный пользователь. Подробнее о том, как\n" "правильно запускать сервер, вы можете узнать в документации.\n" -#: main/main.c:389 +#: main/main.c:391 #, c-format msgid "%s: real and effective user IDs must match\n" msgstr "%s: фактический и эффективный ID пользователя должны совпадать\n" -#: main/main.c:396 +#: main/main.c:398 #, c-format msgid "" "Execution of PostgreSQL by a user with administrative permissions is not\n" @@ -16447,8 +16458,8 @@ msgstr "методы расширенного узла \"%s\" не зареги msgid "relation \"%s\" does not have a composite type" msgstr "отношение \"%s\" не имеет составного типа" -#: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2567 -#: parser/parse_coerce.c:2705 parser/parse_coerce.c:2752 +#: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2604 +#: parser/parse_coerce.c:2742 parser/parse_coerce.c:2789 #: parser/parse_expr.c:2026 parser/parse_func.c:710 parser/parse_oper.c:883 #: utils/fmgr/funcapi.c:600 #, c-format @@ -16493,7 +16504,7 @@ msgid "could not implement GROUP BY" msgstr "не удалось реализовать GROUP BY" #: optimizer/plan/planner.c:1974 optimizer/plan/planner.c:3631 -#: optimizer/plan/planner.c:4388 optimizer/prep/prepunion.c:1046 +#: optimizer/plan/planner.c:4388 optimizer/prep/prepunion.c:1045 #, c-format msgid "" "Some of the datatypes only support hashing, while others only support " @@ -16543,7 +16554,7 @@ msgid "All column datatypes must be hashable." msgstr "Все столбцы должны иметь хешируемые типы данных." #. translator: %s is UNION, INTERSECT, or EXCEPT -#: optimizer/prep/prepunion.c:1045 +#: optimizer/prep/prepunion.c:1044 #, c-format msgid "could not implement %s" msgstr "не удалось реализовать %s" @@ -17527,112 +17538,112 @@ 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:1383 +#: parser/parse_coerce.c:1420 #, c-format msgid "%s types %s and %s cannot be matched" msgstr "в конструкции %s типы %s и %s не имеют общего" -#: parser/parse_coerce.c:1499 +#: parser/parse_coerce.c:1536 #, 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:1551 +#: parser/parse_coerce.c:1588 #, c-format msgid "%s could not convert type %s to %s" msgstr "в конструкции %s нельзя преобразовать тип %s в %s" -#: parser/parse_coerce.c:2154 parser/parse_coerce.c:2174 -#: parser/parse_coerce.c:2194 parser/parse_coerce.c:2215 -#: parser/parse_coerce.c:2270 parser/parse_coerce.c:2304 +#: parser/parse_coerce.c:2191 parser/parse_coerce.c:2211 +#: parser/parse_coerce.c:2231 parser/parse_coerce.c:2252 +#: parser/parse_coerce.c:2307 parser/parse_coerce.c:2341 #, c-format msgid "arguments declared \"%s\" are not all alike" msgstr "аргументы, объявленные как \"%s\", должны быть однотипными" -#: parser/parse_coerce.c:2249 parser/parse_coerce.c:2362 +#: parser/parse_coerce.c:2286 parser/parse_coerce.c:2399 #: utils/fmgr/funcapi.c:531 #, c-format msgid "argument declared %s is not an array but type %s" msgstr "аргумент, объявленный как \"%s\", оказался не массивом, а типом %s" -#: parser/parse_coerce.c:2282 parser/parse_coerce.c:2432 +#: parser/parse_coerce.c:2319 parser/parse_coerce.c:2469 #: utils/fmgr/funcapi.c:545 #, c-format msgid "argument declared %s is not a range type but type %s" msgstr "аргумент, объявленный как \"%s\", имеет не диапазонный тип, а %s" -#: parser/parse_coerce.c:2316 parser/parse_coerce.c:2396 -#: parser/parse_coerce.c:2529 utils/fmgr/funcapi.c:563 utils/fmgr/funcapi.c:628 +#: parser/parse_coerce.c:2353 parser/parse_coerce.c:2433 +#: parser/parse_coerce.c:2566 utils/fmgr/funcapi.c:563 utils/fmgr/funcapi.c:628 #, c-format msgid "argument declared %s is not a multirange type but type %s" msgstr "аргумент, объявленный как \"%s\", имеет не мультидиапазонный тип, а %s" -#: parser/parse_coerce.c:2353 +#: parser/parse_coerce.c:2390 #, c-format msgid "cannot determine element type of \"anyarray\" argument" msgstr "тип элемента аргумента \"anyarray\" определить нельзя" -#: parser/parse_coerce.c:2379 parser/parse_coerce.c:2410 -#: parser/parse_coerce.c:2449 parser/parse_coerce.c:2515 +#: parser/parse_coerce.c:2416 parser/parse_coerce.c:2447 +#: parser/parse_coerce.c:2486 parser/parse_coerce.c:2552 #, c-format msgid "argument declared %s is not consistent with argument declared %s" msgstr "аргумент, объявленный как \"%s\", не согласуется с аргументом %s" -#: parser/parse_coerce.c:2474 +#: parser/parse_coerce.c:2511 #, c-format msgid "could not determine polymorphic type because input has type %s" msgstr "" "не удалось определить полиморфный тип, так как входные аргументы имеют тип %s" -#: parser/parse_coerce.c:2488 +#: parser/parse_coerce.c:2525 #, c-format msgid "type matched to anynonarray is an array type: %s" msgstr "" "в нарушение объявления \"anynonarray\" соответствующий аргумент оказался " "массивом: %s" -#: parser/parse_coerce.c:2498 +#: parser/parse_coerce.c:2535 #, c-format msgid "type matched to anyenum is not an enum type: %s" msgstr "" "в нарушение объявления \"anyenum\" соответствующий аргумент оказался не " "перечислением: %s" -#: parser/parse_coerce.c:2559 +#: parser/parse_coerce.c:2596 #, c-format msgid "arguments of anycompatible family cannot be cast to a common type" msgstr "" "аргументы семейства anycompatible не могут быть приведены к общему типу" -#: parser/parse_coerce.c:2577 parser/parse_coerce.c:2598 -#: parser/parse_coerce.c:2648 parser/parse_coerce.c:2653 -#: parser/parse_coerce.c:2717 parser/parse_coerce.c:2729 +#: parser/parse_coerce.c:2614 parser/parse_coerce.c:2635 +#: parser/parse_coerce.c:2685 parser/parse_coerce.c:2690 +#: parser/parse_coerce.c:2754 parser/parse_coerce.c:2766 #, c-format msgid "could not determine polymorphic type %s because input has type %s" msgstr "" "не удалось определить полиморфный тип %s, так как входные аргументы имеют " "тип %s" -#: parser/parse_coerce.c:2587 +#: parser/parse_coerce.c:2624 #, c-format msgid "anycompatiblerange type %s does not match anycompatible type %s" msgstr "тип %s (anycompatiblerange) не соответствует типу %s (anycompatible)" -#: parser/parse_coerce.c:2608 +#: parser/parse_coerce.c:2645 #, c-format msgid "anycompatiblemultirange type %s does not match anycompatible type %s" msgstr "" "тип %s (anycompatiblemultirange) не соответствует типу %s (anycompatible)" -#: parser/parse_coerce.c:2622 +#: parser/parse_coerce.c:2659 #, c-format msgid "type matched to anycompatiblenonarray is an array type: %s" msgstr "" "в нарушение объявления \"anycompatiblenonarray\" соответствующий аргумент " "оказался массивом: %s" -#: parser/parse_coerce.c:2857 +#: parser/parse_coerce.c:2894 #, c-format msgid "" "A result of type %s requires at least one input of type anyrange or " @@ -17641,7 +17652,7 @@ msgstr "" "Для результата типа %s требуется минимум один аргумент типа anyrange или " "anymultirange." -#: parser/parse_coerce.c:2874 +#: parser/parse_coerce.c:2911 #, c-format msgid "" "A result of type %s requires at least one input of type anycompatiblerange " @@ -17650,7 +17661,7 @@ msgstr "" "Для результата типа %s требуется минимум один аргумент типа " "anycompatiblerange или anycompatiblemultirange." -#: parser/parse_coerce.c:2886 +#: parser/parse_coerce.c:2923 #, c-format msgid "" "A result of type %s requires at least one input of type anyelement, " @@ -17659,7 +17670,7 @@ msgstr "" "Для результата типа %s требуется минимум один аргумент типа anyelement, " "anyarray, anynonarray, anyenum, anyrange или anymultirange." -#: parser/parse_coerce.c:2898 +#: parser/parse_coerce.c:2935 #, c-format msgid "" "A result of type %s requires at least one input of type anycompatible, " @@ -17670,7 +17681,7 @@ msgstr "" "anycompatiblearray, anycompatiblenonarray, anycompatiblerange или " "anycompatiblemultirange." -#: parser/parse_coerce.c:2928 +#: parser/parse_coerce.c:2965 msgid "A result of type internal requires at least one input of type internal." msgstr "" "Для результата типа internal требуется минимум один аргумент типа internal." @@ -19104,7 +19115,7 @@ msgstr "" "UPDATE или DELETE" #: parser/parse_utilcmd.c:3154 parser/parse_utilcmd.c:3255 -#: rewrite/rewriteHandler.c:533 rewrite/rewriteManip.c:1021 +#: rewrite/rewriteHandler.c:539 rewrite/rewriteManip.c:1022 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "условные операторы UNION/INTERSECT/EXCEPT не реализованы" @@ -19475,14 +19486,14 @@ msgid "huge pages not supported with the current shared_memory_type setting" msgstr "" "огромные страницы не поддерживаются с текущим значением shared_memory_type" -#: port/pg_shmem.c:753 port/sysv_shmem.c:753 utils/init/miscinit.c:1180 +#: port/pg_shmem.c:753 port/sysv_shmem.c:753 utils/init/miscinit.c:1224 #, c-format msgid "pre-existing shared memory block (key %lu, ID %lu) is still in use" msgstr "" "ранее выделенный блок разделяемой памяти (ключ %lu, ID %lu) по-прежнему " "используется" -#: port/pg_shmem.c:756 port/sysv_shmem.c:756 utils/init/miscinit.c:1182 +#: port/pg_shmem.c:756 port/sysv_shmem.c:756 utils/init/miscinit.c:1226 #, c-format msgid "" "Terminate any old server processes associated with data directory \"%s\"." @@ -19672,32 +19683,32 @@ msgid "could not fork autovacuum worker process: %m" msgstr "не удалось породить рабочий процесс автоочистки: %m" # skip-rule: capital-letter-first -#: postmaster/autovacuum.c:2317 +#: postmaster/autovacuum.c:2319 #, c-format msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "автоочистка: удаление устаревшей врем. таблицы \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2546 +#: postmaster/autovacuum.c:2548 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "автоматическая очистка таблицы \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2549 +#: postmaster/autovacuum.c:2551 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "автоматический анализ таблицы \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2742 +#: postmaster/autovacuum.c:2744 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "обработка рабочей записи для отношения \"%s.%s.%s\"" -#: postmaster/autovacuum.c:3428 +#: postmaster/autovacuum.c:3430 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "автоочистка не запущена из-за неправильной конфигурации" -#: postmaster/autovacuum.c:3429 +#: postmaster/autovacuum.c:3431 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Включите параметр \"track_counts\"." @@ -19809,17 +19820,17 @@ msgstr "сбой при запросе контрольной точки" msgid "Consult recent messages in the server log for details." msgstr "Смотрите подробности в протоколе сервера." -#: postmaster/pgarch.c:365 +#: postmaster/pgarch.c:417 #, c-format msgid "archive_mode enabled, yet archive_command is not set" msgstr "режим архивации включён, но команда архивации не задана" -#: postmaster/pgarch.c:387 +#: postmaster/pgarch.c:439 #, c-format msgid "removed orphan archive status file \"%s\"" msgstr "удалён ненужный файл состояния архива \"%s\"" -#: postmaster/pgarch.c:397 +#: postmaster/pgarch.c:449 #, c-format msgid "" "removal of orphan archive status file \"%s\" failed too many times, will try " @@ -19828,7 +19839,7 @@ msgstr "" "удалить ненужный файл состояния архива \"%s\" не получилось много раз " "подряд; следующая попытка будет сделана позже" -#: postmaster/pgarch.c:433 +#: postmaster/pgarch.c:485 #, c-format msgid "" "archiving write-ahead log file \"%s\" failed too many times, will try again " @@ -19837,23 +19848,23 @@ msgstr "" "заархивировать файл журнала предзаписи \"%s\" не удалось много раз подряд; " "следующая попытка будет сделана позже" -#: postmaster/pgarch.c:534 +#: postmaster/pgarch.c:586 #, c-format msgid "archive command failed with exit code %d" msgstr "команда архивации завершилась ошибкой с кодом %d" -#: postmaster/pgarch.c:536 postmaster/pgarch.c:546 postmaster/pgarch.c:552 -#: postmaster/pgarch.c:561 +#: postmaster/pgarch.c:588 postmaster/pgarch.c:598 postmaster/pgarch.c:604 +#: postmaster/pgarch.c:613 #, c-format msgid "The failed archive command was: %s" msgstr "Команда архивации с ошибкой: %s" -#: postmaster/pgarch.c:543 +#: postmaster/pgarch.c:595 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "команда архивации была прервана исключением 0x%X" -#: postmaster/pgarch.c:545 postmaster/postmaster.c:3758 +#: postmaster/pgarch.c:597 postmaster/postmaster.c:3759 #, c-format msgid "" "See C include file \"ntstatus.h\" for a description of the hexadecimal value." @@ -19861,12 +19872,12 @@ msgstr "" "Описание этого шестнадцатеричного значения ищите во включаемом C-файле " "\"ntstatus.h\"" -#: postmaster/pgarch.c:550 +#: postmaster/pgarch.c:602 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "команда архивации завершена по сигналу %d: %s" -#: postmaster/pgarch.c:559 +#: postmaster/pgarch.c:611 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "команда архивации завершилась с нераспознанным кодом состояния %d" @@ -20089,7 +20100,7 @@ msgid "starting %s" msgstr "запускается %s" #: postmaster/postmaster.c:1161 postmaster/postmaster.c:1260 -#: utils/init/miscinit.c:1640 +#: utils/init/miscinit.c:1684 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "неверный формат списка в параметре \"%s\"" @@ -20139,27 +20150,27 @@ msgstr "%s: не удалось записать внешний файл PID \"% msgid "could not load pg_hba.conf" msgstr "не удалось загрузить pg_hba.conf" -#: postmaster/postmaster.c:1394 +#: postmaster/postmaster.c:1396 #, c-format msgid "postmaster became multithreaded during startup" msgstr "процесс postmaster стал многопоточным при запуске" -#: postmaster/postmaster.c:1395 +#: postmaster/postmaster.c:1397 postmaster/postmaster.c:5148 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "Установите в переменной окружения LC_ALL правильную локаль." -#: postmaster/postmaster.c:1490 +#: postmaster/postmaster.c:1492 #, c-format msgid "%s: could not locate my own executable path" msgstr "%s: не удалось найти путь к собственному исполняемому файлу" -#: postmaster/postmaster.c:1497 +#: postmaster/postmaster.c:1499 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: подходящий исполняемый файл postgres не найден" -#: postmaster/postmaster.c:1520 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1522 utils/misc/tzparser.c:340 #, c-format msgid "" "This may indicate an incomplete PostgreSQL installation, or that the file " @@ -20168,7 +20179,7 @@ msgstr "" "Возможно, PostgreSQL установлен не полностью или файла \"%s\" нет в " "положенном месте." -#: postmaster/postmaster.c:1547 +#: postmaster/postmaster.c:1549 #, c-format msgid "" "%s: could not find the database system\n" @@ -20179,45 +20190,45 @@ msgstr "" "Ожидалось найти её в каталоге \"%s\",\n" "но открыть файл \"%s\" не удалось: %s\n" -#: postmaster/postmaster.c:1724 +#: postmaster/postmaster.c:1726 #, c-format msgid "select() failed in postmaster: %m" msgstr "сбой select() в postmaster'е: %m" # well-spelled: неподчиняющимся -#: postmaster/postmaster.c:1860 +#: postmaster/postmaster.c:1862 #, c-format msgid "issuing SIGKILL to recalcitrant children" msgstr "неподчиняющимся потомкам посылается SIGKILL" -#: postmaster/postmaster.c:1881 +#: postmaster/postmaster.c:1883 #, c-format msgid "" "performing immediate shutdown because data directory lock file is invalid" msgstr "" "немедленное отключение из-за ошибочного файла блокировки каталога данных" -#: postmaster/postmaster.c:1984 postmaster/postmaster.c:2012 +#: postmaster/postmaster.c:1986 postmaster/postmaster.c:2014 #, c-format msgid "incomplete startup packet" msgstr "неполный стартовый пакет" -#: postmaster/postmaster.c:1996 postmaster/postmaster.c:2029 +#: postmaster/postmaster.c:1998 postmaster/postmaster.c:2031 #, c-format msgid "invalid length of startup packet" msgstr "неверная длина стартового пакета" -#: postmaster/postmaster.c:2058 +#: postmaster/postmaster.c:2060 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "не удалось отправить ответ в процессе SSL-согласования: %m" -#: postmaster/postmaster.c:2076 +#: postmaster/postmaster.c:2078 #, c-format msgid "received unencrypted data after SSL request" msgstr "после запроса SSL получены незашифрованные данные" -#: postmaster/postmaster.c:2077 postmaster/postmaster.c:2121 +#: postmaster/postmaster.c:2079 postmaster/postmaster.c:2123 #, c-format msgid "" "This could be either a client-software bug or evidence of an attempted man-" @@ -20226,450 +20237,450 @@ msgstr "" "Это может свидетельствовать об ошибке в клиентском ПО или о попытке атаки " "MITM." -#: postmaster/postmaster.c:2102 +#: postmaster/postmaster.c:2104 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "не удалось отправить ответ в процессе согласования GSSAPI: %m" -#: postmaster/postmaster.c:2120 +#: postmaster/postmaster.c:2122 #, c-format msgid "received unencrypted data after GSSAPI encryption request" msgstr "после запроса шифрования GSSAPI получены незашифрованные данные" -#: postmaster/postmaster.c:2144 +#: postmaster/postmaster.c:2146 #, 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:2208 utils/misc/guc.c:7138 utils/misc/guc.c:7174 -#: utils/misc/guc.c:7244 utils/misc/guc.c:8589 utils/misc/guc.c:11563 -#: utils/misc/guc.c:11604 +#: postmaster/postmaster.c:2210 utils/misc/guc.c:7138 utils/misc/guc.c:7174 +#: utils/misc/guc.c:7244 utils/misc/guc.c:8628 utils/misc/guc.c:11596 +#: utils/misc/guc.c:11637 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "неверное значение для параметра \"%s\": \"%s\"" -#: postmaster/postmaster.c:2211 +#: postmaster/postmaster.c:2213 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "Допустимые значения: \"false\", 0, \"true\", 1, \"database\"." -#: postmaster/postmaster.c:2256 +#: postmaster/postmaster.c:2258 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "" "неверная структура стартового пакета: последним байтом должен быть терминатор" -#: postmaster/postmaster.c:2273 +#: postmaster/postmaster.c:2275 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "в стартовом пакете не указано имя пользователя PostgreSQL" -#: postmaster/postmaster.c:2337 +#: postmaster/postmaster.c:2339 #, c-format msgid "the database system is starting up" msgstr "система баз данных запускается" -#: postmaster/postmaster.c:2343 +#: postmaster/postmaster.c:2345 #, c-format msgid "the database system is not yet accepting connections" msgstr "система БД ещё не принимает подключения" -#: postmaster/postmaster.c:2344 +#: postmaster/postmaster.c:2346 #, c-format msgid "Consistent recovery state has not been yet reached." msgstr "Согласованное состояние восстановления ещё не достигнуто." -#: postmaster/postmaster.c:2348 +#: postmaster/postmaster.c:2350 #, c-format msgid "the database system is not accepting connections" msgstr "система БД не принимает подключения" -#: postmaster/postmaster.c:2349 +#: postmaster/postmaster.c:2351 #, c-format msgid "Hot standby mode is disabled." msgstr "Режим горячего резерва отключён." -#: postmaster/postmaster.c:2354 +#: postmaster/postmaster.c:2356 #, c-format msgid "the database system is shutting down" msgstr "система баз данных останавливается" -#: postmaster/postmaster.c:2359 +#: postmaster/postmaster.c:2361 #, c-format msgid "the database system is in recovery mode" msgstr "система баз данных в режиме восстановления" -#: postmaster/postmaster.c:2364 storage/ipc/procarray.c:499 +#: postmaster/postmaster.c:2366 storage/ipc/procarray.c:499 #: storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:361 #, c-format msgid "sorry, too many clients already" msgstr "извините, уже слишком много клиентов" -#: postmaster/postmaster.c:2454 +#: postmaster/postmaster.c:2456 #, c-format msgid "wrong key in cancel request for process %d" msgstr "неправильный ключ в запросе на отмену процесса %d" -#: postmaster/postmaster.c:2466 +#: postmaster/postmaster.c:2468 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "процесс с кодом %d, полученным в запросе на отмену, не найден" -#: postmaster/postmaster.c:2720 +#: postmaster/postmaster.c:2721 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "получен SIGHUP, файлы конфигурации перезагружаются" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2746 postmaster/postmaster.c:2750 +#: postmaster/postmaster.c:2747 postmaster/postmaster.c:2751 #, c-format msgid "%s was not reloaded" msgstr "%s не был перезагружен" -#: postmaster/postmaster.c:2760 +#: postmaster/postmaster.c:2761 #, c-format msgid "SSL configuration was not reloaded" msgstr "конфигурация SSL не была перезагружена" -#: postmaster/postmaster.c:2816 +#: postmaster/postmaster.c:2817 #, c-format msgid "received smart shutdown request" msgstr "получен запрос на \"вежливое\" выключение" -#: postmaster/postmaster.c:2862 +#: postmaster/postmaster.c:2863 #, c-format msgid "received fast shutdown request" msgstr "получен запрос на быстрое выключение" -#: postmaster/postmaster.c:2880 +#: postmaster/postmaster.c:2881 #, c-format msgid "aborting any active transactions" msgstr "прерывание всех активных транзакций" -#: postmaster/postmaster.c:2904 +#: postmaster/postmaster.c:2905 #, c-format msgid "received immediate shutdown request" msgstr "получен запрос на немедленное выключение" -#: postmaster/postmaster.c:2981 +#: postmaster/postmaster.c:2982 #, c-format msgid "shutdown at recovery target" msgstr "выключение при достижении цели восстановления" -#: postmaster/postmaster.c:2999 postmaster/postmaster.c:3035 +#: postmaster/postmaster.c:3000 postmaster/postmaster.c:3036 msgid "startup process" msgstr "стартовый процесс" -#: postmaster/postmaster.c:3002 +#: postmaster/postmaster.c:3003 #, c-format msgid "aborting startup due to startup process failure" msgstr "прерывание запуска из-за ошибки в стартовом процессе" -#: postmaster/postmaster.c:3077 +#: postmaster/postmaster.c:3078 #, c-format msgid "database system is ready to accept connections" msgstr "система БД готова принимать подключения" -#: postmaster/postmaster.c:3098 +#: postmaster/postmaster.c:3099 msgid "background writer process" msgstr "процесс фоновой записи" -#: postmaster/postmaster.c:3152 +#: postmaster/postmaster.c:3153 msgid "checkpointer process" msgstr "процесс контрольных точек" -#: postmaster/postmaster.c:3168 +#: postmaster/postmaster.c:3169 msgid "WAL writer process" msgstr "процесс записи WAL" -#: postmaster/postmaster.c:3183 +#: postmaster/postmaster.c:3184 msgid "WAL receiver process" msgstr "процесс считывания WAL" -#: postmaster/postmaster.c:3198 +#: postmaster/postmaster.c:3199 msgid "autovacuum launcher process" msgstr "процесс запуска автоочистки" -#: postmaster/postmaster.c:3216 +#: postmaster/postmaster.c:3217 msgid "archiver process" msgstr "процесс архивации" -#: postmaster/postmaster.c:3231 +#: postmaster/postmaster.c:3232 msgid "statistics collector process" msgstr "процесс сбора статистики" -#: postmaster/postmaster.c:3245 +#: postmaster/postmaster.c:3246 msgid "system logger process" msgstr "процесс системного протоколирования" -#: postmaster/postmaster.c:3309 +#: postmaster/postmaster.c:3310 #, c-format msgid "background worker \"%s\"" msgstr "фоновый процесс \"%s\"" -#: postmaster/postmaster.c:3393 postmaster/postmaster.c:3413 -#: postmaster/postmaster.c:3420 postmaster/postmaster.c:3438 +#: postmaster/postmaster.c:3394 postmaster/postmaster.c:3414 +#: postmaster/postmaster.c:3421 postmaster/postmaster.c:3439 msgid "server process" msgstr "процесс сервера" -#: postmaster/postmaster.c:3492 +#: postmaster/postmaster.c:3493 #, 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:3745 +#: postmaster/postmaster.c:3746 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) завершился с кодом выхода %d" -#: postmaster/postmaster.c:3747 postmaster/postmaster.c:3759 -#: postmaster/postmaster.c:3769 postmaster/postmaster.c:3780 +#: postmaster/postmaster.c:3748 postmaster/postmaster.c:3760 +#: postmaster/postmaster.c:3770 postmaster/postmaster.c:3781 #, 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:3756 +#: postmaster/postmaster.c:3757 #, 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:3766 +#: postmaster/postmaster.c:3767 #, 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:3778 +#: postmaster/postmaster.c:3779 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) завершился с нераспознанным кодом состояния %d" -#: postmaster/postmaster.c:3992 +#: postmaster/postmaster.c:3993 #, c-format msgid "abnormal database system shutdown" msgstr "аварийное выключение системы БД" -#: postmaster/postmaster.c:4030 +#: postmaster/postmaster.c:4031 #, c-format msgid "shutting down due to startup process failure" msgstr "сервер останавливается из-за ошибки в стартовом процессе" -#: postmaster/postmaster.c:4036 +#: postmaster/postmaster.c:4037 #, c-format msgid "shutting down because restart_after_crash is off" msgstr "сервер останавливается, так как параметр restart_after_crash равен off" -#: postmaster/postmaster.c:4048 +#: postmaster/postmaster.c:4049 #, c-format msgid "all server processes terminated; reinitializing" msgstr "все серверные процессы завершены... переинициализация" -#: postmaster/postmaster.c:4222 postmaster/postmaster.c:5573 -#: postmaster/postmaster.c:5964 +#: postmaster/postmaster.c:4223 postmaster/postmaster.c:5575 +#: postmaster/postmaster.c:5966 #, c-format msgid "could not generate random cancel key" msgstr "не удалось сгенерировать случайный ключ отмены" -#: postmaster/postmaster.c:4276 +#: postmaster/postmaster.c:4277 #, c-format msgid "could not fork new process for connection: %m" msgstr "породить новый процесс для соединения не удалось: %m" -#: postmaster/postmaster.c:4318 +#: postmaster/postmaster.c:4319 msgid "could not fork new process for connection: " msgstr "породить новый процесс для соединения не удалось: " -#: postmaster/postmaster.c:4424 +#: postmaster/postmaster.c:4425 #, c-format msgid "connection received: host=%s port=%s" msgstr "принято подключение: узел=%s порт=%s" -#: postmaster/postmaster.c:4429 +#: postmaster/postmaster.c:4430 #, c-format msgid "connection received: host=%s" msgstr "принято подключение: узел=%s" -#: postmaster/postmaster.c:4672 +#: postmaster/postmaster.c:4673 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "запустить серверный процесс \"%s\" не удалось: %m" -#: postmaster/postmaster.c:4730 +#: postmaster/postmaster.c:4731 #, c-format msgid "could not create backend parameter file mapping: error code %lu" msgstr "" "создать отображение файла серверных параметров не удалось (код ошибки: %lu)" -#: postmaster/postmaster.c:4739 +#: postmaster/postmaster.c:4740 #, c-format msgid "could not map backend parameter memory: error code %lu" msgstr "" "отобразить файл серверных параметров в память не удалось (код ошибки: %lu)" -#: postmaster/postmaster.c:4766 +#: postmaster/postmaster.c:4767 #, c-format msgid "subprocess command line too long" msgstr "слишком длинная командная строка подпроцесса" -#: postmaster/postmaster.c:4784 +#: postmaster/postmaster.c:4785 #, c-format msgid "CreateProcess() call failed: %m (error code %lu)" msgstr "ошибка в CreateProcess(): %m (код ошибки: %lu)" -#: postmaster/postmaster.c:4811 +#: postmaster/postmaster.c:4812 #, c-format msgid "could not unmap view of backend parameter file: error code %lu" msgstr "" "отключить отображение файла серверных параметров не удалось (код ошибки: %lu)" -#: postmaster/postmaster.c:4815 +#: postmaster/postmaster.c:4816 #, c-format msgid "could not close handle to backend parameter file: error code %lu" msgstr "" "закрыть указатель файла серверных параметров не удалось (код ошибки: %lu)" -#: postmaster/postmaster.c:4837 +#: postmaster/postmaster.c:4838 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "" "число повторных попыток резервирования разделяемой памяти достигло предела" -#: postmaster/postmaster.c:4838 +#: postmaster/postmaster.c:4839 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "Это может быть вызвано антивирусным ПО или механизмом ASLR." -#: postmaster/postmaster.c:5020 +#: postmaster/postmaster.c:5021 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "не удалось загрузить конфигурацию SSL в дочерний процесс" -#: postmaster/postmaster.c:5146 +#: postmaster/postmaster.c:5147 #, c-format -msgid "Please report this to <%s>." -msgstr "Пожалуйста, напишите об этой ошибке по адресу <%s>." +msgid "postmaster became multithreaded" +msgstr "процесс postmaster стал многопоточным" -#: postmaster/postmaster.c:5233 +#: postmaster/postmaster.c:5235 #, c-format msgid "database system is ready to accept read-only connections" msgstr "система БД готова принимать подключения в режиме \"только чтение\"" -#: postmaster/postmaster.c:5497 +#: postmaster/postmaster.c:5499 #, c-format msgid "could not fork startup process: %m" msgstr "породить стартовый процесс не удалось: %m" -#: postmaster/postmaster.c:5501 +#: postmaster/postmaster.c:5503 #, c-format msgid "could not fork archiver process: %m" msgstr "породить процесс архиватора не удалось: %m" -#: postmaster/postmaster.c:5505 +#: postmaster/postmaster.c:5507 #, c-format msgid "could not fork background writer process: %m" msgstr "породить процесс фоновой записи не удалось: %m" -#: postmaster/postmaster.c:5509 +#: postmaster/postmaster.c:5511 #, c-format msgid "could not fork checkpointer process: %m" msgstr "породить процесс контрольных точек не удалось: %m" -#: postmaster/postmaster.c:5513 +#: postmaster/postmaster.c:5515 #, c-format msgid "could not fork WAL writer process: %m" msgstr "породить процесс записи WAL не удалось: %m" -#: postmaster/postmaster.c:5517 +#: postmaster/postmaster.c:5519 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "породить процесс считывания WAL не удалось: %m" -#: postmaster/postmaster.c:5521 +#: postmaster/postmaster.c:5523 #, c-format msgid "could not fork process: %m" msgstr "породить процесс не удалось: %m" -#: postmaster/postmaster.c:5722 postmaster/postmaster.c:5745 +#: postmaster/postmaster.c:5724 postmaster/postmaster.c:5747 #, c-format msgid "database connection requirement not indicated during registration" msgstr "" "при регистрации фонового процесса не указывалось, что ему требуется " "подключение к БД" -#: postmaster/postmaster.c:5729 postmaster/postmaster.c:5752 +#: postmaster/postmaster.c:5731 postmaster/postmaster.c:5754 #, c-format msgid "invalid processing mode in background worker" msgstr "неправильный режим обработки в фоновом процессе" -#: postmaster/postmaster.c:5837 +#: postmaster/postmaster.c:5839 #, c-format msgid "could not fork worker process: %m" msgstr "породить рабочий процесс не удалось: %m" -#: postmaster/postmaster.c:5950 +#: postmaster/postmaster.c:5952 #, c-format msgid "no slot available for new worker process" msgstr "для нового рабочего процесса не нашлось свободного слота" -#: postmaster/postmaster.c:6284 +#: postmaster/postmaster.c:6286 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "" "продублировать сокет %d для серверного процесса не удалось (код ошибки: %d)" -#: postmaster/postmaster.c:6316 +#: postmaster/postmaster.c:6318 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "создать наследуемый сокет не удалось (код ошибки: %d)\n" -#: postmaster/postmaster.c:6345 +#: postmaster/postmaster.c:6347 #, c-format msgid "could not open backend variables file \"%s\": %s\n" msgstr "открыть файл серверных переменных \"%s\" не удалось: %s\n" -#: postmaster/postmaster.c:6352 +#: postmaster/postmaster.c:6354 #, c-format msgid "could not read from backend variables file \"%s\": %s\n" msgstr "прочитать файл серверных переменных \"%s\" не удалось: %s\n" -#: postmaster/postmaster.c:6361 +#: postmaster/postmaster.c:6363 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "не удалось стереть файл \"%s\": %s\n" -#: postmaster/postmaster.c:6378 +#: postmaster/postmaster.c:6380 #, c-format msgid "could not map view of backend variables: error code %lu\n" msgstr "отобразить файл серверных переменных не удалось (код ошибки: %lu)\n" -#: postmaster/postmaster.c:6387 +#: postmaster/postmaster.c:6389 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "" "отключить отображение файла серверных переменных не удалось (код ошибки: " "%lu)\n" -#: postmaster/postmaster.c:6394 +#: postmaster/postmaster.c:6396 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "" "закрыть указатель файла серверных переменных не удалось (код ошибки: %lu)\n" -#: postmaster/postmaster.c:6556 +#: postmaster/postmaster.c:6558 #, c-format msgid "could not read exit code for process\n" msgstr "прочитать код завершения процесса не удалось\n" -#: postmaster/postmaster.c:6598 +#: postmaster/postmaster.c:6600 #, c-format msgid "could not post child completion status\n" msgstr "отправить состояние завершения потомка не удалось\n" @@ -21602,39 +21613,39 @@ msgstr "" msgid "subscription has no replication slot set" msgstr "для подписки не задан слот репликации" -#: replication/pgoutput/pgoutput.c:196 +#: replication/pgoutput/pgoutput.c:205 #, c-format msgid "invalid proto_version" msgstr "неверное значение proto_version" -#: replication/pgoutput/pgoutput.c:201 +#: replication/pgoutput/pgoutput.c:210 #, c-format msgid "proto_version \"%s\" out of range" msgstr "значение proto_verson \"%s\" вне диапазона" -#: replication/pgoutput/pgoutput.c:218 +#: replication/pgoutput/pgoutput.c:227 #, c-format msgid "invalid publication_names syntax" msgstr "неверный синтаксис publication_names" -#: replication/pgoutput/pgoutput.c:289 +#: replication/pgoutput/pgoutput.c:324 #, 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:295 +#: replication/pgoutput/pgoutput.c:330 #, 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:301 +#: replication/pgoutput/pgoutput.c:336 #, c-format msgid "publication_names parameter missing" msgstr "отсутствует параметр publication_names" -#: replication/pgoutput/pgoutput.c:314 +#: replication/pgoutput/pgoutput.c:349 #, c-format msgid "" "requested proto_version=%d does not support streaming, need %d or higher" @@ -21642,7 +21653,7 @@ msgstr "" "запрошенная версия proto_version=%d не поддерживает потоковую передачу, " "требуется версия %d или выше" -#: replication/pgoutput/pgoutput.c:319 +#: replication/pgoutput/pgoutput.c:354 #, c-format msgid "streaming requested, but not supported by output plugin" msgstr "запрошена потоковая передача, но она не поддерживается модулем вывода" @@ -21964,7 +21975,7 @@ msgstr "загрузка файла истории для линии време msgid "could not write to log segment %s at offset %u, length %lu: %m" msgstr "не удалось записать в сегмент журнала %s (смещение %u, длина %lu): %m" -#: replication/walsender.c:525 storage/smgr/md.c:1324 +#: replication/walsender.c:525 storage/smgr/md.c:1336 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "не удалось перейти к концу файла \"%s\": %m" @@ -22349,7 +22360,7 @@ msgstr "правило \"%s\" для отношения\"%s\" не сущест msgid "renaming an ON SELECT rule is not allowed" msgstr "переименовывать правило ON SELECT нельзя" -#: rewrite/rewriteHandler.c:577 +#: rewrite/rewriteHandler.c:583 #, c-format msgid "" "WITH query name \"%s\" appears in both a rule action and the query being " @@ -22358,7 +22369,7 @@ msgstr "" "имя запроса WITH \"%s\" оказалось и в действии правила, и в переписываемом " "запросе" -#: rewrite/rewriteHandler.c:604 +#: rewrite/rewriteHandler.c:610 #, c-format msgid "" "INSERT...SELECT rule actions are not supported for queries having data-" @@ -22367,118 +22378,118 @@ msgstr "" "правила INSERT...SELECT не поддерживаются для запросов с операторами, " "изменяющими данные, в WITH" -#: rewrite/rewriteHandler.c:657 +#: rewrite/rewriteHandler.c:663 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "RETURNING можно определить только для одного правила" -#: rewrite/rewriteHandler.c:889 rewrite/rewriteHandler.c:928 +#: rewrite/rewriteHandler.c:895 rewrite/rewriteHandler.c:934 #, c-format msgid "cannot insert a non-DEFAULT value into column \"%s\"" msgstr "в столбец \"%s\" можно вставить только значение по умолчанию" -#: rewrite/rewriteHandler.c:891 rewrite/rewriteHandler.c:957 +#: rewrite/rewriteHandler.c:897 rewrite/rewriteHandler.c:963 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "" "Столбец \"%s\" является столбцом идентификации со свойством GENERATED ALWAYS." -#: rewrite/rewriteHandler.c:893 +#: rewrite/rewriteHandler.c:899 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "Для переопределения укажите OVERRIDING SYSTEM VALUE." -#: rewrite/rewriteHandler.c:955 rewrite/rewriteHandler.c:963 +#: rewrite/rewriteHandler.c:961 rewrite/rewriteHandler.c:969 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "столбцу \"%s\" можно присвоить только значение DEFAULT" -#: rewrite/rewriteHandler.c:1110 rewrite/rewriteHandler.c:1128 +#: rewrite/rewriteHandler.c:1104 rewrite/rewriteHandler.c:1122 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "многочисленные присвоения одному столбцу \"%s\"" -#: rewrite/rewriteHandler.c:1739 rewrite/rewriteHandler.c:3141 +#: rewrite/rewriteHandler.c:1723 rewrite/rewriteHandler.c:3174 #, c-format msgid "access to non-system view \"%s\" is restricted" msgstr "доступ к несистемному представлению \"%s\" ограничен" -#: rewrite/rewriteHandler.c:2148 rewrite/rewriteHandler.c:4027 +#: rewrite/rewriteHandler.c:2151 rewrite/rewriteHandler.c:4060 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "обнаружена бесконечная рекурсия в правилах для отношения \"%s\"" -#: rewrite/rewriteHandler.c:2233 +#: rewrite/rewriteHandler.c:2256 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "обнаружена бесконечная рекурсия в политике для отношения \"%s\"" -#: rewrite/rewriteHandler.c:2553 +#: rewrite/rewriteHandler.c:2586 msgid "Junk view columns are not updatable." msgstr "Утилизируемые столбцы представлений не обновляются." -#: rewrite/rewriteHandler.c:2558 +#: rewrite/rewriteHandler.c:2591 msgid "" "View columns that are not columns of their base relation are not updatable." msgstr "" "Столбцы представлений, не являющиеся столбцами базовых отношений, не " "обновляются." -#: rewrite/rewriteHandler.c:2561 +#: rewrite/rewriteHandler.c:2594 msgid "View columns that refer to system columns are not updatable." msgstr "" "Столбцы представлений, ссылающиеся на системные столбцы, не обновляются." -#: rewrite/rewriteHandler.c:2564 +#: rewrite/rewriteHandler.c:2597 msgid "View columns that return whole-row references are not updatable." msgstr "" "Столбцы представлений, возвращающие ссылки на всю строку, не обновляются." -#: rewrite/rewriteHandler.c:2625 +#: rewrite/rewriteHandler.c:2658 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Представления с DISTINCT не обновляются автоматически." -#: rewrite/rewriteHandler.c:2628 +#: rewrite/rewriteHandler.c:2661 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Представления с GROUP BY не обновляются автоматически." -#: rewrite/rewriteHandler.c:2631 +#: rewrite/rewriteHandler.c:2664 msgid "Views containing HAVING are not automatically updatable." msgstr "Представления с HAVING не обновляются автоматически." -#: rewrite/rewriteHandler.c:2634 +#: rewrite/rewriteHandler.c:2667 msgid "" "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "" "Представления с UNION, INTERSECT или EXCEPT не обновляются автоматически." -#: rewrite/rewriteHandler.c:2637 +#: rewrite/rewriteHandler.c:2670 msgid "Views containing WITH are not automatically updatable." msgstr "Представления с WITH не обновляются автоматически." -#: rewrite/rewriteHandler.c:2640 +#: rewrite/rewriteHandler.c:2673 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Представления с LIMIT или OFFSET не обновляются автоматически." -#: rewrite/rewriteHandler.c:2652 +#: rewrite/rewriteHandler.c:2685 msgid "Views that return aggregate functions are not automatically updatable." msgstr "" "Представления, возвращающие агрегатные функции, не обновляются автоматически." -#: rewrite/rewriteHandler.c:2655 +#: rewrite/rewriteHandler.c:2688 msgid "Views that return window functions are not automatically updatable." msgstr "" "Представления, возвращающие оконные функции, не обновляются автоматически." -#: rewrite/rewriteHandler.c:2658 +#: rewrite/rewriteHandler.c:2691 msgid "" "Views that return set-returning functions are not automatically updatable." msgstr "" "Представления, возвращающие функции с результатом-множеством, не обновляются " "автоматически." -#: rewrite/rewriteHandler.c:2665 rewrite/rewriteHandler.c:2669 -#: rewrite/rewriteHandler.c:2677 +#: rewrite/rewriteHandler.c:2698 rewrite/rewriteHandler.c:2702 +#: rewrite/rewriteHandler.c:2710 msgid "" "Views that do not select from a single table or view are not automatically " "updatable." @@ -22486,27 +22497,27 @@ msgstr "" "Представления, выбирающие данные не из одной таблицы или представления, не " "обновляются автоматически." -#: rewrite/rewriteHandler.c:2680 +#: rewrite/rewriteHandler.c:2713 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Представления, содержащие TABLESAMPLE, не обновляются автоматически." -#: rewrite/rewriteHandler.c:2704 +#: rewrite/rewriteHandler.c:2737 msgid "Views that have no updatable columns are not automatically updatable." msgstr "" "Представления, не содержащие обновляемых столбцов, не обновляются " "автоматически." -#: rewrite/rewriteHandler.c:3201 +#: rewrite/rewriteHandler.c:3234 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "вставить данные в столбец \"%s\" представления \"%s\" нельзя" -#: rewrite/rewriteHandler.c:3209 +#: rewrite/rewriteHandler.c:3242 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "изменить данные в столбце \"%s\" представления \"%s\" нельзя" -#: rewrite/rewriteHandler.c:3691 +#: rewrite/rewriteHandler.c:3724 #, c-format msgid "" "DO INSTEAD NOTIFY rules are not supported for data-modifying statements in " @@ -22515,7 +22526,7 @@ msgstr "" "правила DO INSTEAD NOTIFY не поддерживаются в операторах, изменяющих данные, " "в WITH" -#: rewrite/rewriteHandler.c:3702 +#: rewrite/rewriteHandler.c:3735 #, c-format msgid "" "DO INSTEAD NOTHING rules are not supported for data-modifying statements in " @@ -22524,7 +22535,7 @@ msgstr "" "правила DO INSTEAD NOTHING не поддерживаются в операторах, изменяющих " "данные, в WITH" -#: rewrite/rewriteHandler.c:3716 +#: rewrite/rewriteHandler.c:3749 #, c-format msgid "" "conditional DO INSTEAD rules are not supported for data-modifying statements " @@ -22533,13 +22544,13 @@ msgstr "" "условные правила DO INSTEAD не поддерживаются для операторов, изменяющих " "данные, в WITH" -#: rewrite/rewriteHandler.c:3720 +#: rewrite/rewriteHandler.c:3753 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "" "правила DO ALSO не поддерживаются для операторов, изменяющих данные, в WITH" -#: rewrite/rewriteHandler.c:3725 +#: rewrite/rewriteHandler.c:3758 #, c-format msgid "" "multi-statement DO INSTEAD rules are not supported for data-modifying " @@ -22548,8 +22559,8 @@ msgstr "" "составные правила DO INSTEAD не поддерживаются для операторов, изменяющих " "данные, в WITH" -#: rewrite/rewriteHandler.c:3955 rewrite/rewriteHandler.c:3963 -#: rewrite/rewriteHandler.c:3971 +#: rewrite/rewriteHandler.c:3988 rewrite/rewriteHandler.c:3996 +#: rewrite/rewriteHandler.c:4004 #, c-format msgid "" "Views with conditional DO INSTEAD rules are not automatically updatable." @@ -22557,43 +22568,43 @@ msgstr "" "Представления в сочетании с правилами DO INSTEAD с условиями не обновляются " "автоматически." -#: rewrite/rewriteHandler.c:4076 +#: rewrite/rewriteHandler.c:4109 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "выполнить INSERT RETURNING для отношения \"%s\" нельзя" -#: rewrite/rewriteHandler.c:4078 +#: rewrite/rewriteHandler.c:4111 #, 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:4083 +#: rewrite/rewriteHandler.c:4116 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "выполнить UPDATE RETURNING для отношения \"%s\" нельзя" -#: rewrite/rewriteHandler.c:4085 +#: rewrite/rewriteHandler.c:4118 #, 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:4090 +#: rewrite/rewriteHandler.c:4123 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "выполнить DELETE RETURNING для отношения \"%s\" нельзя" -#: rewrite/rewriteHandler.c:4092 +#: rewrite/rewriteHandler.c:4125 #, 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:4110 +#: rewrite/rewriteHandler.c:4143 #, c-format msgid "" "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or " @@ -22602,7 +22613,7 @@ msgstr "" "INSERT c предложением ON CONFLICT нельзя использовать с таблицей, для " "которой заданы правила INSERT или UPDATE" -#: rewrite/rewriteHandler.c:4167 +#: rewrite/rewriteHandler.c:4200 #, c-format msgid "" "WITH cannot be used in a query that is rewritten by rules into multiple " @@ -22611,17 +22622,17 @@ msgstr "" "WITH нельзя использовать в запросе, преобразованном правилами в несколько " "запросов" -#: rewrite/rewriteManip.c:1009 +#: rewrite/rewriteManip.c:1010 #, c-format msgid "conditional utility statements are not implemented" msgstr "условные служебные операторы не реализованы" -#: rewrite/rewriteManip.c:1175 +#: rewrite/rewriteManip.c:1176 #, c-format msgid "WHERE CURRENT OF on a view is not implemented" msgstr "условие WHERE CURRENT OF для представлений не реализовано" -#: rewrite/rewriteManip.c:1510 +#: rewrite/rewriteManip.c:1512 #, c-format msgid "" "NEW variables in ON UPDATE rules cannot reference columns that are part of a " @@ -22757,7 +22768,7 @@ msgstr "" msgid "could not delete shared fileset \"%s\": %m" msgstr "ошибка удаления разделяемого набора файлов \"%s\": %m" -#: storage/file/buffile.c:902 storage/smgr/md.c:309 storage/smgr/md.c:869 +#: storage/file/buffile.c:902 storage/smgr/md.c:309 storage/smgr/md.c:871 #, c-format msgid "could not truncate file \"%s\": %m" msgstr "не удалось обрезать файл \"%s\": %m" @@ -23502,19 +23513,19 @@ msgstr "не удалось записать блок %u в файл \"%s\": %m" msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" msgstr "не удалось записать блок %u в файл \"%s\" (записано байт: %d из %d)" -#: storage/smgr/md.c:840 +#: storage/smgr/md.c:842 #, 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:895 +#: storage/smgr/md.c:897 #, c-format msgid "could not truncate file \"%s\" to %u blocks: %m" msgstr "не удалось обрезать файл \"%s\" до нужного числа блоков (%u): %m" -#: storage/smgr/md.c:1289 +#: storage/smgr/md.c:1301 #, c-format msgid "" "could not open file \"%s\" (target block %u): previous segment is only %u " @@ -23523,7 +23534,7 @@ msgstr "" "не удалось открыть файл file \"%s\" (целевой блок %u): недостаточно блоков в " "предыдущем сегменте (всего %u)" -#: storage/smgr/md.c:1303 +#: storage/smgr/md.c:1315 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "не удалось открыть файл file \"%s\" (целевой блок %u): %m" @@ -23574,7 +23585,7 @@ msgstr "неверный размер аргумента (%d) в сообщен msgid "incorrect binary data format in function argument %d" msgstr "неправильный формат двоичных данных в аргументе функции %d" -#: tcop/postgres.c:449 tcop/postgres.c:4831 +#: tcop/postgres.c:449 tcop/postgres.c:4836 #, c-format msgid "invalid frontend message type %d" msgstr "неправильный тип клиентского сообщения %d" @@ -23856,49 +23867,49 @@ msgstr "" "Увеличьте предел глубины стека в системе с помощью команды \"ulimit -s\" или " "эквивалента в вашей ОС." -#: tcop/postgres.c:4008 +#: tcop/postgres.c:4013 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "неверный аргумент командной строки для серверного процесса: %s" -#: tcop/postgres.c:4009 tcop/postgres.c:4015 +#: tcop/postgres.c:4014 tcop/postgres.c:4020 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Для дополнительной информации попробуйте \"%s --help\"." -#: tcop/postgres.c:4013 +#: tcop/postgres.c:4018 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: неверный аргумент командной строки: %s" -#: tcop/postgres.c:4076 +#: tcop/postgres.c:4081 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: не указаны ни база данных, ни пользователь" -#: tcop/postgres.c:4733 +#: tcop/postgres.c:4738 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "неверный подтип сообщения CLOSE: %d" -#: tcop/postgres.c:4768 +#: tcop/postgres.c:4773 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "неверный подтип сообщения DESCRIBE: %d" -#: tcop/postgres.c:4852 +#: tcop/postgres.c:4857 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "" "вызовы функций через fastpath не поддерживаются для реплицирующих соединений" -#: tcop/postgres.c:4856 +#: tcop/postgres.c:4861 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "" "протокол расширенных запросов не поддерживается для реплицирующих соединений" -#: tcop/postgres.c:5033 +#: tcop/postgres.c:5038 #, c-format msgid "" "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s " @@ -23914,12 +23925,12 @@ msgstr "" "число форматов результатов в сообщении Bind (%d) не равно числу столбцов в " "запросе (%d)" -#: tcop/pquery.c:941 tcop/pquery.c:1703 +#: tcop/pquery.c:939 tcop/pquery.c:1698 #, c-format msgid "cursor can only scan forward" msgstr "курсор может сканировать только вперёд" -#: tcop/pquery.c:942 tcop/pquery.c:1704 +#: tcop/pquery.c:940 tcop/pquery.c:1699 #, c-format msgid "Declare it with SCROLL option to enable backward scan." msgstr "Добавьте в его объявление SCROLL, чтобы он мог перемещаться назад." @@ -26796,7 +26807,7 @@ msgstr "" "Чтобы обозначить отсутствующий аргумент унарного оператора, укажите NONE." #: utils/adt/regproc.c:715 utils/adt/regproc.c:756 utils/adt/regproc.c:2055 -#: utils/adt/ruleutils.c:9822 utils/adt/ruleutils.c:9991 +#: utils/adt/ruleutils.c:9828 utils/adt/ruleutils.c:9997 #, c-format msgid "too many arguments" msgstr "слишком много аргументов" @@ -27004,7 +27015,7 @@ msgstr "TIMESTAMP(%d)%s: точность должна быть неотрица msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "TIMESTAMP(%d)%s: точность уменьшена до дозволенного максимума: %d" -#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12468 +#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12501 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "timestamp вне диапазона: \"%s\"" @@ -28044,100 +28055,95 @@ msgstr "псевдоним столбца не указан" msgid "could not determine row description for function returning record" msgstr "не удалось определить описание строки для функции, возвращающей запись" -#: utils/init/miscinit.c:314 +#: utils/init/miscinit.c:315 #, c-format msgid "data directory \"%s\" does not exist" msgstr "каталог данных \"%s\" не существует" -#: utils/init/miscinit.c:319 +#: utils/init/miscinit.c:320 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "не удалось прочитать права на каталог \"%s\": %m" -#: utils/init/miscinit.c:327 +#: utils/init/miscinit.c:328 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "указанный каталог данных \"%s\" не существует" -#: utils/init/miscinit.c:343 +#: utils/init/miscinit.c:344 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "владелец каталога данных \"%s\" определён неверно" -#: utils/init/miscinit.c:345 +#: utils/init/miscinit.c:346 #, c-format msgid "The server must be started by the user that owns the data directory." msgstr "" "Сервер должен запускать пользователь, являющийся владельцем каталога данных." -#: utils/init/miscinit.c:363 +#: utils/init/miscinit.c:364 #, c-format msgid "data directory \"%s\" has invalid permissions" msgstr "для каталога данных \"%s\" установлены неправильные права доступа" -#: utils/init/miscinit.c:365 +#: utils/init/miscinit.c:366 #, 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:650 utils/misc/guc.c:7520 +#: utils/init/miscinit.c:684 utils/misc/guc.c:7520 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "" "параметр \"%s\" нельзя задать в рамках операции с ограничениями по " "безопасности" -#: utils/init/miscinit.c:718 +#: utils/init/miscinit.c:763 #, c-format msgid "role with OID %u does not exist" msgstr "роль с OID %u не существует" -#: utils/init/miscinit.c:748 +#: utils/init/miscinit.c:808 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "для роли \"%s\" вход запрещён" -#: utils/init/miscinit.c:766 +#: utils/init/miscinit.c:829 #, c-format msgid "too many connections for role \"%s\"" msgstr "слишком много подключений для роли \"%s\"" -#: utils/init/miscinit.c:834 -#, c-format -msgid "permission denied to set session authorization" -msgstr "нет прав для смены объекта авторизации в сеансе" - -#: utils/init/miscinit.c:917 +#: utils/init/miscinit.c:961 #, c-format msgid "invalid role OID: %u" msgstr "неверный OID роли: %u" -#: utils/init/miscinit.c:971 +#: utils/init/miscinit.c:1015 #, c-format msgid "database system is shut down" msgstr "система БД выключена" -#: utils/init/miscinit.c:1058 +#: utils/init/miscinit.c:1102 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "не удалось создать файл блокировки \"%s\": %m" -#: utils/init/miscinit.c:1072 +#: utils/init/miscinit.c:1116 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "не удалось открыть файл блокировки \"%s\": %m" -#: utils/init/miscinit.c:1079 +#: utils/init/miscinit.c:1123 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "не удалось прочитать файл блокировки \"%s\": %m" -#: utils/init/miscinit.c:1088 +#: utils/init/miscinit.c:1132 #, c-format msgid "lock file \"%s\" is empty" msgstr "файл блокировки \"%s\" пуст" -#: utils/init/miscinit.c:1089 +#: utils/init/miscinit.c:1133 #, c-format msgid "" "Either another server is starting, or the lock file is the remnant of a " @@ -28146,38 +28152,38 @@ msgstr "" "Либо сейчас запускается другой сервер, либо этот файл остался в результате " "сбоя при предыдущем запуске." -#: utils/init/miscinit.c:1133 +#: utils/init/miscinit.c:1177 #, c-format msgid "lock file \"%s\" already exists" msgstr "файл блокировки \"%s\" уже существует" -#: utils/init/miscinit.c:1137 +#: utils/init/miscinit.c:1181 #, c-format msgid "Is another postgres (PID %d) running in data directory \"%s\"?" msgstr "Другой экземпляр postgres (PID %d) работает с каталогом данных \"%s\"?" -#: utils/init/miscinit.c:1139 +#: utils/init/miscinit.c:1183 #, c-format msgid "Is another postmaster (PID %d) running in data directory \"%s\"?" msgstr "" "Другой экземпляр postmaster (PID %d) работает с каталогом данных \"%s\"?" -#: utils/init/miscinit.c:1142 +#: utils/init/miscinit.c:1186 #, c-format msgid "Is another postgres (PID %d) using socket file \"%s\"?" msgstr "Другой экземпляр postgres (PID %d) использует файл сокета \"%s\"?" -#: utils/init/miscinit.c:1144 +#: utils/init/miscinit.c:1188 #, c-format msgid "Is another postmaster (PID %d) using socket file \"%s\"?" msgstr "Другой экземпляр postmaster (PID %d) использует файл сокета \"%s\"?" -#: utils/init/miscinit.c:1195 +#: utils/init/miscinit.c:1239 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "не удалось стереть старый файл блокировки \"%s\": %m" -#: utils/init/miscinit.c:1197 +#: utils/init/miscinit.c:1241 #, c-format msgid "" "The file seems accidentally left over, but it could not be removed. Please " @@ -28186,48 +28192,48 @@ msgstr "" "Кажется, файл сохранился по ошибке, но удалить его не получилось. " "Пожалуйста, удалите файл вручную и повторите попытку." -#: utils/init/miscinit.c:1234 utils/init/miscinit.c:1248 -#: utils/init/miscinit.c:1259 +#: utils/init/miscinit.c:1278 utils/init/miscinit.c:1292 +#: utils/init/miscinit.c:1303 #, c-format msgid "could not write lock file \"%s\": %m" msgstr "не удалось записать файл блокировки \"%s\": %m" -#: utils/init/miscinit.c:1370 utils/init/miscinit.c:1512 utils/misc/guc.c:10434 +#: utils/init/miscinit.c:1414 utils/init/miscinit.c:1556 utils/misc/guc.c:10473 #, c-format msgid "could not read from file \"%s\": %m" msgstr "не удалось прочитать файл \"%s\": %m" -#: utils/init/miscinit.c:1500 +#: utils/init/miscinit.c:1544 #, c-format msgid "could not open file \"%s\": %m; continuing anyway" msgstr "не удалось открыть файл \"%s\": %m; ошибка игнорируется" -#: utils/init/miscinit.c:1525 +#: utils/init/miscinit.c:1569 #, c-format msgid "lock file \"%s\" contains wrong PID: %ld instead of %ld" msgstr "файл блокировки \"%s\" содержит неверный PID: %ld вместо %ld" -#: utils/init/miscinit.c:1564 utils/init/miscinit.c:1580 +#: utils/init/miscinit.c:1608 utils/init/miscinit.c:1624 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "\"%s\" не является каталогом данных" -#: utils/init/miscinit.c:1566 +#: utils/init/miscinit.c:1610 #, c-format msgid "File \"%s\" is missing." msgstr "Файл \"%s\" отсутствует." -#: utils/init/miscinit.c:1582 +#: utils/init/miscinit.c:1626 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "Файл \"%s\" содержит неприемлемые данные." -#: utils/init/miscinit.c:1584 +#: utils/init/miscinit.c:1628 #, c-format msgid "You might need to initdb." msgstr "Возможно, вам нужно выполнить initdb." -#: utils/init/miscinit.c:1592 +#: utils/init/miscinit.c:1636 #, c-format msgid "" "The data directory was initialized by PostgreSQL version %s, which is not " @@ -28306,17 +28312,17 @@ msgstr "доступ к базе \"%s\" запрещён" msgid "User does not have CONNECT privilege." msgstr "Пользователь не имеет привилегии CONNECT." -#: utils/init/postinit.c:376 +#: utils/init/postinit.c:379 #, c-format msgid "too many connections for database \"%s\"" msgstr "слишком много подключений к БД \"%s\"" -#: utils/init/postinit.c:398 utils/init/postinit.c:405 +#: utils/init/postinit.c:401 utils/init/postinit.c:408 #, c-format msgid "database locale is incompatible with operating system" msgstr "локаль БД несовместима с операционной системой" -#: utils/init/postinit.c:399 +#: utils/init/postinit.c:402 #, c-format msgid "" "The database was initialized with LC_COLLATE \"%s\", which is not " @@ -28325,7 +28331,7 @@ msgstr "" "База данных была инициализирована с параметром LC_COLLATE \"%s\", но сейчас " "setlocale() не воспринимает его." -#: utils/init/postinit.c:401 utils/init/postinit.c:408 +#: utils/init/postinit.c:404 utils/init/postinit.c:411 #, c-format msgid "" "Recreate the database with another locale or install the missing locale." @@ -28333,7 +28339,7 @@ msgstr "" "Пересоздайте базу данных с другой локалью или установите поддержку нужной " "локали." -#: utils/init/postinit.c:406 +#: utils/init/postinit.c:409 #, c-format msgid "" "The database was initialized with LC_CTYPE \"%s\", which is not recognized " @@ -28342,36 +28348,36 @@ msgstr "" "База данных была инициализирована с параметром LC_CTYPE \"%s\", но сейчас " "setlocale() не воспринимает его." -#: utils/init/postinit.c:761 +#: utils/init/postinit.c:764 #, c-format msgid "no roles are defined in this database system" msgstr "в этой системе баз данных не создано ни одной роли" -#: utils/init/postinit.c:762 +#: utils/init/postinit.c:765 #, c-format msgid "You should immediately run CREATE USER \"%s\" SUPERUSER;." msgstr "Вы должны немедленно выполнить CREATE USER \"%s\" CREATEUSER;." -#: utils/init/postinit.c:798 +#: utils/init/postinit.c:801 #, c-format msgid "new replication connections are not allowed during database shutdown" msgstr "" "новые подключения для репликации не допускаются в процессе остановки БД" -#: utils/init/postinit.c:802 +#: utils/init/postinit.c:805 #, c-format msgid "must be superuser to connect during database shutdown" msgstr "" "нужно быть суперпользователем, чтобы подключиться в процессе остановки БД" -#: utils/init/postinit.c:812 +#: utils/init/postinit.c:815 #, c-format msgid "must be superuser to connect in binary upgrade mode" msgstr "" "нужно быть суперпользователем, чтобы подключиться в режиме двоичного " "обновления" -#: utils/init/postinit.c:825 +#: utils/init/postinit.c:828 #, c-format msgid "" "remaining connection slots are reserved for non-replication superuser " @@ -28380,34 +28386,34 @@ msgstr "" "оставшиеся слоты подключений зарезервированы для подключений " "суперпользователя (не для репликации)" -#: utils/init/postinit.c:835 +#: utils/init/postinit.c:838 #, c-format msgid "must be superuser or replication role to start walsender" msgstr "" "для запуска процесса walsender требуется роль репликации или права " "суперпользователя" -#: utils/init/postinit.c:904 +#: utils/init/postinit.c:907 #, c-format msgid "database %u does not exist" msgstr "база данных %u не существует" -#: utils/init/postinit.c:994 +#: utils/init/postinit.c:997 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "Похоже, она только что была удалена или переименована." -#: utils/init/postinit.c:1001 +#: utils/init/postinit.c:1004 #, c-format msgid "cannot connect to invalid database \"%s\"" msgstr "подключиться к некорректной базе \"%s\" нельзя" -#: utils/init/postinit.c:1021 +#: utils/init/postinit.c:1024 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "Подкаталог базы данных \"%s\" отсутствует." -#: utils/init/postinit.c:1026 +#: utils/init/postinit.c:1029 #, c-format msgid "could not access directory \"%s\": %m" msgstr "ошибка при обращении к каталогу \"%s\": %m" @@ -29145,10 +29151,10 @@ msgstr "" #: utils/misc/guc.c:1769 msgid "" -"Start a subprocess to capture stderr output and/or csvlogs into log files." +"Start a subprocess to capture stderr, csvlog and/or jsonlog into log files." msgstr "" -"Запускает подпроцесс для чтения stderr и/или csv-файлов и записи в файлы " -"протоколов." +"Запускает подпроцесс для чтения stderr, csvlog и/или jsonlog и записи в " +"файлы протоколов." #: utils/misc/guc.c:1778 msgid "Truncate existing log files of same name during log rotation." @@ -30940,7 +30946,7 @@ msgstr "" "Имена нестандартных параметров должны состоять из двух или более простых " "идентификаторов, разделённых точками." -#: utils/misc/guc.c:5555 utils/misc/guc.c:9327 +#: utils/misc/guc.c:5555 utils/misc/guc.c:9366 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "нераспознанный параметр конфигурации: \"%s\"" @@ -31026,13 +31032,13 @@ msgstr "%g%s%s вне диапазона, допустимого для пара msgid "parameter \"%s\" cannot be set during a parallel operation" msgstr "параметр \"%s\" нельзя установить во время параллельной операции" -#: utils/misc/guc.c:7372 utils/misc/guc.c:8572 +#: utils/misc/guc.c:7372 utils/misc/guc.c:8611 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "параметр \"%s\" нельзя изменить" #: utils/misc/guc.c:7395 utils/misc/guc.c:7597 utils/misc/guc.c:7691 -#: utils/misc/guc.c:7785 utils/misc/guc.c:7905 utils/misc/guc.c:8004 +#: utils/misc/guc.c:7785 utils/misc/guc.c:7907 utils/misc/guc.c:8043 #: guc-file.l:353 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" @@ -31043,7 +31049,7 @@ msgstr "параметр \"%s\" изменяется только при пер msgid "parameter \"%s\" cannot be changed now" msgstr "параметр \"%s\" нельзя изменить сейчас" -#: utils/misc/guc.c:7423 utils/misc/guc.c:7474 utils/misc/guc.c:11390 +#: utils/misc/guc.c:7423 utils/misc/guc.c:7474 utils/misc/guc.c:11423 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "нет прав для изменения параметра \"%s\"" @@ -31060,79 +31066,79 @@ msgstr "" "параметр \"%s\" нельзя задать в функции с контекстом безопасности " "определившего" -#: utils/misc/guc.c:8145 utils/misc/guc.c:8192 utils/misc/guc.c:9606 +#: utils/misc/guc.c:8184 utils/misc/guc.c:8231 utils/misc/guc.c:9645 #, 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:8276 +#: utils/misc/guc.c:8315 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s принимает только один аргумент" -#: utils/misc/guc.c:8524 +#: utils/misc/guc.c:8563 #, c-format msgid "must be superuser to execute ALTER SYSTEM command" msgstr "выполнить команду ALTER SYSTEM может только суперпользователь" -#: utils/misc/guc.c:8605 +#: utils/misc/guc.c:8644 #, c-format msgid "parameter value for ALTER SYSTEM must not contain a newline" msgstr "значение параметра для ALTER SYSTEM не должно быть многострочным" -#: utils/misc/guc.c:8650 +#: utils/misc/guc.c:8689 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "не удалось разобрать содержимое файла \"%s\"" -#: utils/misc/guc.c:8731 +#: utils/misc/guc.c:8770 #, c-format msgid "cannot set parameters during a parallel operation" msgstr "устанавливать параметры во время параллельных операций нельзя" -#: utils/misc/guc.c:8807 +#: utils/misc/guc.c:8846 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT не реализовано" -#: utils/misc/guc.c:8891 +#: utils/misc/guc.c:8930 #, c-format msgid "SET requires parameter name" msgstr "SET требует имя параметра" -#: utils/misc/guc.c:9024 +#: utils/misc/guc.c:9063 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "попытка переопределить параметр \"%s\"" -#: utils/misc/guc.c:10837 +#: utils/misc/guc.c:10870 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "при назначении параметру \"%s\" значения \"%s\"" -#: utils/misc/guc.c:11002 +#: utils/misc/guc.c:11035 #, c-format msgid "parameter \"%s\" could not be set" msgstr "параметр \"%s\" нельзя установить" -#: utils/misc/guc.c:11094 +#: utils/misc/guc.c:11127 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "не удалось разобрать значение параметра \"%s\"" -#: utils/misc/guc.c:11452 utils/misc/guc.c:11486 +#: utils/misc/guc.c:11485 utils/misc/guc.c:11519 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "неверное значение параметра \"%s\": %d" -#: utils/misc/guc.c:11520 +#: utils/misc/guc.c:11553 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "неверное значение параметра \"%s\": %g" -#: utils/misc/guc.c:11807 +#: utils/misc/guc.c:11840 #, c-format msgid "" "\"temp_buffers\" cannot be changed after any temporary tables have been " @@ -31141,23 +31147,23 @@ msgstr "" "параметр \"temp_buffers\" нельзя изменить после обращения к временным " "таблицам в текущем сеансе." -#: utils/misc/guc.c:11819 +#: utils/misc/guc.c:11852 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour не поддерживается в данной сборке" -#: utils/misc/guc.c:11832 +#: utils/misc/guc.c:11865 #, c-format msgid "SSL is not supported by this build" msgstr "SSL не поддерживается в данной сборке" -#: utils/misc/guc.c:11844 +#: utils/misc/guc.c:11877 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "" "Этот параметр нельзя включить, когда \"log_statement_stats\" равен true." -#: utils/misc/guc.c:11856 +#: utils/misc/guc.c:11889 #, c-format msgid "" "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", " @@ -31167,7 +31173,7 @@ msgstr "" "\"log_parser_stats\", \"log_planner_stats\" или \"log_executor_stats\" равны " "true." -#: utils/misc/guc.c:12086 +#: utils/misc/guc.c:12119 #, c-format msgid "" "effective_io_concurrency must be set to 0 on platforms that lack " @@ -31176,7 +31182,7 @@ msgstr "" "Значение effective_io_concurrency должно равняться 0 на платформах, где " "отсутствует posix_fadvise()." -#: utils/misc/guc.c:12099 +#: utils/misc/guc.c:12132 #, c-format msgid "" "maintenance_io_concurrency must be set to 0 on platforms that lack " @@ -31185,12 +31191,12 @@ msgstr "" "Значение maintenance_io_concurrency должно равняться 0 на платформах, где " "отсутствует posix_fadvise()." -#: utils/misc/guc.c:12113 +#: utils/misc/guc.c:12146 #, c-format msgid "huge_page_size must be 0 on this platform." msgstr "Значение huge_page_size должно равняться 0 на этой платформе." -#: utils/misc/guc.c:12127 +#: utils/misc/guc.c:12160 #, c-format msgid "" "client_connection_check_interval must be set to 0 on platforms that lack " @@ -31199,22 +31205,22 @@ msgstr "" "Значение client_connection_check_interval должно равняться 0 на платформах, " "где отсутствует POLLRDHUP." -#: utils/misc/guc.c:12255 +#: utils/misc/guc.c:12288 #, c-format msgid "invalid character" msgstr "неверный символ" -#: utils/misc/guc.c:12315 +#: utils/misc/guc.c:12348 #, c-format msgid "recovery_target_timeline is not a valid number." msgstr "recovery_target_timeline не является допустимым числом." -#: utils/misc/guc.c:12355 +#: utils/misc/guc.c:12388 #, c-format msgid "multiple recovery targets specified" msgstr "указано несколько целей восстановления" -#: utils/misc/guc.c:12356 +#: utils/misc/guc.c:12389 #, c-format msgid "" "At most one of recovery_target, recovery_target_lsn, recovery_target_name, " @@ -31224,7 +31230,7 @@ msgstr "" "recovery_target_lsn, recovery_target_name, recovery_target_time, " "recovery_target_xid." -#: utils/misc/guc.c:12364 +#: utils/misc/guc.c:12397 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "Единственное допустимое значение: \"immediate\"." @@ -32137,6 +32143,10 @@ msgstr "нестандартное использование спецсимво msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "Используйте для записи спецсимволов синтаксис спецстрок E'\\r\\n'." +#, c-format +#~ msgid "Please report this to <%s>." +#~ msgstr "Пожалуйста, напишите об этой ошибке по адресу <%s>." + #, c-format #~ msgid "record length %u at %X/%X too long" #~ msgstr "длина записи %u в позиции %X/%X слишком велика" @@ -34723,9 +34733,6 @@ msgstr "Используйте для записи спецсимволов си #~ "Для архивации WAL (archive_mode=on) wal_level должен быть \"archive\", " #~ "\"hot_standby\" или \"logical\"" -#~ msgid "postmaster became multithreaded" -#~ msgstr "процесс postmaster стал многопоточным" - #~ msgid "could not determine input data types" #~ msgstr "не удалось определить типы входных данных" diff --git a/src/bin/pg_basebackup/po/fr.po b/src/bin/pg_basebackup/po/fr.po index 4f73268545a..738b37baba8 100644 --- a/src/bin/pg_basebackup/po/fr.po +++ b/src/bin/pg_basebackup/po/fr.po @@ -933,7 +933,7 @@ msgid "" " time between status packets sent to server (default: %d)\n" msgstr "" " -s, --status-interval=SECS durée entre l'envoi de paquets de statut au\n" -" (par défaut %d)\n" +" serveur (par défaut %d)\n" #: pg_receivewal.c:90 #, c-format diff --git a/src/bin/pg_basebackup/po/ja.po b/src/bin/pg_basebackup/po/ja.po index 90610338337..e5eff6d7f92 100644 --- a/src/bin/pg_basebackup/po/ja.po +++ b/src/bin/pg_basebackup/po/ja.po @@ -752,7 +752,7 @@ msgstr "データをディスクに同期しています..." #: pg_basebackup.c:2210 #, c-format msgid "renaming backup_manifest.tmp to backup_manifest" -msgstr "backup_manifest.tmp の名前を backup_manifest に変更してください" +msgstr "backup_manifest.tmp の名前を backup_manifest に変更しています" #: pg_basebackup.c:2221 #, c-format diff --git a/src/bin/pg_controldata/po/ru.po b/src/bin/pg_controldata/po/ru.po index d50db214752..1c69b5a9b62 100644 --- a/src/bin/pg_controldata/po/ru.po +++ b/src/bin/pg_controldata/po/ru.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_controldata (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-11-03 09:09+0300\n" +"POT-Creation-Date: 2025-02-08 07:45+0200\n" "PO-Revision-Date: 2021-08-14 07:04+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -176,22 +176,22 @@ msgstr "нераспознанный код состояния" msgid "unrecognized wal_level" msgstr "нераспознанный уровень WAL" -#: pg_controldata.c:137 pg_controldata.c:155 pg_controldata.c:163 +#: pg_controldata.c:138 pg_controldata.c:156 pg_controldata.c:164 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" -#: pg_controldata.c:153 +#: pg_controldata.c:154 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "слишком много аргументов командной строки (первый: \"%s\")" -#: pg_controldata.c:162 +#: pg_controldata.c:163 #, c-format msgid "no data directory specified" msgstr "каталог данных не указан" -#: pg_controldata.c:170 +#: pg_controldata.c:171 #, c-format msgid "" "WARNING: Calculated CRC checksum does not match value stored in file.\n" @@ -205,12 +205,12 @@ msgstr "" "Следующая информация может быть недостоверной.\n" "\n" -#: pg_controldata.c:179 +#: pg_controldata.c:180 #, c-format msgid "WARNING: invalid WAL segment size\n" msgstr "ПРЕДУПРЕЖДЕНИЕ: неверный размер сегмента WAL\n" -#: pg_controldata.c:180 +#: pg_controldata.c:181 #, c-format msgid "" "The WAL segment size stored in the file, %d byte, is not a power of two\n" @@ -241,306 +241,307 @@ msgstr[2] "" "подлежит сомнению.\n" "\n" -#: pg_controldata.c:222 +#: pg_controldata.c:206 pg_controldata.c:214 pg_controldata.c:233 +#, c-format msgid "???" msgstr "???" -#: pg_controldata.c:228 +#: pg_controldata.c:239 #, c-format msgid "pg_control version number: %u\n" msgstr "Номер версии pg_control: %u\n" -#: pg_controldata.c:230 +#: pg_controldata.c:241 #, c-format msgid "Catalog version number: %u\n" msgstr "Номер версии каталога: %u\n" -#: pg_controldata.c:232 +#: pg_controldata.c:243 #, c-format msgid "Database system identifier: %llu\n" msgstr "Идентификатор системы баз данных: %llu\n" -#: pg_controldata.c:234 +#: pg_controldata.c:245 #, c-format msgid "Database cluster state: %s\n" msgstr "Состояние кластера БД: %s\n" -#: pg_controldata.c:236 +#: pg_controldata.c:247 #, c-format msgid "pg_control last modified: %s\n" msgstr "Последнее обновление pg_control: %s\n" # skip-rule: capital-letter-first -#: pg_controldata.c:238 +#: pg_controldata.c:249 #, c-format msgid "Latest checkpoint location: %X/%X\n" msgstr "Положение последней конт. точки: %X/%X\n" # skip-rule: capital-letter-first -#: pg_controldata.c:240 +#: pg_controldata.c:251 #, c-format msgid "Latest checkpoint's REDO location: %X/%X\n" msgstr "Положение REDO последней конт. точки: %X/%X\n" # skip-rule: capital-letter-first -#: pg_controldata.c:242 +#: pg_controldata.c:253 #, 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:244 +#: pg_controldata.c:255 #, c-format msgid "Latest checkpoint's TimeLineID: %u\n" msgstr "Линия времени последней конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:246 +#: pg_controldata.c:257 #, c-format msgid "Latest checkpoint's PrevTimeLineID: %u\n" msgstr "Пред. линия времени последней к. т.: %u\n" # skip-rule: no-space-after-period -#: pg_controldata.c:248 +#: pg_controldata.c:259 #, 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 +#: pg_controldata.c:260 pg_controldata.c:301 pg_controldata.c:313 msgid "off" msgstr "выкл." -#: pg_controldata.c:249 pg_controldata.c:290 pg_controldata.c:302 +#: pg_controldata.c:260 pg_controldata.c:301 pg_controldata.c:313 msgid "on" msgstr "вкл." # skip-rule: capital-letter-first -#: pg_controldata.c:250 +#: pg_controldata.c:261 #, c-format msgid "Latest checkpoint's NextXID: %u:%u\n" msgstr "NextXID последней конт. точки: %u:%u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:253 +#: pg_controldata.c:264 #, c-format msgid "Latest checkpoint's NextOID: %u\n" msgstr "NextOID последней конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:255 +#: pg_controldata.c:266 #, c-format msgid "Latest checkpoint's NextMultiXactId: %u\n" msgstr "NextMultiXactId послед. конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:257 +#: pg_controldata.c:268 #, c-format msgid "Latest checkpoint's NextMultiOffset: %u\n" msgstr "NextMultiOffset послед. конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:259 +#: pg_controldata.c:270 #, c-format msgid "Latest checkpoint's oldestXID: %u\n" msgstr "oldestXID последней конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:261 +#: pg_controldata.c:272 #, c-format msgid "Latest checkpoint's oldestXID's DB: %u\n" msgstr "БД с oldestXID последней конт. точки: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:263 +#: pg_controldata.c:274 #, c-format msgid "Latest checkpoint's oldestActiveXID: %u\n" msgstr "oldestActiveXID последней к. т.: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:265 +#: pg_controldata.c:276 #, c-format msgid "Latest checkpoint's oldestMultiXid: %u\n" msgstr "oldestMultiXid последней конт. точки: %u\n" # skip-rule: double-space, capital-letter-first -#: pg_controldata.c:267 +#: pg_controldata.c:278 #, 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:269 +#: pg_controldata.c:280 #, c-format msgid "Latest checkpoint's oldestCommitTsXid:%u\n" msgstr "oldestCommitTsXid последней к. т.: %u\n" # skip-rule: capital-letter-first, double-space -#: pg_controldata.c:271 +#: pg_controldata.c:282 #, c-format msgid "Latest checkpoint's newestCommitTsXid:%u\n" msgstr "newestCommitTsXid последней к. т.: %u\n" -#: pg_controldata.c:273 +#: pg_controldata.c:284 #, c-format msgid "Time of latest checkpoint: %s\n" msgstr "Время последней контрольной точки: %s\n" # skip-rule: capital-letter-first # well-spelled: нежурналир -#: pg_controldata.c:275 +#: pg_controldata.c:286 #, c-format msgid "Fake LSN counter for unlogged rels: %X/%X\n" msgstr "Фиктивный LSN для нежурналир. таблиц: %X/%X\n" -#: pg_controldata.c:277 +#: pg_controldata.c:288 #, c-format msgid "Minimum recovery ending location: %X/%X\n" msgstr "Мин. положение конца восстановления: %X/%X\n" # skip-rule: capital-letter-first -#: pg_controldata.c:279 +#: pg_controldata.c:290 #, c-format msgid "Min recovery ending loc's timeline: %u\n" msgstr "Линия времени мин. положения к. в.: %u\n" -#: pg_controldata.c:281 +#: pg_controldata.c:292 #, c-format msgid "Backup start location: %X/%X\n" msgstr "Положение начала копии: %X/%X\n" -#: pg_controldata.c:283 +#: pg_controldata.c:294 #, c-format msgid "Backup end location: %X/%X\n" msgstr "Положение конца копии: %X/%X\n" -#: pg_controldata.c:285 +#: pg_controldata.c:296 #, c-format msgid "End-of-backup record required: %s\n" msgstr "Требуется запись конец-копии: %s\n" -#: pg_controldata.c:286 +#: pg_controldata.c:297 msgid "no" msgstr "нет" -#: pg_controldata.c:286 +#: pg_controldata.c:297 msgid "yes" msgstr "да" -#: pg_controldata.c:287 +#: pg_controldata.c:298 #, c-format msgid "wal_level setting: %s\n" msgstr "Значение wal_level: %s\n" -#: pg_controldata.c:289 +#: pg_controldata.c:300 #, c-format msgid "wal_log_hints setting: %s\n" msgstr "Значение wal_log_hints: %s\n" -#: pg_controldata.c:291 +#: pg_controldata.c:302 #, c-format msgid "max_connections setting: %d\n" msgstr "Значение max_connections: %d\n" -#: pg_controldata.c:293 +#: pg_controldata.c:304 #, c-format msgid "max_worker_processes setting: %d\n" msgstr "Значение max_worker_processes: %d\n" -#: pg_controldata.c:295 +#: pg_controldata.c:306 #, c-format msgid "max_wal_senders setting: %d\n" msgstr "Значение max_wal_senders: %d\n" -#: pg_controldata.c:297 +#: pg_controldata.c:308 #, c-format msgid "max_prepared_xacts setting: %d\n" msgstr "Значение max_prepared_xacts: %d\n" -#: pg_controldata.c:299 +#: pg_controldata.c:310 #, c-format msgid "max_locks_per_xact setting: %d\n" msgstr "Значение max_locks_per_xact: %d\n" -#: pg_controldata.c:301 +#: pg_controldata.c:312 #, c-format msgid "track_commit_timestamp setting: %s\n" msgstr "Значение track_commit_timestamp: %s\n" -#: pg_controldata.c:303 +#: pg_controldata.c:314 #, c-format msgid "Maximum data alignment: %u\n" msgstr "Макс. предел выравнивания данных: %u\n" -#: pg_controldata.c:306 +#: pg_controldata.c:317 #, c-format msgid "Database block size: %u\n" msgstr "Размер блока БД: %u\n" # skip-rule: double-space -#: pg_controldata.c:308 +#: pg_controldata.c:319 #, c-format msgid "Blocks per segment of large relation: %u\n" msgstr "Блоков в макс. сегменте отношений: %u\n" -#: pg_controldata.c:310 +#: pg_controldata.c:321 #, c-format msgid "WAL block size: %u\n" msgstr "Размер блока WAL: %u\n" -#: pg_controldata.c:312 +#: pg_controldata.c:323 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Байт в сегменте WAL: %u\n" -#: pg_controldata.c:314 +#: pg_controldata.c:325 #, c-format msgid "Maximum length of identifiers: %u\n" msgstr "Максимальная длина идентификаторов: %u\n" -#: pg_controldata.c:316 +#: pg_controldata.c:327 #, c-format msgid "Maximum columns in an index: %u\n" msgstr "Макс. число столбцов в индексе: %u\n" -#: pg_controldata.c:318 +#: pg_controldata.c:329 #, c-format msgid "Maximum size of a TOAST chunk: %u\n" msgstr "Максимальный размер порции TOAST: %u\n" -#: pg_controldata.c:320 +#: pg_controldata.c:331 #, c-format msgid "Size of a large-object chunk: %u\n" msgstr "Размер порции большого объекта: %u\n" -#: pg_controldata.c:323 +#: pg_controldata.c:334 #, c-format msgid "Date/time type storage: %s\n" msgstr "Формат хранения даты/времени: %s\n" -#: pg_controldata.c:324 +#: pg_controldata.c:335 msgid "64-bit integers" msgstr "64-битные целые" -#: pg_controldata.c:325 +#: pg_controldata.c:336 #, c-format msgid "Float8 argument passing: %s\n" msgstr "Передача аргумента float8: %s\n" -#: pg_controldata.c:326 +#: pg_controldata.c:337 msgid "by reference" msgstr "по ссылке" -#: pg_controldata.c:326 +#: pg_controldata.c:337 msgid "by value" msgstr "по значению" -#: pg_controldata.c:327 +#: pg_controldata.c:338 #, c-format msgid "Data page checksum version: %u\n" msgstr "Версия контрольных сумм страниц: %u\n" # skip-rule: capital-letter-first -#: pg_controldata.c:329 +#: pg_controldata.c:340 #, c-format msgid "Mock authentication nonce: %s\n" msgstr "Случ. число для псевдоаутентификации: %s\n" diff --git a/src/bin/pg_ctl/po/ru.po b/src/bin/pg_ctl/po/ru.po index b18c98247ea..0f86dad9039 100644 --- a/src/bin/pg_ctl/po/ru.po +++ b/src/bin/pg_ctl/po/ru.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_ctl (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-05-03 05:56+0300\n" +"POT-Creation-Date: 2025-02-08 07:45+0200\n" "PO-Revision-Date: 2024-09-07 06:47+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -63,7 +63,7 @@ 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 +#: ../../port/path.c:709 ../../port/path.c:747 ../../port/path.c:764 #, c-format msgid "out of memory\n" msgstr "нехватка памяти\n" @@ -103,7 +103,7 @@ msgstr "дочерний процесс завершён по сигналу %d: msgid "child process exited with unrecognized status %d" msgstr "дочерний процесс завершился с нераспознанным кодом состояния %d" -#: ../../port/path.c:654 +#: ../../port/path.c:731 #, c-format msgid "could not get current working directory: %s\n" msgstr "не удалось определить текущий рабочий каталог: %s\n" diff --git a/src/bin/pg_dump/po/ru.po b/src/bin/pg_dump/po/ru.po index 3b752245ba8..f51bdeb42fb 100644 --- a/src/bin/pg_dump/po/ru.po +++ b/src/bin/pg_dump/po/ru.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_dump (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-09-07 17:27+0300\n" +"POT-Creation-Date: 2025-02-08 07:45+0200\n" "PO-Revision-Date: 2024-09-07 07:35+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -2104,7 +2104,7 @@ msgstr "у функции \"%s\" по-видимому неправильный msgid "owner of table \"%s\" appears to be invalid" msgstr "у таблицы \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:7226 pg_dump.c:17775 +#: pg_dump.c:7226 pg_dump.c:17777 #, c-format msgid "" "failed sanity check, parent table with OID %u of sequence with OID %u not " @@ -2113,7 +2113,7 @@ msgstr "" "нарушение целостности: по OID %u не удалось найти родительскую таблицу " "последовательности с OID %u" -#: pg_dump.c:7369 +#: pg_dump.c:7371 #, c-format msgid "" "failed sanity check, table OID %u appearing in pg_partitioned_table not found" @@ -2121,17 +2121,17 @@ msgstr "" "нарушение целостности: таблица с OID %u, фигурирующим в " "pg_partitioned_table, не найдена" -#: pg_dump.c:7435 +#: pg_dump.c:7437 #, c-format msgid "reading indexes for table \"%s.%s\"" msgstr "чтение индексов таблицы \"%s.%s\"" -#: pg_dump.c:7853 +#: pg_dump.c:7855 #, c-format msgid "reading foreign key constraints for table \"%s.%s\"" msgstr "чтение ограничений внешних ключей таблицы \"%s.%s\"" -#: pg_dump.c:8132 +#: pg_dump.c:8134 #, c-format msgid "" "failed sanity check, parent table with OID %u of pg_rewrite entry with OID " @@ -2140,12 +2140,12 @@ msgstr "" "нарушение целостности: по OID %u не удалось найти родительскую таблицу для " "записи pg_rewrite с OID %u" -#: pg_dump.c:8216 +#: pg_dump.c:8218 #, c-format msgid "reading triggers for table \"%s.%s\"" msgstr "чтение триггеров таблицы \"%s.%s\"" -#: pg_dump.c:8398 +#: pg_dump.c:8400 #, c-format msgid "" "query produced null referenced table name for foreign key trigger \"%s\" on " @@ -2154,32 +2154,32 @@ msgstr "" "запрос выдал NULL вместо имени целевой таблицы для триггера внешнего ключа " "\"%s\" в таблице \"%s\" (OID целевой таблицы: %u)" -#: pg_dump.c:8948 +#: pg_dump.c:8950 #, c-format msgid "finding the columns and types of table \"%s.%s\"" msgstr "поиск столбцов и типов таблицы \"%s.%s\"" -#: pg_dump.c:9072 +#: pg_dump.c:9074 #, c-format msgid "invalid column numbering in table \"%s\"" msgstr "неверная нумерация столбцов в таблице \"%s\"" -#: pg_dump.c:9111 +#: pg_dump.c:9113 #, c-format msgid "finding default expressions of table \"%s.%s\"" msgstr "поиск выражений по умолчанию для таблицы \"%s.%s\"" -#: pg_dump.c:9133 +#: pg_dump.c:9135 #, c-format msgid "invalid adnum value %d for table \"%s\"" msgstr "неверное значение adnum (%d) в таблице \"%s\"" -#: pg_dump.c:9226 +#: pg_dump.c:9228 #, c-format msgid "finding check constraints for table \"%s.%s\"" msgstr "поиск ограничений-проверок для таблицы \"%s.%s\"" -#: pg_dump.c:9275 +#: pg_dump.c:9277 #, 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" @@ -2190,69 +2190,69 @@ msgstr[1] "" msgstr[2] "" "ожидалось %d ограничений-проверок для таблицы \"%s\", но найдено: %d" -#: pg_dump.c:9279 +#: pg_dump.c:9281 #, c-format msgid "(The system catalogs might be corrupted.)" msgstr "(Возможно, повреждены системные каталоги.)" -#: pg_dump.c:10881 +#: pg_dump.c:10883 #, c-format msgid "typtype of data type \"%s\" appears to be invalid" msgstr "у типа данных \"%s\" по-видимому неправильный тип типа" -#: pg_dump.c:12229 +#: pg_dump.c:12231 #, c-format msgid "bogus value in proargmodes array" msgstr "неприемлемое значение в массиве proargmodes" -#: pg_dump.c:12531 +#: pg_dump.c:12533 #, c-format msgid "could not parse proallargtypes array" msgstr "не удалось разобрать массив proallargtypes" -#: pg_dump.c:12547 +#: pg_dump.c:12549 #, c-format msgid "could not parse proargmodes array" msgstr "не удалось разобрать массив proargmodes" -#: pg_dump.c:12561 +#: pg_dump.c:12563 #, c-format msgid "could not parse proargnames array" msgstr "не удалось разобрать массив proargnames" -#: pg_dump.c:12571 +#: pg_dump.c:12573 #, c-format msgid "could not parse proconfig array" msgstr "не удалось разобрать массив proconfig" # TO REVEIW -#: pg_dump.c:12647 +#: pg_dump.c:12649 #, c-format msgid "unrecognized provolatile value for function \"%s\"" msgstr "недопустимое значение provolatile для функции \"%s\"" # TO REVEIW -#: pg_dump.c:12697 pg_dump.c:14639 +#: pg_dump.c:12699 pg_dump.c:14641 #, c-format msgid "unrecognized proparallel value for function \"%s\"" msgstr "недопустимое значение proparallel для функции \"%s\"" -#: pg_dump.c:12837 pg_dump.c:12943 pg_dump.c:12950 +#: pg_dump.c:12839 pg_dump.c:12945 pg_dump.c:12952 #, c-format msgid "could not find function definition for function with OID %u" msgstr "не удалось найти определение функции для функции с OID %u" -#: pg_dump.c:12876 +#: pg_dump.c:12878 #, c-format msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" msgstr "неприемлемое значение в поле pg_cast.castfunc или pg_cast.castmethod" -#: pg_dump.c:12879 +#: pg_dump.c:12881 #, c-format msgid "bogus value in pg_cast.castmethod field" msgstr "неприемлемое значение в поле pg_cast.castmethod" -#: pg_dump.c:12969 +#: pg_dump.c:12971 #, c-format msgid "" "bogus transform definition, at least one of trffromsql and trftosql should " @@ -2261,57 +2261,57 @@ msgstr "" "неприемлемое определение преобразования (trffromsql или trftosql должно быть " "ненулевым)" -#: pg_dump.c:12986 +#: pg_dump.c:12988 #, c-format msgid "bogus value in pg_transform.trffromsql field" msgstr "неприемлемое значение в поле pg_transform.trffromsql" -#: pg_dump.c:13007 +#: pg_dump.c:13009 #, c-format msgid "bogus value in pg_transform.trftosql field" msgstr "неприемлемое значение в поле pg_transform.trftosql" -#: pg_dump.c:13158 +#: pg_dump.c:13160 #, c-format msgid "postfix operators are not supported anymore (operator \"%s\")" msgstr "постфиксные операторы больше не поддерживаются (оператор \"%s\")" -#: pg_dump.c:13328 +#: pg_dump.c:13330 #, c-format msgid "could not find operator with OID %s" msgstr "оператор с OID %s не найден" -#: pg_dump.c:13396 +#: pg_dump.c:13398 #, c-format msgid "invalid type \"%c\" of access method \"%s\"" msgstr "неверный тип \"%c\" метода доступа \"%s\"" -#: pg_dump.c:14150 +#: pg_dump.c:14152 #, c-format msgid "unrecognized collation provider: %s" msgstr "нераспознанный провайдер правил сортировки: %s" -#: pg_dump.c:14558 +#: pg_dump.c:14560 #, c-format msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" msgstr "нераспознанное значение aggfinalmodify для агрегата \"%s\"" -#: pg_dump.c:14614 +#: pg_dump.c:14616 #, c-format msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" msgstr "нераспознанное значение aggmfinalmodify для агрегата \"%s\"" -#: pg_dump.c:15336 +#: pg_dump.c:15338 #, c-format msgid "unrecognized object type in default privileges: %d" msgstr "нераспознанный тип объекта в определении прав по умолчанию: %d" -#: pg_dump.c:15354 +#: pg_dump.c:15356 #, c-format msgid "could not parse default ACL list (%s)" msgstr "не удалось разобрать список прав по умолчанию (%s)" -#: pg_dump.c:15439 +#: pg_dump.c:15441 #, c-format msgid "" "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) " @@ -2320,7 +2320,7 @@ msgstr "" "не удалось разобрать изначальный список GRANT ACL (%s) или изначальный " "список REVOKE ACL (%s) для объекта \"%s\" (%s)" -#: pg_dump.c:15447 +#: pg_dump.c:15449 #, c-format msgid "" "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object " @@ -2329,13 +2329,13 @@ msgstr "" "не удалось разобрать список GRANT ACL (%s) или список REVOKE ACL (%s) для " "объекта \"%s\" (%s)" -#: pg_dump.c:15962 +#: pg_dump.c:15964 #, c-format msgid "query to obtain definition of view \"%s\" returned no data" msgstr "" "запрос на получение определения представления \"%s\" не возвратил данные" -#: pg_dump.c:15965 +#: pg_dump.c:15967 #, c-format msgid "" "query to obtain definition of view \"%s\" returned more than one definition" @@ -2343,49 +2343,49 @@ msgstr "" "запрос на получение определения представления \"%s\" возвратил несколько " "определений" -#: pg_dump.c:15972 +#: pg_dump.c:15974 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)" msgstr "определение представления \"%s\" пустое (длина равна нулю)" -#: pg_dump.c:16056 +#: pg_dump.c:16058 #, c-format msgid "WITH OIDS is not supported anymore (table \"%s\")" msgstr "свойство WITH OIDS больше не поддерживается (таблица \"%s\")" -#: pg_dump.c:16962 +#: pg_dump.c:16964 #, c-format msgid "invalid column number %d for table \"%s\"" msgstr "неверный номер столбца %d для таблицы \"%s\"" -#: pg_dump.c:17039 +#: pg_dump.c:17041 #, c-format msgid "could not parse index statistic columns" msgstr "не удалось разобрать столбцы статистики в индексе" -#: pg_dump.c:17041 +#: pg_dump.c:17043 #, c-format msgid "could not parse index statistic values" msgstr "не удалось разобрать значения статистики в индексе" -#: pg_dump.c:17043 +#: pg_dump.c:17045 #, c-format msgid "mismatched number of columns and values for index statistics" msgstr "" "столбцы, задающие статистику индекса, не соответствуют значениям по " "количеству" -#: pg_dump.c:17260 +#: pg_dump.c:17262 #, c-format msgid "missing index for constraint \"%s\"" msgstr "отсутствует индекс для ограничения \"%s\"" -#: pg_dump.c:17485 +#: pg_dump.c:17487 #, c-format msgid "unrecognized constraint type: %c" msgstr "нераспознанный тип ограничения: %c" -#: pg_dump.c:17617 pg_dump.c:17840 +#: pg_dump.c:17619 pg_dump.c:17842 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" msgid_plural "" @@ -2400,22 +2400,22 @@ msgstr[2] "" "запрос на получение данных последовательности \"%s\" вернул %d строк " "(ожидалась 1)" -#: pg_dump.c:17651 +#: pg_dump.c:17653 #, c-format msgid "unrecognized sequence type: %s" msgstr "нераспознанный тип последовательности: %s" -#: pg_dump.c:17938 +#: pg_dump.c:17940 #, c-format msgid "unexpected tgtype value: %d" msgstr "неожиданное значение tgtype: %d" -#: pg_dump.c:18012 +#: pg_dump.c:18014 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" msgstr "неверная строка аргументов (%s) для триггера \"%s\" таблицы \"%s\"" -#: pg_dump.c:18281 +#: pg_dump.c:18283 #, c-format msgid "" "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows " @@ -2424,42 +2424,42 @@ msgstr "" "запрос на получение правила \"%s\" для таблицы \"%s\" возвратил неверное " "число строк" -#: pg_dump.c:18443 +#: pg_dump.c:18445 #, c-format msgid "could not find referenced extension %u" msgstr "не удалось найти упомянутое расширение %u" -#: pg_dump.c:18534 +#: pg_dump.c:18536 #, c-format msgid "could not parse extension configuration array" msgstr "не удалось разобрать массив конфигураций расширения" -#: pg_dump.c:18536 +#: pg_dump.c:18538 #, c-format msgid "could not parse extension condition array" msgstr "не удалось разобрать массив условий расширения" -#: pg_dump.c:18538 +#: pg_dump.c:18540 #, c-format msgid "mismatched number of configurations and conditions for extension" msgstr "конфигурации расширения не соответствуют условиям по количеству" -#: pg_dump.c:18670 +#: pg_dump.c:18672 #, c-format msgid "reading dependency data" msgstr "чтение информации о зависимостях" -#: pg_dump.c:18763 +#: pg_dump.c:18765 #, c-format msgid "no referencing object %u %u" msgstr "нет подчинённого объекта %u %u" -#: pg_dump.c:18774 +#: pg_dump.c:18776 #, c-format msgid "no referenced object %u %u" msgstr "нет вышестоящего объекта %u %u" -#: pg_dump.c:19163 +#: pg_dump.c:19165 #, c-format msgid "could not parse reloptions array" msgstr "не удалось разобрать массив reloptions" diff --git a/src/bin/pg_rewind/po/ru.po b/src/bin/pg_rewind/po/ru.po index 2206ce2fa59..617aa68cd5a 100644 --- a/src/bin/pg_rewind/po/ru.po +++ b/src/bin/pg_rewind/po/ru.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_rewind (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-11-09 07:48+0300\n" +"POT-Creation-Date: 2025-02-08 07:45+0200\n" "PO-Revision-Date: 2024-09-07 13:07+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -116,12 +116,12 @@ 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:77 parsexlog.c:137 -#: parsexlog.c:197 +#: parsexlog.c:199 #, c-format msgid "out of memory" msgstr "нехватка памяти" -#: ../../fe_utils/recovery_gen.c:134 parsexlog.c:310 +#: ../../fe_utils/recovery_gen.c:134 parsexlog.c:331 #, c-format msgid "could not open file \"%s\": %m" msgstr "не удалось открыть файл \"%s\": %m" @@ -206,12 +206,12 @@ msgstr "ошибка при удалении символической ссыл msgid "could not open file \"%s\" for reading: %m" msgstr "не удалось открыть файл \"%s\" для чтения: %m" -#: file_ops.c:341 local_source.c:107 parsexlog.c:348 +#: file_ops.c:341 local_source.c:107 parsexlog.c:369 #, c-format msgid "could not read file \"%s\": %m" msgstr "не удалось прочитать файл \"%s\": %m" -#: file_ops.c:344 parsexlog.c:350 +#: file_ops.c:344 parsexlog.c:371 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %d из %zu)" @@ -250,32 +250,32 @@ msgstr "не удалось прочитать каталог \"%s\": %m" msgid "could not close directory \"%s\": %m" msgstr "не удалось закрыть каталог \"%s\": %m" -#: filemap.c:237 +#: filemap.c:299 #, c-format msgid "data file \"%s\" in source is not a regular file" msgstr "файл данных \"%s\" в источнике не является обычным файлом" -#: filemap.c:242 filemap.c:275 +#: filemap.c:304 filemap.c:337 #, c-format msgid "duplicate source file \"%s\"" msgstr "повторный исходный файл \"%s\"" -#: filemap.c:330 +#: filemap.c:392 #, c-format msgid "unexpected page modification for non-regular file \"%s\"" msgstr "неожиданная модификация страницы для файла особого вида \"%s\"" -#: filemap.c:680 filemap.c:774 +#: filemap.c:742 filemap.c:844 #, c-format msgid "unknown file type for \"%s\"" msgstr "неизвестный тип файла \"%s\"" -#: filemap.c:707 +#: filemap.c:777 #, c-format msgid "file \"%s\" is of different type in source and target" msgstr "файл \"%s\" имеет разный тип в исходном и целевом кластере" -#: filemap.c:779 +#: filemap.c:849 #, c-format msgid "could not decide what to do with file \"%s\"" msgstr "не удалось определить, что делать с файлом \"%s\"" @@ -443,22 +443,22 @@ msgid "end pointer %X/%X is not a valid end point; expected %X/%X" msgstr "" "конечный указатель %X/%X неверно задаёт конечную точку; ожидается %X/%X" -#: parsexlog.c:210 +#: parsexlog.c:212 #, c-format msgid "could not find previous WAL record at %X/%X: %s" msgstr "не удалось найти предыдущую запись WAL в позиции %X/%X: %s" -#: parsexlog.c:214 +#: parsexlog.c:216 #, c-format msgid "could not find previous WAL record at %X/%X" msgstr "не удалось найти предыдущую запись WAL в позиции %X/%X" -#: parsexlog.c:339 +#: parsexlog.c:360 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "не удалось переместиться в файле \"%s\": %m" -#: parsexlog.c:431 +#: parsexlog.c:452 #, c-format msgid "" "WAL record modifies a relation, but record type is not recognized: lsn: %X/" @@ -670,74 +670,74 @@ msgstr "серверы разошлись в позиции WAL %X/%X на ли msgid "no rewind required" msgstr "перемотка не требуется" -#: pg_rewind.c:403 +#: pg_rewind.c:406 #, c-format msgid "rewinding from last common checkpoint at %X/%X on timeline %u" msgstr "" "перемотка от последней общей контрольной точки в позиции %X/%X на линии " "времени %u" -#: pg_rewind.c:413 +#: pg_rewind.c:416 #, c-format msgid "reading source file list" msgstr "чтение списка исходных файлов" -#: pg_rewind.c:417 +#: pg_rewind.c:420 #, c-format msgid "reading target file list" msgstr "чтение списка целевых файлов" -#: pg_rewind.c:426 +#: pg_rewind.c:429 #, c-format msgid "reading WAL in target" msgstr "чтение WAL в целевом кластере" -#: pg_rewind.c:447 +#: pg_rewind.c:450 #, c-format msgid "need to copy %lu MB (total source directory size is %lu MB)" msgstr "требуется скопировать %lu МБ (общий размер исходного каталога: %lu МБ)" -#: pg_rewind.c:465 +#: pg_rewind.c:468 #, c-format msgid "syncing target data directory" msgstr "синхронизация целевого каталога данных" -#: pg_rewind.c:481 +#: pg_rewind.c:484 #, c-format msgid "Done!" msgstr "Готово!" -#: pg_rewind.c:564 +#: pg_rewind.c:567 #, c-format msgid "no action decided for file \"%s\"" msgstr "действие не определено для файла \"%s\"" -#: pg_rewind.c:596 +#: pg_rewind.c:599 #, c-format msgid "source system was modified while pg_rewind was running" msgstr "в исходной системе произошли изменения в процессе работы pg_rewind" -#: pg_rewind.c:600 +#: pg_rewind.c:603 #, c-format msgid "creating backup label and updating control file" msgstr "создание метки копии и модификация управляющего файла" -#: pg_rewind.c:650 +#: pg_rewind.c:653 #, c-format msgid "source system was in unexpected state at end of rewind" msgstr "исходная система оказалась в неожиданном состоянии после перемотки" -#: pg_rewind.c:681 +#: pg_rewind.c:684 #, c-format msgid "source and target clusters are from different systems" msgstr "исходный и целевой кластеры относятся к разным системам" -#: pg_rewind.c:689 +#: pg_rewind.c:692 #, c-format msgid "clusters are not compatible with this version of pg_rewind" msgstr "кластеры несовместимы с этой версией pg_rewind" -#: pg_rewind.c:699 +#: pg_rewind.c:702 #, c-format msgid "" "target server needs to use either data checksums or \"wal_log_hints = on\"" @@ -745,49 +745,49 @@ msgstr "" "на целевом сервере должны быть контрольные суммы данных или \"wal_log_hints " "= on\"" -#: pg_rewind.c:710 +#: pg_rewind.c:713 #, c-format msgid "target server must be shut down cleanly" msgstr "целевой сервер должен быть выключен штатно" -#: pg_rewind.c:720 +#: pg_rewind.c:723 #, c-format msgid "source data directory must be shut down cleanly" msgstr "работа с исходным каталогом данных должна быть завершена штатно" -#: pg_rewind.c:772 +#: pg_rewind.c:775 #, c-format msgid "%*s/%s kB (%d%%) copied" msgstr "%*s/%s КБ (%d%%) скопировано" -#: pg_rewind.c:835 +#: pg_rewind.c:838 #, c-format msgid "invalid control file" msgstr "неверный управляющий файл" -#: pg_rewind.c:917 +#: pg_rewind.c:920 #, c-format msgid "" "could not find common ancestor of the source and target cluster's timelines" msgstr "" "не удалось найти общего предка линий времени исходного и целевого кластеров" -#: pg_rewind.c:958 +#: pg_rewind.c:961 #, c-format msgid "backup label buffer too small" msgstr "буфер для метки копии слишком мал" -#: pg_rewind.c:981 +#: pg_rewind.c:984 #, c-format msgid "unexpected control file CRC" msgstr "неверная контрольная сумма управляющего файла" -#: pg_rewind.c:993 +#: pg_rewind.c:996 #, c-format msgid "unexpected control file size %d, expected %d" msgstr "неверный размер управляющего файла (%d), ожидалось: %d" -#: pg_rewind.c:1002 +#: pg_rewind.c:1005 #, c-format msgid "" "WAL segment size must be a power of two between 1 MB and 1 GB, but the " @@ -805,7 +805,7 @@ msgstr[2] "" "Размер сегмента WAL должен задаваться степенью 2 в интервале от 1 МБ до 1 " "ГБ, но в управляющем файле указано значение: %d" -#: pg_rewind.c:1041 pg_rewind.c:1099 +#: pg_rewind.c:1044 pg_rewind.c:1102 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -816,7 +816,7 @@ msgstr "" "в каталоге \"%s\".\n" "Проверьте правильность установки СУБД." -#: pg_rewind.c:1046 pg_rewind.c:1104 +#: pg_rewind.c:1049 pg_rewind.c:1107 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -827,25 +827,25 @@ msgstr "" "но её версия отличается от версии %s.\n" "Проверьте правильность установки СУБД." -#: pg_rewind.c:1067 +#: pg_rewind.c:1070 #, c-format msgid "restore_command is not set in the target cluster" msgstr "команда restore_command в целевом кластере не определена" -#: pg_rewind.c:1110 +#: pg_rewind.c:1113 #, c-format msgid "executing \"%s\" for target server to complete crash recovery" msgstr "" "выполнение \"%s\" для восстановления согласованности на целевом сервере" -#: pg_rewind.c:1130 +#: pg_rewind.c:1133 #, c-format msgid "postgres single-user mode in target cluster failed" msgstr "" "не удалось запустить postgres в целевом кластере в однопользовательском " "режиме" -#: pg_rewind.c:1131 +#: pg_rewind.c:1134 #, c-format msgid "Command was: %s" msgstr "Выполнялась команда: %s" diff --git a/src/bin/psql/po/ru.po b/src/bin/psql/po/ru.po index 15a99f3065f..9d70236a807 100644 --- a/src/bin/psql/po/ru.po +++ b/src/bin/psql/po/ru.po @@ -4,14 +4,14 @@ # Serguei A. Mokhov , 2001-2005. # Oleg Bartunov , 2004-2005. # Sergey Burladyan , 2012. -# Alexander Lakhin , 2012-2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024. +# Alexander Lakhin , 2012-2025. # Maxim Yablokov , 2021. msgid "" msgstr "" "Project-Id-Version: psql (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" "POT-Creation-Date: 2024-11-02 08:22+0300\n" -"PO-Revision-Date: 2024-09-07 06:49+0300\n" +"PO-Revision-Date: 2025-02-08 08:33+0200\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -3481,7 +3481,7 @@ msgstr "" #, c-format msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" msgstr "" -" \\x [on|off|auto] переключить режим расширенного вывода (сейчас: " +" \\x [on|off|auto] переключить режим развёрнутого вывода (сейчас: " "%s)\n" #: help.c:297 @@ -3997,7 +3997,7 @@ msgid "" " expanded output [on, off, auto]\n" msgstr "" " expanded (или x)\n" -" расширенный вывод [on (вкл.), off (выкл.), auto (авто)]\n" +" развёрнутый вывод [on (вкл.), off (выкл.), auto (авто)]\n" #: help.c:442 #, c-format diff --git a/src/bin/psql/po/tr.po b/src/bin/psql/po/tr.po index 0096ffb0ed7..172e8b9fa92 100644 --- a/src/bin/psql/po/tr.po +++ b/src/bin/psql/po/tr.po @@ -5608,7 +5608,7 @@ msgstr "sort_ifadesi" #: sql_help.c:4764 sql_help.c:5742 msgid "abort the current transaction" -msgstr "aktif transcation'ı iptal et" +msgstr "aktif transaction'ı iptal et" #: sql_help.c:4770 msgid "change the definition of an aggregate function" @@ -6272,7 +6272,7 @@ msgstr "ilk oturum ve geçerli oturum için kullanıcı tanımla" #: sql_help.c:5808 msgid "set the characteristics of the current transaction" -msgstr "geçerli transcation'ın karakteristiklerini ayarla" +msgstr "geçerli transaction'ın karakteristiklerini ayarla" #: sql_help.c:5814 msgid "show the value of a run-time parameter" diff --git a/src/bin/scripts/po/ru.po b/src/bin/scripts/po/ru.po index 7469277d8d0..b6ebaa0ab9a 100644 --- a/src/bin/scripts/po/ru.po +++ b/src/bin/scripts/po/ru.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: pgscripts (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-11-02 08:22+0300\n" +"POT-Creation-Date: 2025-02-08 07:45+0200\n" "PO-Revision-Date: 2024-09-05 08:25+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -185,18 +185,18 @@ msgstr "" "\n" #: clusterdb.c:270 createdb.c:267 createuser.c:351 dropdb.c:171 dropuser.c:169 -#: pg_isready.c:225 reindexdb.c:798 vacuumdb.c:1032 +#: pg_isready.c:225 reindexdb.c:798 vacuumdb.c:1035 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: clusterdb.c:271 reindexdb.c:799 vacuumdb.c:1033 +#: clusterdb.c:271 reindexdb.c:799 vacuumdb.c:1036 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [ПАРАМЕТР]... [ИМЯ_БД]\n" #: clusterdb.c:272 createdb.c:269 createuser.c:353 dropdb.c:173 dropuser.c:171 -#: pg_isready.c:228 reindexdb.c:800 vacuumdb.c:1034 +#: pg_isready.c:228 reindexdb.c:800 vacuumdb.c:1037 #, c-format msgid "" "\n" @@ -248,7 +248,7 @@ msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" #: clusterdb.c:281 createdb.c:280 createuser.c:375 dropdb.c:180 dropuser.c:178 -#: pg_isready.c:234 reindexdb.c:815 vacuumdb.c:1059 +#: pg_isready.c:234 reindexdb.c:815 vacuumdb.c:1062 #, c-format msgid "" "\n" @@ -257,35 +257,35 @@ msgstr "" "\n" "Параметры подключения:\n" -#: clusterdb.c:282 createuser.c:376 dropdb.c:181 dropuser.c:179 vacuumdb.c:1060 +#: clusterdb.c:282 createuser.c:376 dropdb.c:181 dropuser.c:179 vacuumdb.c:1063 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=ИМЯ компьютер с сервером баз данных или каталог " "сокетов\n" -#: clusterdb.c:283 createuser.c:377 dropdb.c:182 dropuser.c:180 vacuumdb.c:1061 +#: clusterdb.c:283 createuser.c:377 dropdb.c:182 dropuser.c:180 vacuumdb.c:1064 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=ПОРТ порт сервера баз данных\n" -#: clusterdb.c:284 dropdb.c:183 vacuumdb.c:1062 +#: clusterdb.c:284 dropdb.c:183 vacuumdb.c:1065 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr "" " -U, --username=ИМЯ имя пользователя для подключения к серверу\n" -#: clusterdb.c:285 createuser.c:379 dropdb.c:184 dropuser.c:182 vacuumdb.c:1063 +#: clusterdb.c:285 createuser.c:379 dropdb.c:184 dropuser.c:182 vacuumdb.c:1066 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password не запрашивать пароль\n" -#: clusterdb.c:286 createuser.c:380 dropdb.c:185 dropuser.c:183 vacuumdb.c:1064 +#: clusterdb.c:286 createuser.c:380 dropdb.c:185 dropuser.c:183 vacuumdb.c:1067 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password запросить пароль\n" -#: clusterdb.c:287 dropdb.c:186 vacuumdb.c:1065 +#: clusterdb.c:287 dropdb.c:186 vacuumdb.c:1068 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=ИМЯ_БД сменить опорную базу данных\n" @@ -300,7 +300,7 @@ msgstr "" "Подробнее о кластеризации вы можете узнать в описании SQL-команды CLUSTER.\n" #: clusterdb.c:289 createdb.c:288 createuser.c:381 dropdb.c:187 dropuser.c:184 -#: pg_isready.c:239 reindexdb.c:823 vacuumdb.c:1067 +#: pg_isready.c:239 reindexdb.c:823 vacuumdb.c:1070 #, c-format msgid "" "\n" @@ -310,7 +310,7 @@ msgstr "" "Об ошибках сообщайте по адресу <%s>.\n" #: clusterdb.c:290 createdb.c:289 createuser.c:382 dropdb.c:188 dropuser.c:185 -#: pg_isready.c:240 reindexdb.c:824 vacuumdb.c:1068 +#: pg_isready.c:240 reindexdb.c:824 vacuumdb.c:1071 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашняя страница %s: <%s>\n" @@ -910,8 +910,8 @@ msgid "cannot use multiple jobs to reindex indexes" msgstr "нельзя задействовать несколько заданий для перестроения индексов" #: reindexdb.c:353 reindexdb.c:361 vacuumdb.c:470 vacuumdb.c:478 vacuumdb.c:486 -#: vacuumdb.c:494 vacuumdb.c:502 vacuumdb.c:510 vacuumdb.c:517 vacuumdb.c:524 -#: vacuumdb.c:531 +#: vacuumdb.c:494 vacuumdb.c:502 vacuumdb.c:510 vacuumdb.c:518 vacuumdb.c:526 +#: vacuumdb.c:534 #, c-format msgid "" "cannot use the \"%s\" option on server versions older than PostgreSQL %s" @@ -1096,27 +1096,27 @@ msgstr "Вычисление средней статистики для опти msgid "Generating default (full) optimizer statistics" msgstr "Вычисление стандартной (полной) статистики для оптимизатора" -#: vacuumdb.c:539 +#: vacuumdb.c:542 #, c-format msgid "%s: processing database \"%s\": %s\n" msgstr "%s: обработка базы данных \"%s\": %s\n" -#: vacuumdb.c:542 +#: vacuumdb.c:545 #, c-format msgid "%s: vacuuming database \"%s\"\n" msgstr "%s: очистка базы данных \"%s\"\n" -#: vacuumdb.c:1020 +#: vacuumdb.c:1023 #, c-format msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s" msgstr "очистить таблицу \"%s\" в базе \"%s\" не удалось: %s" -#: vacuumdb.c:1023 +#: vacuumdb.c:1026 #, c-format msgid "vacuuming of database \"%s\" failed: %s" msgstr "очистить базу данных \"%s\" не удалось: %s" -#: vacuumdb.c:1031 +#: vacuumdb.c:1034 #, c-format msgid "" "%s cleans and analyzes a PostgreSQL database.\n" @@ -1125,23 +1125,23 @@ msgstr "" "%s очищает и анализирует базу данных PostgreSQL.\n" "\n" -#: vacuumdb.c:1035 +#: vacuumdb.c:1038 #, c-format msgid " -a, --all vacuum all databases\n" msgstr " -a, --all очистить все базы данных\n" -#: vacuumdb.c:1036 +#: vacuumdb.c:1039 #, c-format msgid " -d, --dbname=DBNAME database to vacuum\n" msgstr " -d, --dbname=ИМЯ_БД очистить указанную базу данных\n" -#: vacuumdb.c:1037 +#: vacuumdb.c:1040 #, c-format msgid " --disable-page-skipping disable all page-skipping behavior\n" msgstr "" " --disable-page-skipping исключить все варианты пропуска страниц\n" -#: vacuumdb.c:1038 +#: vacuumdb.c:1041 #, c-format msgid "" " -e, --echo show the commands being sent to the " @@ -1149,19 +1149,19 @@ msgid "" msgstr "" " -e, --echo отображать команды, отправляемые серверу\n" -#: vacuumdb.c:1039 +#: vacuumdb.c:1042 #, c-format msgid " -f, --full do full vacuuming\n" msgstr " -f, --full произвести полную очистку\n" -#: vacuumdb.c:1040 +#: vacuumdb.c:1043 #, c-format msgid " -F, --freeze freeze row transaction information\n" msgstr "" " -F, --freeze заморозить информацию о транзакциях в " "строках\n" -#: vacuumdb.c:1041 +#: vacuumdb.c:1044 #, c-format msgid "" " --force-index-cleanup always remove index entries that point to " @@ -1171,7 +1171,7 @@ msgstr "" "указывающие\n" " на мёртвые кортежи\n" -#: vacuumdb.c:1042 +#: vacuumdb.c:1045 #, c-format msgid "" " -j, --jobs=NUM use this many concurrent connections to " @@ -1180,7 +1180,7 @@ msgstr "" " -j, --jobs=ЧИСЛО запускать для очистки заданное число " "заданий\n" -#: vacuumdb.c:1043 +#: vacuumdb.c:1046 #, c-format msgid "" " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to " @@ -1189,7 +1189,7 @@ msgstr "" " --min-mxid-age=ВОЗРАСТ минимальный возраст мультитранзакций для\n" " таблиц, подлежащих очистке\n" -#: vacuumdb.c:1044 +#: vacuumdb.c:1047 #, c-format msgid "" " --min-xid-age=XID_AGE minimum transaction ID age of tables to " @@ -1199,7 +1199,7 @@ msgstr "" "таблиц,\n" " подлежащих очистке\n" -#: vacuumdb.c:1045 +#: vacuumdb.c:1048 #, c-format msgid "" " --no-index-cleanup don't remove index entries that point to " @@ -1208,7 +1208,7 @@ msgstr "" " --no-index-cleanup не удалять элементы индекса, указывающие\n" " на мёртвые кортежи\n" -#: vacuumdb.c:1046 +#: vacuumdb.c:1049 #, c-format msgid "" " --no-process-toast skip the TOAST table associated with the " @@ -1217,7 +1217,7 @@ msgstr "" " --no-process-toast пропускать TOAST-таблицу, связанную\n" " с очищаемой таблицей\n" -#: vacuumdb.c:1047 +#: vacuumdb.c:1050 #, c-format msgid "" " --no-truncate don't truncate empty pages at the end of " @@ -1226,7 +1226,7 @@ msgstr "" " --no-truncate не отсекать пустые страницы в конце " "таблицы\n" -#: vacuumdb.c:1048 +#: vacuumdb.c:1051 #, c-format msgid "" " -P, --parallel=PARALLEL_WORKERS use this many background workers for " @@ -1236,12 +1236,12 @@ msgstr "" " по возможности использовать для очистки\n" " заданное число фоновых процессов\n" -#: vacuumdb.c:1049 +#: vacuumdb.c:1052 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet не выводить сообщения\n" -#: vacuumdb.c:1050 +#: vacuumdb.c:1053 #, c-format msgid "" " --skip-locked skip relations that cannot be immediately " @@ -1250,29 +1250,29 @@ msgstr "" " --skip-locked пропускать отношения, которые не удаётся\n" " заблокировать немедленно\n" -#: vacuumdb.c:1051 +#: vacuumdb.c:1054 #, c-format msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n" msgstr "" " -t, --table='ТАБЛ[(СТОЛБЦЫ)]' очистить только указанную таблицу(ы)\n" -#: vacuumdb.c:1052 +#: vacuumdb.c:1055 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose выводить исчерпывающие сообщения\n" -#: vacuumdb.c:1053 +#: vacuumdb.c:1056 #, c-format msgid "" " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: vacuumdb.c:1054 +#: vacuumdb.c:1057 #, c-format msgid " -z, --analyze update optimizer statistics\n" msgstr " -z, --analyze обновить статистику оптимизатора\n" -#: vacuumdb.c:1055 +#: vacuumdb.c:1058 #, c-format msgid "" " -Z, --analyze-only only update optimizer statistics; no " @@ -1281,7 +1281,7 @@ msgstr "" " -Z, --analyze-only только обновить статистику оптимизатора,\n" " не очищать БД\n" -#: vacuumdb.c:1056 +#: vacuumdb.c:1059 #, c-format msgid "" " --analyze-in-stages only update optimizer statistics, in " @@ -1293,12 +1293,12 @@ msgstr "" " (в несколько проходов для большей " "скорости), без очистки\n" -#: vacuumdb.c:1058 +#: vacuumdb.c:1061 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: vacuumdb.c:1066 +#: vacuumdb.c:1069 #, c-format msgid "" "\n" diff --git a/src/interfaces/ecpg/preproc/po/ru.po b/src/interfaces/ecpg/preproc/po/ru.po index e2ee593a332..6bf72146288 100644 --- a/src/interfaces/ecpg/preproc/po/ru.po +++ b/src/interfaces/ecpg/preproc/po/ru.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: ecpg (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-05-04 10:37+0300\n" +"POT-Creation-Date: 2025-02-08 07:45+0200\n" "PO-Revision-Date: 2021-09-04 10:54+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -389,7 +389,7 @@ msgstr "имя типа \"string\" в режиме Informix зарезервир msgid "type \"%s\" is already defined" msgstr "тип \"%s\" уже определён" -#: preproc.y:577 preproc.y:18306 preproc.y:18631 variable.c:620 +#: preproc.y:577 preproc.y:18306 preproc.y:18631 variable.c:619 #, c-format msgid "multidimensional arrays for simple data types are not supported" msgstr "многомерные массивы с простыми типами данных не поддерживаются" @@ -679,22 +679,22 @@ msgstr "переменная \"%s\" - не массив" msgid "variable \"%s\" is not declared" msgstr "переменная \"%s\" не объявлена" -#: variable.c:493 +#: variable.c:492 #, c-format msgid "indicator variable must have an integer type" msgstr "переменная-индикатор должна быть целочисленной" -#: variable.c:505 +#: variable.c:504 #, c-format msgid "unrecognized data type name \"%s\"" msgstr "нераспознанное имя типа данных \"%s\"" -#: variable.c:516 variable.c:524 variable.c:541 variable.c:544 +#: variable.c:515 variable.c:523 variable.c:540 variable.c:543 #, c-format msgid "multidimensional arrays are not supported" msgstr "многомерные массивы не поддерживаются" -#: variable.c:533 +#: variable.c:532 #, c-format msgid "" "multilevel pointers (more than 2 levels) are not supported; found %d level" @@ -710,12 +710,12 @@ msgstr[2] "" "многоуровневые указатели (больше 2 уровней) не поддерживаются, обнаружено %d " "уровней" -#: variable.c:538 +#: variable.c:537 #, c-format msgid "pointer to pointer is not supported for this data type" msgstr "для этого типа данных указатели на указатели не поддерживаются" -#: variable.c:558 +#: variable.c:557 #, c-format msgid "multidimensional arrays for structures are not supported" msgstr "многомерные массивы структур не поддерживаются" diff --git a/src/interfaces/libpq/po/de.po b/src/interfaces/libpq/po/de.po index 154618094d2..7042387b55e 100644 --- a/src/interfaces/libpq/po/de.po +++ b/src/interfaces/libpq/po/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2022-07-19 08:55+0000\n" +"POT-Creation-Date: 2025-02-05 14:30+0000\n" "PO-Revision-Date: 2022-04-01 11:08+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" @@ -54,16 +54,16 @@ msgstr "konnte Nonce nicht erzeugen\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:911 fe-connect.c:1460 fe-connect.c:1629 fe-connect.c:2981 -#: fe-connect.c:4711 fe-connect.c:4972 fe-connect.c:5091 fe-connect.c:5343 -#: fe-connect.c:5424 fe-connect.c:5523 fe-connect.c:5779 fe-connect.c:5808 -#: fe-connect.c:5880 fe-connect.c:5904 fe-connect.c:5922 fe-connect.c:6023 -#: fe-connect.c:6032 fe-connect.c:6390 fe-connect.c:6540 fe-connect.c:6806 -#: fe-exec.c:686 fe-exec.c:876 fe-exec.c:1223 fe-exec.c:3125 fe-exec.c:3309 -#: fe-exec.c:4082 fe-exec.c:4247 fe-gssapi-common.c:111 fe-lobj.c:881 -#: fe-protocol3.c:979 fe-protocol3.c:994 fe-protocol3.c:1027 -#: fe-protocol3.c:1735 fe-secure-common.c:110 fe-secure-gssapi.c:504 -#: fe-secure-openssl.c:440 fe-secure-openssl.c:1133 +#: fe-connect.c:913 fe-connect.c:1462 fe-connect.c:1631 fe-connect.c:2982 +#: fe-connect.c:4714 fe-connect.c:4975 fe-connect.c:5094 fe-connect.c:5346 +#: fe-connect.c:5427 fe-connect.c:5526 fe-connect.c:5782 fe-connect.c:5811 +#: fe-connect.c:5883 fe-connect.c:5907 fe-connect.c:5925 fe-connect.c:6026 +#: fe-connect.c:6035 fe-connect.c:6393 fe-connect.c:6543 fe-connect.c:6809 +#: fe-exec.c:686 fe-exec.c:876 fe-exec.c:1223 fe-exec.c:3145 fe-exec.c:3337 +#: fe-exec.c:4114 fe-exec.c:4279 fe-gssapi-common.c:111 fe-lobj.c:881 +#: fe-protocol3.c:975 fe-protocol3.c:990 fe-protocol3.c:1023 +#: fe-protocol3.c:1731 fe-secure-common.c:110 fe-secure-gssapi.c:500 +#: fe-secure-openssl.c:446 fe-secure-openssl.c:1124 msgid "out of memory\n" msgstr "Speicher aufgebraucht\n" @@ -217,12 +217,12 @@ msgstr "Authentifizierungsmethode %u nicht unterstützt\n" msgid "user name lookup failure: error code %lu\n" msgstr "Fehler beim Nachschlagen des Benutzernamens: Fehlercode %lu\n" -#: fe-auth.c:1117 fe-connect.c:2856 +#: fe-auth.c:1117 fe-connect.c:2857 #, 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:1122 fe-connect.c:2861 +#: fe-auth.c:1122 fe-connect.c:2862 #, c-format msgid "local user with ID %d does not exist\n" msgstr "lokaler Benutzer mit ID %d existiert nicht\n" @@ -240,402 +240,402 @@ msgstr "Wert von password_encryption ist zu lang\n" msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "unbekannter Passwortverschlüsselungsalgorithmus »%s«\n" -#: fe-connect.c:1094 +#: fe-connect.c:1096 #, 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:1180 +#: fe-connect.c:1182 #, 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:1273 fe-connect.c:1299 fe-connect.c:1341 fe-connect.c:1350 -#: fe-connect.c:1383 fe-connect.c:1427 +#: fe-connect.c:1275 fe-connect.c:1301 fe-connect.c:1343 fe-connect.c:1352 +#: fe-connect.c:1385 fe-connect.c:1429 #, c-format msgid "invalid %s value: \"%s\"\n" msgstr "ungültiger %s-Wert: »%s«\n" -#: fe-connect.c:1320 +#: fe-connect.c:1322 #, 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:1368 +#: fe-connect.c:1370 msgid "invalid SSL protocol version range\n" msgstr "ungültiges SSL-Protokollsintervall\n" -#: fe-connect.c:1393 +#: fe-connect.c:1395 #, 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:1653 +#: fe-connect.c:1655 #, 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:1715 +#: fe-connect.c:1717 #, c-format msgid "connection to server on socket \"%s\" failed: " msgstr "Verbindung zum Server auf Socket »%s« fehlgeschlagen: " -#: fe-connect.c:1742 +#: fe-connect.c:1744 #, c-format msgid "connection to server at \"%s\" (%s), port %s failed: " msgstr "Verbindung zum Server auf »%s« (%s), Port %s fehlgeschlagen: " -#: fe-connect.c:1747 +#: fe-connect.c:1749 #, c-format msgid "connection to server at \"%s\", port %s failed: " msgstr "Verbindung zum Server auf »%s«, Port %s fehlgeschlagen: " -#: fe-connect.c:1772 +#: fe-connect.c:1774 msgid "\tIs the server running locally and accepting connections on that socket?\n" msgstr "\tLäuft der Server lokal und akzeptiert er Verbindungen auf diesem Socket?\n" -#: fe-connect.c:1776 +#: fe-connect.c:1778 msgid "\tIs the server running on that host and accepting TCP/IP connections?\n" msgstr "\tLäuft der Server auf diesem Host und akzeptiert er TCP/IP-Verbindungen?\n" -#: fe-connect.c:1840 +#: fe-connect.c:1842 #, 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:1870 fe-connect.c:1905 fe-connect.c:1941 fe-connect.c:2030 -#: fe-connect.c:2644 +#: fe-connect.c:1872 fe-connect.c:1907 fe-connect.c:1943 fe-connect.c:2032 +#: fe-connect.c:2645 #, c-format msgid "%s(%s) failed: %s\n" msgstr "%s(%s) fehlgeschlagen: %s\n" -#: fe-connect.c:1995 +#: fe-connect.c:1997 #, c-format msgid "%s(%s) failed: error code %d\n" msgstr "%s(%s) fehlgeschlagen: Fehlercode %d\n" -#: fe-connect.c:2310 +#: fe-connect.c:2312 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "ungültiger Verbindungszustand, möglicherweise ein Speicherproblem\n" -#: fe-connect.c:2389 +#: fe-connect.c:2391 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "ungültige Portnummer: »%s«\n" -#: fe-connect.c:2405 +#: fe-connect.c:2407 #, 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:2418 +#: fe-connect.c:2420 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "konnte Netzwerkadresse »%s« nicht interpretieren: %s\n" -#: fe-connect.c:2431 +#: fe-connect.c:2433 #, 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:2446 +#: fe-connect.c:2448 #, 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:2572 +#: fe-connect.c:2574 #, c-format msgid "could not create socket: %s\n" msgstr "konnte Socket nicht erzeugen: %s\n" -#: fe-connect.c:2603 +#: fe-connect.c:2605 #, 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:2613 +#: fe-connect.c:2615 #, 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:2631 -msgid "keepalives parameter must be an integer\n" -msgstr "Parameter »keepalives« muss eine ganze Zahl sein\n" - -#: fe-connect.c:2772 +#: fe-connect.c:2773 #, c-format msgid "could not get socket error status: %s\n" msgstr "konnte Socket-Fehlerstatus nicht ermitteln: %s\n" -#: fe-connect.c:2800 +#: fe-connect.c:2801 #, 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:2842 +#: fe-connect.c:2843 msgid "requirepeer parameter is not supported on this platform\n" msgstr "Parameter »requirepeer« wird auf dieser Plattform nicht unterstützt\n" -#: fe-connect.c:2845 +#: fe-connect.c:2846 #, c-format msgid "could not get peer credentials: %s\n" msgstr "konnte Credentials von Gegenstelle nicht ermitteln: %s\n" -#: fe-connect.c:2869 +#: fe-connect.c:2870 #, 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:2909 +#: fe-connect.c:2910 #, c-format msgid "could not send GSSAPI negotiation packet: %s\n" msgstr "konnte Paket zur GSSAPI-Verhandlung nicht senden: %s\n" -#: fe-connect.c:2921 +#: fe-connect.c:2922 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:2963 +#: fe-connect.c:2964 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "konnte Paket zur SSL-Verhandlung nicht senden: %s\n" -#: fe-connect.c:2994 +#: fe-connect.c:2995 #, c-format msgid "could not send startup packet: %s\n" msgstr "konnte Startpaket nicht senden: %s\n" -#: fe-connect.c:3070 +#: fe-connect.c:3071 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:3097 +#: fe-connect.c:3089 +msgid "server sent an error response during SSL exchange\n" +msgstr "Server hat während des SSL-Austauschs eine Fehlermeldung gesendet\n" + +#: fe-connect.c:3095 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "ungültige Antwort auf SSL-Verhandlungspaket empfangen: %c\n" -#: fe-connect.c:3118 +#: fe-connect.c:3116 msgid "received unencrypted data after SSL response\n" msgstr "unverschlüsselte Daten nach SSL-Antwort empfangen\n" -#: fe-connect.c:3199 +#: fe-connect.c:3197 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:3211 +#: fe-connect.c:3209 #, c-format msgid "received invalid response to GSSAPI negotiation: %c\n" msgstr "ungültige Antwort auf GSSAPI-Verhandlungspaket empfangen: %c\n" -#: fe-connect.c:3230 +#: fe-connect.c:3228 msgid "received unencrypted data after GSSAPI encryption response\n" msgstr "unverschlüsselte Daten nach GSSAPI-Verschlüsselungsantwort empfangen\n" -#: fe-connect.c:3290 fe-connect.c:3315 +#: fe-connect.c:3293 fe-connect.c:3318 #, 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:3522 +#: fe-connect.c:3525 msgid "unexpected message from server during startup\n" msgstr "unerwartete Nachricht vom Server beim Start\n" -#: fe-connect.c:3614 +#: fe-connect.c:3617 msgid "session is read-only\n" msgstr "Sitzung ist read-only\n" -#: fe-connect.c:3617 +#: fe-connect.c:3620 msgid "session is not read-only\n" msgstr "Sitzung ist nicht read-only\n" -#: fe-connect.c:3671 +#: fe-connect.c:3674 msgid "server is in hot standby mode\n" msgstr "Server ist im Hot-Standby-Modus\n" -#: fe-connect.c:3674 +#: fe-connect.c:3677 msgid "server is not in hot standby mode\n" msgstr "Server ist nicht im Hot-Standby-Modus\n" -#: fe-connect.c:3792 fe-connect.c:3844 +#: fe-connect.c:3795 fe-connect.c:3847 #, c-format msgid "\"%s\" failed\n" msgstr "»%s« fehlgeschlagen\n" -#: fe-connect.c:3858 +#: fe-connect.c:3861 #, 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:4304 fe-connect.c:4364 +#: fe-connect.c:4307 fe-connect.c:4367 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "PGEventProc »%s« während PGEVT_CONNRESET-Ereignis fehlgeschlagen\n" -#: fe-connect.c:4724 +#: fe-connect.c:4727 #, 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:4739 +#: fe-connect.c:4742 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "ungültige LDAP-URL »%s«: Distinguished Name fehlt\n" -#: fe-connect.c:4751 fe-connect.c:4809 +#: fe-connect.c:4754 fe-connect.c:4812 #, 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:4763 fe-connect.c:4825 +#: fe-connect.c:4766 fe-connect.c:4828 #, 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:4775 +#: fe-connect.c:4778 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "ungültige LDAP-URL »%s«: kein Filter\n" -#: fe-connect.c:4797 +#: fe-connect.c:4800 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "ungültige LDAP-URL »%s«: ungültige Portnummer\n" -#: fe-connect.c:4835 +#: fe-connect.c:4838 msgid "could not create LDAP structure\n" msgstr "konnte LDAP-Struktur nicht erzeugen\n" -#: fe-connect.c:4911 +#: fe-connect.c:4914 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "Suche auf LDAP-Server fehlgeschlagen: %s\n" -#: fe-connect.c:4922 +#: fe-connect.c:4925 msgid "more than one entry found on LDAP lookup\n" msgstr "LDAP-Suche ergab mehr als einen Eintrag\n" -#: fe-connect.c:4923 fe-connect.c:4935 +#: fe-connect.c:4926 fe-connect.c:4938 msgid "no entry found on LDAP lookup\n" msgstr "kein Eintrag gefunden bei LDAP-Suche\n" -#: fe-connect.c:4946 fe-connect.c:4959 +#: fe-connect.c:4949 fe-connect.c:4962 msgid "attribute has no values on LDAP lookup\n" msgstr "Attribut hat keine Werte bei LDAP-Suche\n" -#: fe-connect.c:5011 fe-connect.c:5030 fe-connect.c:5562 +#: fe-connect.c:5014 fe-connect.c:5033 fe-connect.c:5565 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "fehlendes »=« nach »%s« in der Zeichenkette der Verbindungsdaten\n" -#: fe-connect.c:5103 fe-connect.c:5747 fe-connect.c:6523 +#: fe-connect.c:5106 fe-connect.c:5750 fe-connect.c:6526 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "ungültige Verbindungsoption »%s«\n" -#: fe-connect.c:5119 fe-connect.c:5611 +#: fe-connect.c:5122 fe-connect.c:5614 msgid "unterminated quoted string in connection info string\n" msgstr "fehlendes schließendes Anführungszeichen (\") in der Zeichenkette der Verbindungsdaten\n" -#: fe-connect.c:5200 +#: fe-connect.c:5203 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "Definition von Service »%s« nicht gefunden\n" -#: fe-connect.c:5226 +#: fe-connect.c:5229 #, c-format msgid "service file \"%s\" not found\n" msgstr "Servicedatei »%s« nicht gefunden\n" -#: fe-connect.c:5240 +#: fe-connect.c:5243 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "Zeile %d zu lang in Servicedatei »%s«\n" -#: fe-connect.c:5311 fe-connect.c:5355 +#: fe-connect.c:5314 fe-connect.c:5358 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "Syntaxfehler in Servicedatei »%s«, Zeile %d\n" -#: fe-connect.c:5322 +#: fe-connect.c:5325 #, 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:6043 +#: fe-connect.c:6046 #, 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:6120 +#: fe-connect.c:6123 #, 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:6127 +#: fe-connect.c:6130 #, 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:6142 +#: fe-connect.c:6145 #, 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:6272 +#: fe-connect.c:6275 #, 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:6292 +#: fe-connect.c:6295 #, 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:6344 +#: fe-connect.c:6347 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "ungültiger URI-Query-Parameter: »%s«\n" -#: fe-connect.c:6418 +#: fe-connect.c:6421 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "ungültiges Prozent-kodiertes Token: »%s«\n" -#: fe-connect.c:6428 +#: fe-connect.c:6431 #, 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:6798 +#: fe-connect.c:6801 msgid "connection pointer is NULL\n" msgstr "Verbindung ist ein NULL-Zeiger\n" -#: fe-connect.c:7086 +#: fe-connect.c:7089 #, 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:7095 +#: fe-connect.c:7098 #, 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:7203 +#: fe-connect.c:7206 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "Passwort wurde aus Datei »%s« gelesen\n" -#: fe-exec.c:449 fe-exec.c:3383 +#: fe-exec.c:449 fe-exec.c:3411 #, 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:510 fe-protocol3.c:207 fe-protocol3.c:232 fe-protocol3.c:261 -#: fe-protocol3.c:279 fe-protocol3.c:375 fe-protocol3.c:747 +#: fe-exec.c:510 fe-protocol3.c:207 fe-protocol3.c:232 fe-protocol3.c:256 +#: fe-protocol3.c:274 fe-protocol3.c:371 fe-protocol3.c:743 msgid "out of memory" msgstr "Speicher aufgebraucht" -#: fe-exec.c:511 fe-protocol3.c:1943 +#: fe-exec.c:511 fe-protocol3.c:1939 #, c-format msgid "%s" msgstr "%s" @@ -669,11 +669,11 @@ msgstr "Anzahl der Parameter muss zwischen 0 und %d sein\n" msgid "statement name is a null pointer\n" msgstr "Anweisungsname ist ein NULL-Zeiger\n" -#: fe-exec.c:1664 fe-exec.c:3236 +#: fe-exec.c:1664 fe-exec.c:3256 msgid "no connection to the server\n" msgstr "keine Verbindung mit dem Server\n" -#: fe-exec.c:1673 fe-exec.c:3245 +#: fe-exec.c:1673 fe-exec.c:3265 msgid "another command is already in progress\n" msgstr "ein anderer Befehl ist bereits in Ausführung\n" @@ -685,84 +685,84 @@ msgstr "während COPY können keine Befehle aufgereiht werden\n" 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:2149 +#: fe-exec.c:2142 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "unerwarteter asyncStatus: %d\n" -#: fe-exec.c:2185 +#: fe-exec.c:2178 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "PGEventProc »%s« während PGEVT_RESULTCREATE-Ereignis fehlgeschlagen\n" -#: fe-exec.c:2333 +#: fe-exec.c:2326 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:2355 +#: fe-exec.c:2348 msgid "COPY terminated by new PQexec" msgstr "COPY von neuem PQexec beendet" -#: fe-exec.c:2372 +#: fe-exec.c:2365 msgid "PQexec not allowed during COPY BOTH\n" msgstr "PQexec ist während COPY BOTH nicht erlaubt\n" -#: fe-exec.c:2600 fe-exec.c:2656 fe-exec.c:2725 fe-protocol3.c:1874 +#: fe-exec.c:2593 fe-exec.c:2649 fe-exec.c:2718 fe-protocol3.c:1870 msgid "no COPY in progress\n" msgstr "keine COPY in Ausführung\n" -#: fe-exec.c:2902 +#: fe-exec.c:2895 msgid "PQfn not allowed in pipeline mode\n" msgstr "PQfn im Pipeline-Modus nicht erlaubt\n" -#: fe-exec.c:2910 +#: fe-exec.c:2903 msgid "connection in wrong state\n" msgstr "Verbindung im falschen Zustand\n" -#: fe-exec.c:2954 +#: fe-exec.c:2947 msgid "cannot enter pipeline mode, connection not idle\n" msgstr "kann Pipeline-Modus nicht einschalten, Verbindung ist nicht inaktiv\n" -#: fe-exec.c:2991 fe-exec.c:3015 +#: fe-exec.c:2984 fe-exec.c:3008 msgid "cannot exit pipeline mode with uncollected results\n" msgstr "kann Pipeline-Modus nicht beenden, wegen nicht eingesammelter Ergebnisse\n" -#: fe-exec.c:2996 +#: fe-exec.c:2989 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:3008 +#: fe-exec.c:3001 msgid "cannot exit pipeline mode while in COPY\n" msgstr "kann Pipeline-Modus nicht beenden während COPY aktiv ist\n" -#: fe-exec.c:3169 +#: fe-exec.c:3189 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:3272 +#: fe-exec.c:3300 msgid "invalid ExecStatusType code" msgstr "ungültiger ExecStatusType-Kode" -#: fe-exec.c:3299 +#: fe-exec.c:3327 msgid "PGresult is not an error result\n" msgstr "PGresult ist kein Fehlerresultat\n" -#: fe-exec.c:3367 fe-exec.c:3390 +#: fe-exec.c:3395 fe-exec.c:3418 #, 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:3405 +#: fe-exec.c:3433 #, 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:3715 +#: fe-exec.c:3743 #, c-format msgid "could not interpret result from server: %s" msgstr "konnte Ergebnis vom Server nicht interpretieren: %s" -#: fe-exec.c:3975 fe-exec.c:4064 +#: fe-exec.c:4007 fe-exec.c:4096 msgid "incomplete multibyte character\n" msgstr "unvollständiges Mehrbyte-Zeichen\n" @@ -822,8 +822,8 @@ msgstr "Integer der Größe %lu wird von pqPutInt nicht unterstützt" msgid "connection not open\n" msgstr "Verbindung nicht offen\n" -#: fe-misc.c:755 fe-secure-openssl.c:209 fe-secure-openssl.c:316 -#: fe-secure.c:260 fe-secure.c:373 +#: fe-misc.c:755 fe-secure-openssl.c:204 fe-secure-openssl.c:317 +#: fe-secure.c:262 fe-secure.c:380 msgid "" "server closed the connection unexpectedly\n" "\tThis probably means the server terminated abnormally\n" @@ -851,124 +851,124 @@ msgstr "%s() fehlgeschlagen: %s\n" msgid "message type 0x%02x arrived from server while idle" msgstr "Nachricht vom Typ 0x%02x kam vom Server im Ruhezustand" -#: fe-protocol3.c:407 +#: 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-protocol3.c:450 +#: 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-protocol3.c:475 +#: 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:495 +#: 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:547 fe-protocol3.c:587 +#: fe-protocol3.c:543 fe-protocol3.c:583 msgid "insufficient data in \"T\" message" msgstr "nicht genug Daten in »T«-Nachricht" -#: fe-protocol3.c:658 fe-protocol3.c:864 +#: fe-protocol3.c:654 fe-protocol3.c:860 msgid "out of memory for query result" msgstr "Speicher für Anfrageergebnis aufgebraucht" -#: fe-protocol3.c:727 +#: fe-protocol3.c:723 msgid "insufficient data in \"t\" message" msgstr "nicht genug Daten in »t«-Nachricht" -#: fe-protocol3.c:786 fe-protocol3.c:818 fe-protocol3.c:836 +#: 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:792 +#: fe-protocol3.c:788 msgid "unexpected field count in \"D\" message" msgstr "unerwartete Feldzahl in »D«-Nachricht" -#: fe-protocol3.c:1040 +#: fe-protocol3.c:1036 msgid "no error message available\n" msgstr "keine Fehlermeldung verfügbar\n" #. translator: %s represents a digit string -#: fe-protocol3.c:1088 fe-protocol3.c:1107 +#: fe-protocol3.c:1084 fe-protocol3.c:1103 #, c-format msgid " at character %s" msgstr " bei Zeichen %s" -#: fe-protocol3.c:1120 +#: fe-protocol3.c:1116 #, c-format msgid "DETAIL: %s\n" msgstr "DETAIL: %s\n" -#: fe-protocol3.c:1123 +#: fe-protocol3.c:1119 #, c-format msgid "HINT: %s\n" msgstr "TIP: %s\n" -#: fe-protocol3.c:1126 +#: fe-protocol3.c:1122 #, c-format msgid "QUERY: %s\n" msgstr "ANFRAGE: %s\n" -#: fe-protocol3.c:1133 +#: fe-protocol3.c:1129 #, c-format msgid "CONTEXT: %s\n" msgstr "KONTEXT: %s\n" -#: fe-protocol3.c:1142 +#: fe-protocol3.c:1138 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "SCHEMANAME: %s\n" -#: fe-protocol3.c:1146 +#: fe-protocol3.c:1142 #, c-format msgid "TABLE NAME: %s\n" msgstr "TABELLENNAME: %s\n" -#: fe-protocol3.c:1150 +#: fe-protocol3.c:1146 #, c-format msgid "COLUMN NAME: %s\n" msgstr "SPALTENNAME: %s\n" -#: fe-protocol3.c:1154 +#: fe-protocol3.c:1150 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "DATENTYPNAME: %s\n" -#: fe-protocol3.c:1158 +#: fe-protocol3.c:1154 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "CONSTRAINT-NAME: %s\n" -#: fe-protocol3.c:1170 +#: fe-protocol3.c:1166 msgid "LOCATION: " msgstr "ORT: " -#: fe-protocol3.c:1172 +#: fe-protocol3.c:1168 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:1174 +#: fe-protocol3.c:1170 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1369 +#: fe-protocol3.c:1365 #, c-format msgid "LINE %d: " msgstr "ZEILE %d: " -#: fe-protocol3.c:1768 +#: fe-protocol3.c:1764 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline: Text COPY OUT nicht ausgeführt\n" -#: fe-protocol3.c:2134 +#: fe-protocol3.c:2130 #, c-format msgid "protocol error: id=0x%x\n" msgstr "Protokollfehler: id=0x%x\n" @@ -990,115 +990,115 @@ msgstr "Server-Zertifikat für »%s« stimmt nicht mit dem Hostnamen »%s« übe msgid "could not get server's host name from server certificate\n" msgstr "konnte Hostnamen des Servers nicht aus dem Serverzertifikat ermitteln\n" -#: fe-secure-gssapi.c:201 +#: fe-secure-gssapi.c:194 msgid "GSSAPI wrap error" msgstr "GSSAPI-Wrap-Fehler" -#: fe-secure-gssapi.c:209 +#: fe-secure-gssapi.c:202 msgid "outgoing GSSAPI message would not use confidentiality\n" msgstr "ausgehende GSSAPI-Nachricht würde keine Vertraulichkeit verwenden\n" -#: fe-secure-gssapi.c:217 +#: fe-secure-gssapi.c:210 #, c-format msgid "client tried to send oversize GSSAPI packet (%zu > %zu)\n" msgstr "Client versuchte übergroßes GSSAPI-Paket zu senden (%zu > %zu)\n" -#: fe-secure-gssapi.c:354 fe-secure-gssapi.c:596 +#: fe-secure-gssapi.c:350 fe-secure-gssapi.c:594 #, c-format msgid "oversize GSSAPI packet sent by the server (%zu > %zu)\n" msgstr "übergroßes GSSAPI-Paket vom Server gesendet (%zu > %zu)\n" -#: fe-secure-gssapi.c:393 +#: fe-secure-gssapi.c:389 msgid "GSSAPI unwrap error" msgstr "GSSAPI-Unwrap-Fehler" -#: fe-secure-gssapi.c:403 +#: fe-secure-gssapi.c:399 msgid "incoming GSSAPI message did not use confidentiality\n" msgstr "eingehende GSSAPI-Nachricht verwendete keine Vertraulichkeit\n" -#: fe-secure-gssapi.c:642 +#: fe-secure-gssapi.c:640 msgid "could not initiate GSSAPI security context" msgstr "konnte GSSAPI-Sicherheitskontext nicht initiieren" -#: fe-secure-gssapi.c:670 +#: fe-secure-gssapi.c:668 msgid "GSSAPI size check error" msgstr "GSSAPI-Fehler bei der Größenprüfung" -#: fe-secure-gssapi.c:681 +#: fe-secure-gssapi.c:679 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:1367 +#: fe-secure-openssl.c:209 fe-secure-openssl.c:322 fe-secure-openssl.c:1360 #, 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:1371 +#: fe-secure-openssl.c:216 fe-secure-openssl.c:329 fe-secure-openssl.c:1364 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:1380 +#: fe-secure-openssl.c:227 fe-secure-openssl.c:340 fe-secure-openssl.c:1373 #, c-format msgid "SSL error: %s\n" msgstr "SSL-Fehler: %s\n" -#: fe-secure-openssl.c:247 fe-secure-openssl.c:354 +#: fe-secure-openssl.c:242 fe-secure-openssl.c:355 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:1430 +#: fe-secure-openssl.c:248 fe-secure-openssl.c:361 fe-secure-openssl.c:1423 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "unbekannter SSL-Fehlercode: %d\n" -#: fe-secure-openssl.c:400 +#: fe-secure-openssl.c:406 msgid "could not determine server certificate signature algorithm\n" msgstr "konnte Signaturalgorithmus des Serverzertifikats nicht ermitteln\n" -#: fe-secure-openssl.c:421 +#: fe-secure-openssl.c:427 #, c-format msgid "could not find digest for NID %s\n" msgstr "konnte Digest für NID %s nicht finden\n" -#: fe-secure-openssl.c:431 +#: fe-secure-openssl.c:437 msgid "could not generate peer certificate hash\n" msgstr "konnte Hash des Zertifikats der Gegenstelle nicht erzeugen\n" -#: fe-secure-openssl.c:488 +#: fe-secure-openssl.c:494 msgid "SSL certificate's name entry is missing\n" msgstr "Namenseintrag fehlt im SSL-Zertifikat\n" -#: fe-secure-openssl.c:822 +#: fe-secure-openssl.c:812 #, c-format msgid "could not create SSL context: %s\n" msgstr "konnte SSL-Kontext nicht erzeugen: %s\n" -#: fe-secure-openssl.c:861 +#: fe-secure-openssl.c:851 #, c-format 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:872 +#: fe-secure-openssl.c:862 #, c-format msgid "could not set minimum SSL protocol version: %s\n" msgstr "konnte minimale SSL-Protokollversion nicht setzen: %s\n" -#: fe-secure-openssl.c:890 +#: fe-secure-openssl.c:880 #, c-format 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:901 +#: fe-secure-openssl.c:891 #, c-format msgid "could not set maximum SSL protocol version: %s\n" msgstr "konnte maximale SSL-Protokollversion nicht setzen: %s\n" -#: fe-secure-openssl.c:937 +#: fe-secure-openssl.c:927 #, 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:990 +#: fe-secure-openssl.c:980 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" @@ -1106,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:994 +#: fe-secure-openssl.c:984 #, c-format msgid "" "root certificate file \"%s\" does not exist\n" @@ -1115,102 +1115,102 @@ 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:1025 +#: fe-secure-openssl.c:1015 #, c-format msgid "could not open certificate file \"%s\": %s\n" msgstr "konnte Zertifikatdatei »%s« nicht öffnen: %s\n" -#: fe-secure-openssl.c:1044 +#: fe-secure-openssl.c:1034 #, c-format msgid "could not read certificate file \"%s\": %s\n" msgstr "konnte Zertifikatdatei »%s« nicht lesen: %s\n" -#: fe-secure-openssl.c:1069 +#: fe-secure-openssl.c:1059 #, c-format msgid "could not establish SSL connection: %s\n" msgstr "konnte SSL-Verbindung nicht aufbauen: %s\n" -#: fe-secure-openssl.c:1103 +#: fe-secure-openssl.c:1093 #, 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:1149 +#: fe-secure-openssl.c:1140 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "konnte SSL-Engine »%s« nicht laden: %s\n" -#: fe-secure-openssl.c:1161 +#: fe-secure-openssl.c:1152 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "konnte SSL-Engine »%s« nicht initialisieren: %s\n" -#: fe-secure-openssl.c:1177 +#: fe-secure-openssl.c:1168 #, 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:1191 +#: fe-secure-openssl.c:1182 #, 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:1228 +#: fe-secure-openssl.c:1219 #, 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:1237 +#: fe-secure-openssl.c:1228 #, c-format msgid "private key file \"%s\" is not a regular file\n" msgstr "private Schlüsseldatei »%s« ist keine normale Datei\n" -#: fe-secure-openssl.c:1270 +#: fe-secure-openssl.c:1261 #, c-format msgid "private key file \"%s\" has group or world access; file must have permissions u=rw (0600) or less if owned by the current user, or permissions u=rw,g=r (0640) or less if owned by root\n" msgstr "private Schlüsseldatei »%s« erlaubt Lesezugriff für Gruppe oder Andere; Dateirechte müssen u=rw (0600) oder weniger sein, wenn der Eigentümer der aktuelle Benutzer ist, oder u=rw,g=r (0640) oder weniger, wenn der Eigentümer »root« ist\n" -#: fe-secure-openssl.c:1295 +#: fe-secure-openssl.c:1286 #, 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:1313 +#: fe-secure-openssl.c:1304 #, 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:1413 +#: fe-secure-openssl.c:1406 #, 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:1449 +#: fe-secure-openssl.c:1442 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "Zertifikat konnte nicht ermittelt werden: %s\n" -#: fe-secure-openssl.c:1555 +#: fe-secure-openssl.c:1549 #, c-format msgid "no SSL error reported" msgstr "kein SSL-Fehler berichtet" -#: fe-secure-openssl.c:1564 +#: fe-secure-openssl.c:1575 #, c-format msgid "SSL error code %lu" msgstr "SSL-Fehlercode %lu" -#: fe-secure-openssl.c:1812 +#: fe-secure-openssl.c:1847 #, c-format msgid "WARNING: sslpassword truncated\n" msgstr "WARNUNG: sslpassword abgeschnitten\n" -#: fe-secure.c:267 +#: fe-secure.c:274 #, c-format msgid "could not receive data from server: %s\n" msgstr "konnte keine Daten vom Server empfangen: %s\n" -#: fe-secure.c:380 +#: fe-secure.c:387 #, c-format msgid "could not send data to server: %s\n" msgstr "konnte keine Daten an den Server senden: %s\n" diff --git a/src/interfaces/libpq/po/es.po b/src/interfaces/libpq/po/es.po index 5ce1cf78ff1..827485fb03c 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) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-11-09 06:30+0000\n" +"POT-Creation-Date: 2024-12-05 18:26+0000\n" "PO-Revision-Date: 2022-08-08 00:59+0200\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -61,10 +61,10 @@ msgstr "no se pude generar nonce\n" #: 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:913 fe-connect.c:1462 fe-connect.c:1631 fe-connect.c:2982 -#: fe-connect.c:4717 fe-connect.c:4978 fe-connect.c:5097 fe-connect.c:5349 -#: fe-connect.c:5430 fe-connect.c:5529 fe-connect.c:5785 fe-connect.c:5814 -#: fe-connect.c:5886 fe-connect.c:5910 fe-connect.c:5928 fe-connect.c:6029 -#: fe-connect.c:6038 fe-connect.c:6396 fe-connect.c:6546 fe-connect.c:6812 +#: fe-connect.c:4714 fe-connect.c:4975 fe-connect.c:5094 fe-connect.c:5346 +#: fe-connect.c:5427 fe-connect.c:5526 fe-connect.c:5782 fe-connect.c:5811 +#: fe-connect.c:5883 fe-connect.c:5907 fe-connect.c:5925 fe-connect.c:6026 +#: fe-connect.c:6035 fe-connect.c:6393 fe-connect.c:6543 fe-connect.c:6809 #: fe-exec.c:686 fe-exec.c:876 fe-exec.c:1223 fe-exec.c:3145 fe-exec.c:3337 #: fe-exec.c:4114 fe-exec.c:4279 fe-gssapi-common.c:111 fe-lobj.c:881 #: fe-protocol3.c:975 fe-protocol3.c:990 fe-protocol3.c:1023 @@ -411,218 +411,222 @@ msgstr "no se pudo enviar el paquete de inicio: %s\n" 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:3098 +#: fe-connect.c:3089 +msgid "server sent an error response during SSL exchange\n" +msgstr "el servidor envió una respuesta de error durante un intercambio SSL\n" + +#: fe-connect.c:3095 #, 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:3119 +#: fe-connect.c:3116 msgid "received unencrypted data after SSL response\n" msgstr "se recibieron datos no cifrados después de la respuesta SSL\n" -#: fe-connect.c:3200 +#: fe-connect.c:3197 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:3212 +#: fe-connect.c:3209 #, 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:3231 +#: fe-connect.c:3228 msgid "received unencrypted data after GSSAPI encryption response\n" msgstr "se recibieron datos no cifrados después de la respuesta de cifrado GSSAPI\n" -#: fe-connect.c:3296 fe-connect.c:3321 +#: fe-connect.c:3293 fe-connect.c:3318 #, 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:3528 +#: fe-connect.c:3525 msgid "unexpected message from server during startup\n" msgstr "se ha recibido un mensaje inesperado del servidor durante el inicio\n" -#: fe-connect.c:3620 +#: fe-connect.c:3617 msgid "session is read-only\n" msgstr "la sesión es de solo lectura\n" -#: fe-connect.c:3623 +#: fe-connect.c:3620 msgid "session is not read-only\n" msgstr "la sesión no es de solo lectura\n" -#: fe-connect.c:3677 +#: fe-connect.c:3674 msgid "server is in hot standby mode\n" msgstr "el servidor está en modo hot standby\n" -#: fe-connect.c:3680 +#: fe-connect.c:3677 msgid "server is not in hot standby mode\n" msgstr "el servidor no está en modo hot standby\n" -#: fe-connect.c:3798 fe-connect.c:3850 +#: fe-connect.c:3795 fe-connect.c:3847 #, c-format msgid "\"%s\" failed\n" msgstr "«%s» falló\n" -#: fe-connect.c:3864 +#: fe-connect.c:3861 #, 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:4310 fe-connect.c:4370 +#: fe-connect.c:4307 fe-connect.c:4367 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "PGEventProc «%s» falló durante el evento PGEVT_CONNRESET\n" -#: fe-connect.c:4730 +#: fe-connect.c:4727 #, 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:4745 +#: fe-connect.c:4742 #, 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:4757 fe-connect.c:4815 +#: fe-connect.c:4754 fe-connect.c:4812 #, 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:4769 fe-connect.c:4831 +#: fe-connect.c:4766 fe-connect.c:4828 #, 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:4781 +#: fe-connect.c:4778 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "URL LDAP no válida «%s»: no tiene filtro\n" -#: fe-connect.c:4803 +#: fe-connect.c:4800 #, 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:4841 +#: fe-connect.c:4838 msgid "could not create LDAP structure\n" msgstr "no se pudo crear estructura LDAP\n" -#: fe-connect.c:4917 +#: fe-connect.c:4914 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "búsqueda en servidor LDAP falló: %s\n" -#: fe-connect.c:4928 +#: fe-connect.c:4925 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:4929 fe-connect.c:4941 +#: fe-connect.c:4926 fe-connect.c:4938 msgid "no entry found on LDAP lookup\n" msgstr "no se encontró ninguna entrada en búsqueda LDAP\n" -#: fe-connect.c:4952 fe-connect.c:4965 +#: fe-connect.c:4949 fe-connect.c:4962 msgid "attribute has no values on LDAP lookup\n" msgstr "la búsqueda LDAP entregó atributo sin valores\n" -#: fe-connect.c:5017 fe-connect.c:5036 fe-connect.c:5568 +#: fe-connect.c:5014 fe-connect.c:5033 fe-connect.c:5565 #, 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:5109 fe-connect.c:5753 fe-connect.c:6529 +#: fe-connect.c:5106 fe-connect.c:5750 fe-connect.c:6526 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "opción de conexión no válida «%s»\n" -#: fe-connect.c:5125 fe-connect.c:5617 +#: fe-connect.c:5122 fe-connect.c:5614 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:5206 +#: fe-connect.c:5203 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "la definición de servicio «%s» no fue encontrada\n" -#: fe-connect.c:5232 +#: fe-connect.c:5229 #, c-format msgid "service file \"%s\" not found\n" msgstr "el archivo de servicio «%s» no fue encontrado\n" -#: fe-connect.c:5246 +#: fe-connect.c:5243 #, 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:5317 fe-connect.c:5361 +#: fe-connect.c:5314 fe-connect.c:5358 #, 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:5328 +#: fe-connect.c:5325 #, 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:6049 +#: fe-connect.c:6046 #, 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:6126 +#: fe-connect.c:6123 #, 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:6133 +#: fe-connect.c:6130 #, 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:6148 +#: fe-connect.c:6145 #, 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:6278 +#: fe-connect.c:6275 #, 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:6298 +#: fe-connect.c:6295 #, 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:6350 +#: fe-connect.c:6347 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "parámetro de URI no válido: «%s»\n" -#: fe-connect.c:6424 +#: fe-connect.c:6421 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "elemento escapado con %% no válido: «%s»\n" -#: fe-connect.c:6434 +#: fe-connect.c:6431 #, 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:6804 +#: fe-connect.c:6801 msgid "connection pointer is NULL\n" msgstr "el puntero de conexión es NULL\n" -#: fe-connect.c:7092 +#: fe-connect.c:7089 #, 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:7101 +#: fe-connect.c:7098 #, 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:7209 +#: fe-connect.c:7206 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "contraseña obtenida desde el archivo «%s»\n" diff --git a/src/interfaces/libpq/po/ru.po b/src/interfaces/libpq/po/ru.po index c75e8f7f28e..a3534511b7b 100644 --- a/src/interfaces/libpq/po/ru.po +++ b/src/interfaces/libpq/po/ru.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: libpq (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-11-02 08:22+0300\n" -"PO-Revision-Date: 2023-08-30 15:09+0300\n" +"POT-Creation-Date: 2024-11-14 04:46+0300\n" +"PO-Revision-Date: 2024-11-14 05:02+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -62,10 +62,10 @@ msgstr "не удалось сгенерировать разовый код\n" #: 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:913 fe-connect.c:1462 fe-connect.c:1631 fe-connect.c:2982 -#: fe-connect.c:4717 fe-connect.c:4978 fe-connect.c:5097 fe-connect.c:5349 -#: fe-connect.c:5430 fe-connect.c:5529 fe-connect.c:5785 fe-connect.c:5814 -#: fe-connect.c:5886 fe-connect.c:5910 fe-connect.c:5928 fe-connect.c:6029 -#: fe-connect.c:6038 fe-connect.c:6396 fe-connect.c:6546 fe-connect.c:6812 +#: fe-connect.c:4714 fe-connect.c:4975 fe-connect.c:5094 fe-connect.c:5346 +#: fe-connect.c:5427 fe-connect.c:5526 fe-connect.c:5782 fe-connect.c:5811 +#: fe-connect.c:5883 fe-connect.c:5907 fe-connect.c:5925 fe-connect.c:6026 +#: fe-connect.c:6035 fe-connect.c:6393 fe-connect.c:6543 fe-connect.c:6809 #: fe-exec.c:686 fe-exec.c:876 fe-exec.c:1223 fe-exec.c:3145 fe-exec.c:3337 #: fe-exec.c:4114 fe-exec.c:4279 fe-gssapi-common.c:111 fe-lobj.c:881 #: fe-protocol3.c:975 fe-protocol3.c:990 fe-protocol3.c:1023 @@ -451,156 +451,160 @@ msgstr "не удалось отправить стартовый пакет: %s msgid "server does not support SSL, but SSL was required\n" msgstr "затребовано подключение через SSL, но сервер не поддерживает SSL\n" -#: fe-connect.c:3098 +#: fe-connect.c:3089 +msgid "server sent an error response during SSL exchange\n" +msgstr "сервер передал ошибочный ответ во время обмена сообщениями SSL\n" + +#: fe-connect.c:3095 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "получен неверный ответ при согласовании SSL: %c\n" -#: fe-connect.c:3119 +#: fe-connect.c:3116 msgid "received unencrypted data after SSL response\n" msgstr "после ответа SSL получены незашифрованные данные\n" -#: fe-connect.c:3200 +#: fe-connect.c:3197 msgid "server doesn't support GSSAPI encryption, but it was required\n" msgstr "затребовано шифрование GSSAPI, но сервер его не поддерживает\n" -#: fe-connect.c:3212 +#: fe-connect.c:3209 #, c-format msgid "received invalid response to GSSAPI negotiation: %c\n" msgstr "получен неверный ответ при согласовании GSSAPI: %c\n" -#: fe-connect.c:3231 +#: fe-connect.c:3228 msgid "received unencrypted data after GSSAPI encryption response\n" msgstr "" "после ответа на запрос шифрования GSSAPI получены незашифрованные данные\n" -#: fe-connect.c:3296 fe-connect.c:3321 +#: fe-connect.c:3293 fe-connect.c:3318 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "ожидался запрос аутентификации от сервера, но получено: %c\n" -#: fe-connect.c:3528 +#: fe-connect.c:3525 msgid "unexpected message from server during startup\n" msgstr "неожиданное сообщение от сервера в начале работы\n" -#: fe-connect.c:3620 +#: fe-connect.c:3617 msgid "session is read-only\n" msgstr "сеанс не допускает запись\n" -#: fe-connect.c:3623 +#: fe-connect.c:3620 msgid "session is not read-only\n" msgstr "сеанс допускает запись\n" -#: fe-connect.c:3677 +#: fe-connect.c:3674 msgid "server is in hot standby mode\n" msgstr "сервер работает в режиме горячего резерва\n" -#: fe-connect.c:3680 +#: fe-connect.c:3677 msgid "server is not in hot standby mode\n" msgstr "сервер работает не в режиме горячего резерва\n" -#: fe-connect.c:3798 fe-connect.c:3850 +#: fe-connect.c:3795 fe-connect.c:3847 #, c-format msgid "\"%s\" failed\n" msgstr "выполнить \"%s\" не удалось\n" -#: fe-connect.c:3864 +#: fe-connect.c:3861 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "неверное состояние соединения %d - возможно разрушение памяти\n" -#: fe-connect.c:4310 fe-connect.c:4370 +#: fe-connect.c:4307 fe-connect.c:4367 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "ошибка в PGEventProc \"%s\" при обработке события PGEVT_CONNRESET\n" -#: fe-connect.c:4730 +#: fe-connect.c:4727 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "некорректный адрес LDAP \"%s\": схема должна быть ldap://\n" -#: fe-connect.c:4745 +#: fe-connect.c:4742 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "некорректный адрес LDAP \"%s\": отсутствует уникальное имя\n" -#: fe-connect.c:4757 fe-connect.c:4815 +#: fe-connect.c:4754 fe-connect.c:4812 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "некорректный адрес LDAP \"%s\": должен быть только один атрибут\n" -#: fe-connect.c:4769 fe-connect.c:4831 +#: fe-connect.c:4766 fe-connect.c:4828 #, 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:4781 +#: fe-connect.c:4778 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "некорректный адрес LDAP \"%s\": нет фильтра\n" -#: fe-connect.c:4803 +#: fe-connect.c:4800 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "некорректный адрес LDAP \"%s\": неверный номер порта\n" -#: fe-connect.c:4841 +#: fe-connect.c:4838 msgid "could not create LDAP structure\n" msgstr "не удалось создать структуру LDAP\n" -#: fe-connect.c:4917 +#: fe-connect.c:4914 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "ошибка поиска на сервере LDAP: %s\n" -#: fe-connect.c:4928 +#: fe-connect.c:4925 msgid "more than one entry found on LDAP lookup\n" msgstr "при поиске LDAP найдено более одного вхождения\n" -#: fe-connect.c:4929 fe-connect.c:4941 +#: fe-connect.c:4926 fe-connect.c:4938 msgid "no entry found on LDAP lookup\n" msgstr "при поиске LDAP ничего не найдено\n" -#: fe-connect.c:4952 fe-connect.c:4965 +#: fe-connect.c:4949 fe-connect.c:4962 msgid "attribute has no values on LDAP lookup\n" msgstr "атрибут не содержит значений при поиске LDAP\n" -#: fe-connect.c:5017 fe-connect.c:5036 fe-connect.c:5568 +#: fe-connect.c:5014 fe-connect.c:5033 fe-connect.c:5565 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "в строке соединения нет \"=\" после \"%s\"\n" -#: fe-connect.c:5109 fe-connect.c:5753 fe-connect.c:6529 +#: fe-connect.c:5106 fe-connect.c:5750 fe-connect.c:6526 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "неверный параметр соединения \"%s\"\n" -#: fe-connect.c:5125 fe-connect.c:5617 +#: fe-connect.c:5122 fe-connect.c:5614 msgid "unterminated quoted string in connection info string\n" msgstr "в строке соединения не хватает закрывающей кавычки\n" -#: fe-connect.c:5206 +#: fe-connect.c:5203 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "определение службы \"%s\" не найдено\n" -#: fe-connect.c:5232 +#: fe-connect.c:5229 #, c-format msgid "service file \"%s\" not found\n" msgstr "файл определений служб \"%s\" не найден\n" -#: fe-connect.c:5246 +#: fe-connect.c:5243 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "слишком длинная строка (%d) в файле определений служб \"%s\"\n" -#: fe-connect.c:5317 fe-connect.c:5361 +#: fe-connect.c:5314 fe-connect.c:5358 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "синтаксическая ошибка в файле определения служб \"%s\" (строка %d)\n" -#: fe-connect.c:5328 +#: fe-connect.c:5325 #, c-format msgid "" "nested service specifications not supported in service file \"%s\", line %d\n" @@ -608,24 +612,24 @@ msgstr "" "рекурсивные определения служб не поддерживаются (файл определения служб " "\"%s\", строка %d)\n" -#: fe-connect.c:6049 +#: fe-connect.c:6046 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "во внутреннюю процедуру разбора строки передан ошибочный URI: \"%s\"\n" -#: fe-connect.c:6126 +#: fe-connect.c:6123 #, 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:6133 +#: fe-connect.c:6130 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "IPv6, содержащийся в URI, не может быть пустым: \"%s\"\n" -#: fe-connect.c:6148 +#: fe-connect.c:6145 #, c-format msgid "" "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): " @@ -634,41 +638,41 @@ msgstr "" "неожиданный символ \"%c\" в позиции %d в URI (ожидалось \":\" или \"/\"): " "\"%s\"\n" -#: fe-connect.c:6278 +#: fe-connect.c:6275 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "лишний разделитель ключа/значения \"=\" в параметрах URI: \"%s\"\n" -#: fe-connect.c:6298 +#: fe-connect.c:6295 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "в параметрах URI не хватает разделителя ключа/значения \"=\": \"%s\"\n" -#: fe-connect.c:6350 +#: fe-connect.c:6347 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "неверный параметр в URI: \"%s\"\n" -#: fe-connect.c:6424 +#: fe-connect.c:6421 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "неверный символ, закодированный с %%: \"%s\"\n" -#: fe-connect.c:6434 +#: fe-connect.c:6431 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "недопустимое значение %%00 для символа, закодированного с %%: \"%s\"\n" -#: fe-connect.c:6804 +#: fe-connect.c:6801 msgid "connection pointer is NULL\n" msgstr "нулевой указатель соединения\n" -#: fe-connect.c:7092 +#: fe-connect.c:7089 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "ПРЕДУПРЕЖДЕНИЕ: файл паролей \"%s\" - не обычный файл\n" -#: fe-connect.c:7101 +#: fe-connect.c:7098 #, c-format msgid "" "WARNING: password file \"%s\" has group or world access; permissions should " @@ -677,7 +681,7 @@ msgstr "" "ПРЕДУПРЕЖДЕНИЕ: к файлу паролей \"%s\" имеют доступ все или группа; права " "должны быть u=rw (0600) или более ограниченные\n" -#: fe-connect.c:7209 +#: fe-connect.c:7206 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "пароль получен из файла \"%s\"\n" diff --git a/src/pl/plpython/po/ru.po b/src/pl/plpython/po/ru.po index e5b040102a3..593db6c9fa4 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: 2024-08-01 12:51+0300\n" +"POT-Creation-Date: 2025-02-08 07:45+0200\n" "PO-Revision-Date: 2023-05-05 06:34+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -22,17 +22,17 @@ msgstr "" msgid "plpy.cursor expected a query or a plan" msgstr "plpy.cursor ожидает запрос или план" -#: plpy_cursorobject.c:155 +#: plpy_cursorobject.c:154 #, c-format msgid "plpy.cursor takes a sequence as its second argument" msgstr "plpy.cursor принимает в качестве второго аргумента последовательность" -#: plpy_cursorobject.c:171 plpy_spi.c:207 +#: plpy_cursorobject.c:170 plpy_spi.c:206 #, c-format msgid "could not execute plan" msgstr "нельзя выполнить план" -#: plpy_cursorobject.c:174 plpy_spi.c:210 +#: plpy_cursorobject.c:173 plpy_spi.c:209 #, c-format msgid "Expected sequence of %d argument, got %d: %s" msgid_plural "Expected sequence of %d arguments, got %d: %s" @@ -40,28 +40,28 @@ msgstr[0] "Ожидалась последовательность из %d ар msgstr[1] "Ожидалась последовательность из %d аргументов, получено %d: %s" msgstr[2] "Ожидалась последовательность из %d аргументов, получено %d: %s" -#: plpy_cursorobject.c:321 +#: plpy_cursorobject.c:317 #, c-format msgid "iterating a closed cursor" msgstr "перемещение закрытого курсора" -#: plpy_cursorobject.c:329 plpy_cursorobject.c:395 +#: plpy_cursorobject.c:325 plpy_cursorobject.c:391 #, c-format msgid "iterating a cursor in an aborted subtransaction" msgstr "перемещение курсора в прерванной подтранзакции" -#: plpy_cursorobject.c:387 +#: plpy_cursorobject.c:383 #, c-format msgid "fetch from a closed cursor" msgstr "выборка из закрытого курсора" -#: plpy_cursorobject.c:430 plpy_spi.c:403 +#: plpy_cursorobject.c:426 plpy_spi.c:395 #, c-format msgid "query result has too many rows to fit in a Python list" msgstr "" "результат запроса содержит слишком много строк для передачи в списке Python" -#: plpy_cursorobject.c:482 +#: plpy_cursorobject.c:478 #, c-format msgid "closing a cursor in an aborted subtransaction" msgstr "закрытие курсора в прерванной подтранзакции" @@ -329,17 +329,17 @@ msgstr "plpy.prepare: имя типа с порядковым номером %d msgid "plpy.execute expected a query or a plan" msgstr "plpy.execute ожидает запрос или план" -#: plpy_spi.c:191 +#: plpy_spi.c:190 #, c-format msgid "plpy.execute takes a sequence as its second argument" msgstr "plpy.execute принимает в качестве второго аргумента последовательность" -#: plpy_spi.c:299 +#: plpy_spi.c:291 #, c-format msgid "SPI_execute_plan failed: %s" msgstr "ошибка в SPI_execute_plan: %s" -#: plpy_spi.c:341 +#: plpy_spi.c:333 #, c-format msgid "SPI_execute failed: %s" msgstr "ошибка в SPI_execute: %s" diff --git a/src/pl/tcl/po/ru.po b/src/pl/tcl/po/ru.po index bb583b5c742..43279316ff9 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: 2024-08-01 12:51+0300\n" +"POT-Creation-Date: 2025-02-08 07:45+0200\n" "PO-Revision-Date: 2024-08-01 13:03+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -17,59 +17,59 @@ 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:463 +#: pltcl.c:467 msgid "PL/Tcl function to call once when pltcl is first used." msgstr "Функция на PL/Tcl, вызываемая при первом использовании pltcl." -#: pltcl.c:470 +#: pltcl.c:474 msgid "PL/TclU function to call once when pltclu is first used." msgstr "Функция на PL/TclU, вызываемая при первом использовании pltclu." -#: pltcl.c:634 +#: pltcl.c:638 #, c-format msgid "function \"%s\" is in the wrong language" msgstr "Функция \"%s\" объявлена на другом языке" -#: pltcl.c:645 +#: pltcl.c:649 #, 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 +#: pltcl.c:683 #, c-format msgid "processing %s parameter" msgstr "обработка параметра %s" -#: pltcl.c:833 +#: pltcl.c:837 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "" "функция, возвращающая множество, вызвана в контексте, где ему нет места" -#: pltcl.c:1006 +#: pltcl.c:1010 #, c-format msgid "" "function returning record called in context that cannot accept type record" msgstr "" "функция, возвращающая запись, вызвана в контексте, не допускающем этот тип" -#: pltcl.c:1025 +#: pltcl.c:1029 #, c-format msgid "could not parse function return value: %s" msgstr "разобрать возвращаемое функцией значение не удалось: %s" -#: pltcl.c:1293 +#: pltcl.c:1297 #, c-format msgid "could not parse trigger return value: %s" msgstr "разобрать возвращаемое триггером значение не удалось: %s" -#: pltcl.c:1378 pltcl.c:1808 +#: pltcl.c:1382 pltcl.c:1812 #, c-format msgid "%s" msgstr "%s" -#: pltcl.c:1379 +#: pltcl.c:1383 #, c-format msgid "" "%s\n" @@ -78,43 +78,43 @@ msgstr "" "%s\n" "в функции PL/Tcl \"%s\"" -#: pltcl.c:1543 +#: pltcl.c:1547 #, c-format msgid "trigger functions can only be called as triggers" msgstr "триггерные функции могут вызываться только в триггерах" -#: pltcl.c:1547 +#: pltcl.c:1551 #, c-format msgid "PL/Tcl functions cannot return type %s" msgstr "функции PL/Tcl не могут возвращать тип %s" -#: pltcl.c:1586 +#: pltcl.c:1590 #, c-format msgid "PL/Tcl functions cannot accept type %s" msgstr "функции PL/Tcl не могут принимать тип %s" -#: pltcl.c:1700 +#: pltcl.c:1704 #, c-format msgid "could not create internal procedure \"%s\": %s" msgstr "не удалось создать внутреннюю процедуру \"%s\": %s" -#: pltcl.c:3202 +#: pltcl.c:3206 #, c-format msgid "column name/value list must have even number of elements" msgstr "в списке имён/значений столбцов должно быть чётное число элементов" -#: pltcl.c:3220 +#: pltcl.c:3224 #, c-format msgid "column name/value list contains nonexistent column name \"%s\"" msgstr "" "список имён/значений столбцов содержит имя несуществующего столбца \"%s\"" -#: pltcl.c:3227 +#: pltcl.c:3231 #, c-format msgid "cannot set system attribute \"%s\"" msgstr "присвоить значение системному атрибуту \"%s\" нельзя" -#: pltcl.c:3233 +#: pltcl.c:3237 #, c-format msgid "cannot set generated column \"%s\"" msgstr "присвоить значение генерируемому столбцу \"%s\" нельзя" From 5bc33cbeae0e5cb8ecb410f8e47efb92811380fd Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Mon, 10 Feb 2025 10:03:40 -0500 Subject: [PATCH 82/90] Add pg_encoding_set_invalid() There are cases where we cannot / do not want to error out for invalidly encoded input. In such cases it can be useful to replace e.g. an incomplete multi-byte characters with bytes that will trigger an error when getting validated as part of a larger string. Unfortunately, until now, for some encoding no such sequence existed. For those encodings this commit removes one previously accepted input combination - we consider that to be ok, as the chosen bytes are outside of the valid ranges for the encodings, we just previously failed to detect that. As we cannot add a new field to pg_wchar_table without breaking ABI, this is implemented "in-line" in the newly added function. Author: Noah Misch Reviewed-by: Andres Freund Backpatch-through: 13 Security: CVE-2025-1094 --- src/common/wchar.c | 55 ++++++++++++++++++- src/include/mb/pg_wchar.h | 3 +- src/test/regress/expected/conversion.out | 4 ++ .../regress/input/create_function_0.source | 5 ++ .../regress/output/create_function_0.source | 3 + src/test/regress/regress.c | 50 +++++++++++++++++ src/test/regress/sql/conversion.sql | 3 + 7 files changed, 121 insertions(+), 2 deletions(-) diff --git a/src/common/wchar.c b/src/common/wchar.c index 0636b8765ba..35885fb6de7 100644 --- a/src/common/wchar.c +++ b/src/common/wchar.c @@ -15,6 +15,25 @@ #include "mb/pg_wchar.h" +/* + * In today's multibyte encodings other than UTF8, this two-byte sequence + * ensures pg_encoding_mblen() == 2 && pg_encoding_verifymbstr() == 0. + * + * For historical reasons, several verifychar implementations opt to reject + * this pair specifically. Byte pair range constraints, in encoding + * originator documentation, always excluded this pair. No core conversion + * could translate it. However, longstanding verifychar implementations + * accepted any non-NUL byte. big5_to_euc_tw and big5_to_mic even translate + * pairs not valid per encoding originator documentation. To avoid tightening + * core or non-core conversions in a security patch, we sought this one pair. + * + * PQescapeString() historically used spaces for BYTE1; many other values + * could suffice for BYTE1. + */ +#define NONUTF8_INVALID_BYTE0 (0x8d) +#define NONUTF8_INVALID_BYTE1 (' ') + + /* * Operations on multi-byte encodings are driven by a table of helper * functions. @@ -1532,6 +1551,11 @@ pg_big5_verifychar(const unsigned char *s, int len) if (len < l) return -1; + if (l == 2 && + s[0] == NONUTF8_INVALID_BYTE0 && + s[1] == NONUTF8_INVALID_BYTE1) + return -1; + while (--l > 0) { if (*++s == '\0') @@ -1581,6 +1605,11 @@ pg_gbk_verifychar(const unsigned char *s, int len) if (len < l) return -1; + if (l == 2 && + s[0] == NONUTF8_INVALID_BYTE0 && + s[1] == NONUTF8_INVALID_BYTE1) + return -1; + while (--l > 0) { if (*++s == '\0') @@ -1630,6 +1659,11 @@ pg_uhc_verifychar(const unsigned char *s, int len) if (len < l) return -1; + if (l == 2 && + s[0] == NONUTF8_INVALID_BYTE0 && + s[1] == NONUTF8_INVALID_BYTE1) + return -1; + while (--l > 0) { if (*++s == '\0') @@ -1858,6 +1892,19 @@ pg_utf8_islegal(const unsigned char *source, int length) } +/* + * Fills the provided buffer with two bytes such that: + * pg_encoding_mblen(dst) == 2 && pg_encoding_verifymbstr(dst) == 0 + */ +void +pg_encoding_set_invalid(int encoding, char *dst) +{ + Assert(pg_encoding_max_length(encoding) > 1); + + dst[0] = (encoding == PG_UTF8 ? 0xc0 : NONUTF8_INVALID_BYTE0); + dst[1] = NONUTF8_INVALID_BYTE1; +} + /* *------------------------------------------------------------------- * encoding info table @@ -1980,5 +2027,11 @@ pg_encoding_max_length(int encoding) { Assert(PG_VALID_ENCODING(encoding)); - return pg_wchar_table[encoding].maxmblen; + /* + * Check for the encoding despite the assert, due to some mingw versions + * otherwise issuing bogus warnings. + */ + return PG_VALID_ENCODING(encoding) ? + pg_wchar_table[encoding].maxmblen : + pg_wchar_table[PG_SQL_ASCII].maxmblen; } diff --git a/src/include/mb/pg_wchar.h b/src/include/mb/pg_wchar.h index d93ccac2633..abd65eb9f7d 100644 --- a/src/include/mb/pg_wchar.h +++ b/src/include/mb/pg_wchar.h @@ -359,7 +359,7 @@ typedef struct pg_enc2name #endif } pg_enc2name; -extern const pg_enc2name pg_enc2name_tbl[]; +extern PGDLLIMPORT const pg_enc2name pg_enc2name_tbl[]; /* * Encoding names for gettext @@ -573,6 +573,7 @@ extern int pg_valid_server_encoding_id(int encoding); * (in addition to the ones just above). The constant tables declared * earlier in this file are also available from libpgcommon. */ +extern void pg_encoding_set_invalid(int encoding, char *dst); 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); diff --git a/src/test/regress/expected/conversion.out b/src/test/regress/expected/conversion.out index 04fdcba4964..772814732af 100644 --- a/src/test/regress/expected/conversion.out +++ b/src/test/regress/expected/conversion.out @@ -1,6 +1,10 @@ -- -- create user defined conversion -- +SELECT FROM test_enc_setup(); +-- +(1 row) + CREATE USER regress_conversion_user WITH NOCREATEDB NOCREATEROLE; SET SESSION AUTHORIZATION regress_conversion_user; CREATE CONVERSION myconv FOR 'LATIN1' TO 'UTF8' FROM iso8859_1_to_utf8; diff --git a/src/test/regress/input/create_function_0.source b/src/test/regress/input/create_function_0.source index f47f635789a..54c76f9a8ed 100644 --- a/src/test/regress/input/create_function_0.source +++ b/src/test/regress/input/create_function_0.source @@ -59,6 +59,11 @@ CREATE FUNCTION test_opclass_options_func(internal) AS '@libdir@/regress@DLSUFFIX@', 'test_opclass_options_func' LANGUAGE C; + +CREATE FUNCTION test_enc_setup() RETURNS void + AS '@libdir@/regress@DLSUFFIX@', 'test_enc_setup' + LANGUAGE C STRICT; + 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; diff --git a/src/test/regress/output/create_function_0.source b/src/test/regress/output/create_function_0.source index 342bc40e115..7d3908967ac 100644 --- a/src/test/regress/output/create_function_0.source +++ b/src/test/regress/output/create_function_0.source @@ -46,6 +46,9 @@ CREATE FUNCTION test_opclass_options_func(internal) RETURNS void AS '@libdir@/regress@DLSUFFIX@', 'test_opclass_options_func' LANGUAGE C; +CREATE FUNCTION test_enc_setup() RETURNS void + AS '@libdir@/regress@DLSUFFIX@', 'test_enc_setup' + LANGUAGE C STRICT; 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; diff --git a/src/test/regress/regress.c b/src/test/regress/regress.c index 38d67aa79c9..0a0153e5551 100644 --- a/src/test/regress/regress.c +++ b/src/test/regress/regress.c @@ -1089,6 +1089,56 @@ test_opclass_options_func(PG_FUNCTION_ARGS) PG_RETURN_NULL(); } +/* one-time tests for encoding infrastructure */ +PG_FUNCTION_INFO_V1(test_enc_setup); +Datum +test_enc_setup(PG_FUNCTION_ARGS) +{ + /* Test pg_encoding_set_invalid() */ + for (int i = 0; i < _PG_LAST_ENCODING_; i++) + { + char buf[2], + bigbuf[16]; + int len, + mblen, + valid; + + if (pg_encoding_max_length(i) == 1) + continue; + pg_encoding_set_invalid(i, buf); + len = strnlen(buf, 2); + if (len != 2) + elog(WARNING, + "official invalid string for encoding \"%s\" has length %d", + pg_enc2name_tbl[i].name, len); + mblen = pg_encoding_mblen(i, buf); + if (mblen != 2) + elog(WARNING, + "official invalid string for encoding \"%s\" has mblen %d", + pg_enc2name_tbl[i].name, mblen); + valid = pg_encoding_verifymbstr(i, buf, len); + if (valid != 0) + elog(WARNING, + "official invalid string for encoding \"%s\" has valid prefix of length %d", + pg_enc2name_tbl[i].name, valid); + valid = pg_encoding_verifymbstr(i, buf, 1); + if (valid != 0) + elog(WARNING, + "first byte of official invalid string for encoding \"%s\" has valid prefix of length %d", + pg_enc2name_tbl[i].name, valid); + memset(bigbuf, ' ', sizeof(bigbuf)); + bigbuf[0] = buf[0]; + bigbuf[1] = buf[1]; + valid = pg_encoding_verifymbstr(i, bigbuf, sizeof(bigbuf)); + if (valid != 0) + elog(WARNING, + "trailing data changed official invalid string for encoding \"%s\" to have valid prefix of length %d", + pg_enc2name_tbl[i].name, valid); + } + + PG_RETURN_VOID(); +} + /* * Call an encoding conversion or verification function. * diff --git a/src/test/regress/sql/conversion.sql b/src/test/regress/sql/conversion.sql index 83586824321..d22b065885f 100644 --- a/src/test/regress/sql/conversion.sql +++ b/src/test/regress/sql/conversion.sql @@ -1,6 +1,9 @@ -- -- create user defined conversion -- + +SELECT FROM test_enc_setup(); + CREATE USER regress_conversion_user WITH NOCREATEDB NOCREATEROLE; SET SESSION AUTHORIZATION regress_conversion_user; CREATE CONVERSION myconv FOR 'LATIN1' TO 'UTF8' FROM iso8859_1_to_utf8; From 2ae54ae17eaad592991e7459140b2cad2e82745c Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Mon, 10 Feb 2025 10:03:40 -0500 Subject: [PATCH 83/90] Specify the encoding of input to fmtId() This commit adds fmtIdEnc() and fmtQualifiedIdEnc(), which allow to specify the encoding as an explicit argument. Additionally setFmtEncoding() is provided, which defines the encoding when no explicit encoding is provided, to avoid breaking all code using fmtId(). All users of fmtId()/fmtQualifiedId() are either converted to the explicit version or a call to setFmtEncoding() has been added. This commit does not yet utilize the now well-defined encoding, that will happen in a subsequent commit. Reviewed-by: Noah Misch Reviewed-by: Tom Lane Backpatch-through: 13 Security: CVE-2025-1094 --- src/bin/pg_dump/pg_backup_archiver.c | 1 + src/bin/pg_dump/pg_dump.c | 1 + src/bin/pg_dump/pg_dumpall.c | 1 + src/bin/psql/command.c | 3 + src/bin/scripts/common.c | 5 +- src/bin/scripts/createdb.c | 2 + src/bin/scripts/createuser.c | 2 + src/bin/scripts/dropdb.c | 13 ++--- src/bin/scripts/dropuser.c | 3 +- src/bin/scripts/reindexdb.c | 11 ++-- src/bin/scripts/vacuumdb.c | 5 +- src/fe_utils/string_utils.c | 84 ++++++++++++++++++++++++++-- src/include/fe_utils/string_utils.h | 3 + 13 files changed, 112 insertions(+), 22 deletions(-) diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index bef37dd2b70..6d4a610d191 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -2716,6 +2716,7 @@ processEncodingEntry(ArchiveHandle *AH, TocEntry *te) fatal("unrecognized encoding \"%s\"", ptr1); AH->public.encoding = encoding; + setFmtEncoding(encoding); } else fatal("invalid ENCODING item: %s", diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 5a45819e67a..7d83dda2124 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -1126,6 +1126,7 @@ setup_connection(Archive *AH, const char *dumpencoding, * we know how to escape strings. */ AH->encoding = PQclientEncoding(conn); + setFmtEncoding(AH->encoding); std_strings = PQparameterStatus(conn, "standard_conforming_strings"); AH->std_strings = (std_strings && strcmp(std_strings, "on") == 0); diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c index cc96caa0309..9ab05f74cc2 100644 --- a/src/bin/pg_dump/pg_dumpall.c +++ b/src/bin/pg_dump/pg_dumpall.c @@ -512,6 +512,7 @@ main(int argc, char *argv[]) * we know how to escape strings. */ encoding = PQclientEncoding(conn); + setFmtEncoding(encoding); std_strings = PQparameterStatus(conn, "standard_conforming_strings"); if (!std_strings) std_strings = "off"; diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index d403e2a283d..1a25ed7e083 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -1280,6 +1280,7 @@ exec_command_encoding(PsqlScanState scan_state, bool active_branch) /* save encoding info into psql internal data */ pset.encoding = PQclientEncoding(pset.db); pset.popt.topt.encoding = pset.encoding; + setFmtEncoding(pset.encoding); SetVariable(pset.vars, "ENCODING", pg_encoding_to_char(pset.encoding)); } @@ -3669,6 +3670,8 @@ SyncVariables(void) pset.popt.topt.encoding = pset.encoding; pset.sversion = PQserverVersion(pset.db); + setFmtEncoding(pset.encoding); + SetVariable(pset.vars, "DBNAME", PQdb(pset.db)); SetVariable(pset.vars, "USER", PQuser(pset.db)); SetVariable(pset.vars, "HOST", PQhost(pset.db)); diff --git a/src/bin/scripts/common.c b/src/bin/scripts/common.c index 79cdc6cf330..0ec822f7e5c 100644 --- a/src/bin/scripts/common.c +++ b/src/bin/scripts/common.c @@ -112,8 +112,9 @@ appendQualifiedRelation(PQExpBuffer buf, const char *spec, exit(1); } appendPQExpBufferStr(buf, - fmtQualifiedId(PQgetvalue(res, 0, 1), - PQgetvalue(res, 0, 0))); + fmtQualifiedIdEnc(PQgetvalue(res, 0, 1), + PQgetvalue(res, 0, 0), + PQclientEncoding(conn))); appendPQExpBufferStr(buf, columns); PQclear(res); termPQExpBuffer(&sql); diff --git a/src/bin/scripts/createdb.c b/src/bin/scripts/createdb.c index 041454f075f..56cad2c9281 100644 --- a/src/bin/scripts/createdb.c +++ b/src/bin/scripts/createdb.c @@ -191,6 +191,8 @@ main(int argc, char *argv[]) conn = connectMaintenanceDatabase(&cparams, progname, echo); + setFmtEncoding(PQclientEncoding(conn)); + initPQExpBuffer(&sql); appendPQExpBuffer(&sql, "CREATE DATABASE %s", diff --git a/src/bin/scripts/createuser.c b/src/bin/scripts/createuser.c index ef7e0e549fb..33a378ab7d6 100644 --- a/src/bin/scripts/createuser.c +++ b/src/bin/scripts/createuser.c @@ -263,6 +263,8 @@ main(int argc, char *argv[]) conn = connectMaintenanceDatabase(&cparams, progname, echo); + setFmtEncoding(PQclientEncoding(conn)); + initPQExpBuffer(&sql); printfPQExpBuffer(&sql, "CREATE ROLE %s", fmtId(newuser)); diff --git a/src/bin/scripts/dropdb.c b/src/bin/scripts/dropdb.c index b154ed1bb6d..1d1756ab9bb 100644 --- a/src/bin/scripts/dropdb.c +++ b/src/bin/scripts/dropdb.c @@ -128,13 +128,6 @@ main(int argc, char *argv[]) exit(0); } - initPQExpBuffer(&sql); - - appendPQExpBuffer(&sql, "DROP DATABASE %s%s%s;", - (if_exists ? "IF EXISTS " : ""), - fmtId(dbname), - force ? " WITH (FORCE)" : ""); - /* Avoid trying to drop postgres db while we are connected to it. */ if (maintenance_db == NULL && strcmp(dbname, "postgres") == 0) maintenance_db = "template1"; @@ -148,6 +141,12 @@ main(int argc, char *argv[]) conn = connectMaintenanceDatabase(&cparams, progname, echo); + initPQExpBuffer(&sql); + appendPQExpBuffer(&sql, "DROP DATABASE %s%s%s;", + (if_exists ? "IF EXISTS " : ""), + fmtIdEnc(dbname, PQclientEncoding(conn)), + force ? " WITH (FORCE)" : ""); + if (echo) printf("%s\n", sql.data); result = PQexec(conn, sql.data); diff --git a/src/bin/scripts/dropuser.c b/src/bin/scripts/dropuser.c index 61b8557bc7e..bc13bf3028d 100644 --- a/src/bin/scripts/dropuser.c +++ b/src/bin/scripts/dropuser.c @@ -142,7 +142,8 @@ main(int argc, char *argv[]) initPQExpBuffer(&sql); appendPQExpBuffer(&sql, "DROP ROLE %s%s;", - (if_exists ? "IF EXISTS " : ""), fmtId(dropuser)); + (if_exists ? "IF EXISTS " : ""), + fmtIdEnc(dropuser, PQclientEncoding(conn))); if (echo) printf("%s\n", sql.data); diff --git a/src/bin/scripts/reindexdb.c b/src/bin/scripts/reindexdb.c index db1d7f07fc0..3a3461af084 100644 --- a/src/bin/scripts/reindexdb.c +++ b/src/bin/scripts/reindexdb.c @@ -533,7 +533,8 @@ run_reindex_command(PGconn *conn, ReindexType type, const char *name, if (tablespace) { - appendPQExpBuffer(&sql, "%sTABLESPACE %s", sep, fmtId(tablespace)); + appendPQExpBuffer(&sql, "%sTABLESPACE %s", sep, + fmtIdEnc(tablespace, PQclientEncoding(conn))); sep = comma; } @@ -573,7 +574,8 @@ run_reindex_command(PGconn *conn, ReindexType type, const char *name, { case REINDEX_DATABASE: case REINDEX_SYSTEM: - appendPQExpBufferStr(&sql, fmtId(name)); + appendPQExpBufferStr(&sql, + fmtIdEnc(name, PQclientEncoding(conn))); break; case REINDEX_INDEX: case REINDEX_TABLE: @@ -743,8 +745,9 @@ get_parallel_object_list(PGconn *conn, ReindexType type, for (i = 0; i < ntups; i++) { appendPQExpBufferStr(&buf, - fmtQualifiedId(PQgetvalue(res, i, 1), - PQgetvalue(res, i, 0))); + fmtQualifiedIdEnc(PQgetvalue(res, i, 1), + PQgetvalue(res, i, 0), + PQclientEncoding(conn))); simple_string_list_append(tables, buf.data); resetPQExpBuffer(&buf); diff --git a/src/bin/scripts/vacuumdb.c b/src/bin/scripts/vacuumdb.c index d6f36bbed26..bf86fe9dbc9 100644 --- a/src/bin/scripts/vacuumdb.c +++ b/src/bin/scripts/vacuumdb.c @@ -701,8 +701,9 @@ vacuum_one_database(ConnParams *cparams, for (i = 0; i < ntups; i++) { appendPQExpBufferStr(&buf, - fmtQualifiedId(PQgetvalue(res, i, 1), - PQgetvalue(res, i, 0))); + fmtQualifiedIdEnc(PQgetvalue(res, i, 1), + PQgetvalue(res, i, 0), + PQclientEncoding(conn))); if (tables_listed && !PQgetisnull(res, i, 2)) appendPQExpBufferStr(&buf, PQgetvalue(res, i, 2)); diff --git a/src/fe_utils/string_utils.c b/src/fe_utils/string_utils.c index 5f347414260..ae769012e8c 100644 --- a/src/fe_utils/string_utils.c +++ b/src/fe_utils/string_utils.c @@ -19,6 +19,7 @@ #include "common/keywords.h" #include "fe_utils/string_utils.h" +#include "mb/pg_wchar.h" static PQExpBuffer defaultGetLocalPQExpBuffer(void); @@ -26,6 +27,8 @@ static PQExpBuffer defaultGetLocalPQExpBuffer(void); int quote_all_identifiers = 0; PQExpBuffer (*getLocalPQExpBuffer) (void) = defaultGetLocalPQExpBuffer; +static int fmtIdEncoding = -1; + /* * Returns a temporary PQExpBuffer, valid until the next call to the function. @@ -54,14 +57,48 @@ defaultGetLocalPQExpBuffer(void) return id_return; } +/* + * Set the encoding that fmtId() and fmtQualifiedId() use. + * + * This is not safe against multiple connections having different encodings, + * but there is no real other way to address the need to know the encoding for + * fmtId()/fmtQualifiedId() input for safe escaping. Eventually we should get + * rid of fmtId(). + */ +void +setFmtEncoding(int encoding) +{ + fmtIdEncoding = encoding; +} + +/* + * Return the currently configured encoding for fmtId() and fmtQualifiedId(). + */ +static int +getFmtEncoding(void) +{ + if (fmtIdEncoding != -1) + return fmtIdEncoding; + + /* + * In assertion builds it seems best to fail hard if the encoding was not + * set, to make it easier to find places with missing calls. But in + * production builds that seems like a bad idea, thus we instead just + * default to UTF-8. + */ + Assert(fmtIdEncoding != -1); + + return PG_UTF8; +} + /* * Quotes input string if it's not a legitimate SQL identifier as-is. * - * Note that the returned string must be used before calling fmtId again, + * Note that the returned string must be used before calling fmtIdEnc again, * since we re-use the same return buffer each time. */ const char * -fmtId(const char *rawid) +fmtIdEnc(const char *rawid, int encoding) { PQExpBuffer id_return = getLocalPQExpBuffer(); @@ -134,7 +171,24 @@ fmtId(const char *rawid) } /* - * fmtQualifiedId - construct a schema-qualified name, with quoting as needed. + * Quotes input string if it's not a legitimate SQL identifier as-is. + * + * Note that the returned string must be used before calling fmtId again, + * since we re-use the same return buffer each time. + * + * NB: This assumes setFmtEncoding() previously has been called to configure + * the encoding of rawid. It is preferable to use fmtIdEnc() with an + * explicit encoding. + */ +const char * +fmtId(const char *rawid) +{ + return fmtIdEnc(rawid, getFmtEncoding()); +} + +/* + * fmtQualifiedIdEnc - construct a schema-qualified name, with quoting as + * needed. * * Like fmtId, use the result before calling again. * @@ -142,7 +196,7 @@ fmtId(const char *rawid) * use that buffer until we're finished with calling fmtId(). */ const char * -fmtQualifiedId(const char *schema, const char *id) +fmtQualifiedIdEnc(const char *schema, const char *id, int encoding) { PQExpBuffer id_return; PQExpBuffer lcl_pqexp = createPQExpBuffer(); @@ -150,9 +204,9 @@ fmtQualifiedId(const char *schema, const char *id) /* Some callers might fail to provide a schema name */ if (schema && *schema) { - appendPQExpBuffer(lcl_pqexp, "%s.", fmtId(schema)); + appendPQExpBuffer(lcl_pqexp, "%s.", fmtIdEnc(schema, encoding)); } - appendPQExpBufferStr(lcl_pqexp, fmtId(id)); + appendPQExpBufferStr(lcl_pqexp, fmtIdEnc(id, encoding)); id_return = getLocalPQExpBuffer(); @@ -162,6 +216,24 @@ fmtQualifiedId(const char *schema, const char *id) return id_return->data; } +/* + * fmtQualifiedId - construct a schema-qualified name, with quoting as needed. + * + * Like fmtId, use the result before calling again. + * + * Since we call fmtId and it also uses getLocalPQExpBuffer() we cannot + * use that buffer until we're finished with calling fmtId(). + * + * NB: This assumes setFmtEncoding() previously has been called to configure + * the encoding of schema/id. It is preferable to use fmtQualifiedIdEnc() + * with an explicit encoding. + */ +const char * +fmtQualifiedId(const char *schema, const char *id) +{ + return fmtQualifiedIdEnc(schema, id, getFmtEncoding()); +} + /* * Format a Postgres version number (in the PG_VERSION_NUM integer format diff --git a/src/include/fe_utils/string_utils.h b/src/include/fe_utils/string_utils.h index 0cc4b212f77..1cc954110da 100644 --- a/src/include/fe_utils/string_utils.h +++ b/src/include/fe_utils/string_utils.h @@ -25,7 +25,10 @@ extern PQExpBuffer (*getLocalPQExpBuffer) (void); /* Functions */ extern const char *fmtId(const char *identifier); +extern const char *fmtIdEnc(const char *identifier, int encoding); extern const char *fmtQualifiedId(const char *schema, const char *id); +extern const char *fmtQualifiedIdEnc(const char *schema, const char *id, int encoding); +extern void setFmtEncoding(int encoding); extern char *formatPGVersionNumber(int version_number, bool include_minor, char *buf, size_t buflen); From e0ef3d776a349db2c63075241626563b79477bd4 Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Mon, 10 Feb 2025 10:03:40 -0500 Subject: [PATCH 84/90] Fix handling of invalidly encoded data in escaping functions Previously invalidly encoded input to various escaping functions could lead to the escaped string getting incorrectly parsed by psql. To be safe, escaping functions need to ensure that neither invalid nor incomplete multi-byte characters can be used to "escape" from being quoted. Functions which can report errors now return an error in more cases than before. Functions that cannot report errors now replace invalid input bytes with a byte sequence that cannot be used to escape the quotes and that is guaranteed to error out when a query is sent to the server. The following functions are fixed by this commit: - PQescapeLiteral() - PQescapeIdentifier() - PQescapeString() - PQescapeStringConn() - fmtId() - appendStringLiteral() Reported-by: Stephen Fewer Reviewed-by: Noah Misch Reviewed-by: Tom Lane Backpatch-through: 13 Security: CVE-2025-1094 --- src/fe_utils/string_utils.c | 170 ++++++++++++++++++++++++++------- src/interfaces/libpq/fe-exec.c | 135 +++++++++++++++++++------- 2 files changed, 237 insertions(+), 68 deletions(-) diff --git a/src/fe_utils/string_utils.c b/src/fe_utils/string_utils.c index ae769012e8c..9131b471cd5 100644 --- a/src/fe_utils/string_utils.c +++ b/src/fe_utils/string_utils.c @@ -104,6 +104,7 @@ fmtIdEnc(const char *rawid, int encoding) const char *cp; bool need_quotes = false; + size_t remaining = strlen(rawid); /* * These checks need to match the identifier production in scan.l. Don't @@ -117,7 +118,8 @@ fmtIdEnc(const char *rawid, int encoding) else { /* otherwise check the entire string */ - for (cp = rawid; *cp; cp++) + cp = rawid; + for (size_t i = 0; i < remaining; i++, cp++) { if (!((*cp >= 'a' && *cp <= 'z') || (*cp >= '0' && *cp <= '9') @@ -153,17 +155,90 @@ fmtIdEnc(const char *rawid, int encoding) else { appendPQExpBufferChar(id_return, '"'); - for (cp = rawid; *cp; cp++) + + cp = &rawid[0]; + while (remaining > 0) { - /* - * Did we find a double-quote in the string? Then make this a - * double double-quote per SQL99. Before, we put in a - * backslash/double-quote pair. - thomas 2000-08-05 - */ - if (*cp == '"') - appendPQExpBufferChar(id_return, '"'); - appendPQExpBufferChar(id_return, *cp); + int charlen; + + /* Fast path for plain ASCII */ + if (!IS_HIGHBIT_SET(*cp)) + { + /* + * Did we find a double-quote in the string? Then make this a + * double double-quote per SQL99. Before, we put in a + * backslash/double-quote pair. - thomas 2000-08-05 + */ + if (*cp == '"') + appendPQExpBufferChar(id_return, '"'); + appendPQExpBufferChar(id_return, *cp); + remaining--; + cp++; + continue; + } + + /* Slow path for possible multibyte characters */ + charlen = pg_encoding_mblen(encoding, cp); + + if (remaining < charlen) + { + /* + * If the character is longer than the available input, + * replace the string with an invalid sequence. The invalid + * sequence ensures that the escaped string will trigger an + * error on the server-side, even if we can't directly report + * an error here. + */ + enlargePQExpBuffer(id_return, 2); + pg_encoding_set_invalid(encoding, + id_return->data + id_return->len); + id_return->len += 2; + id_return->data[id_return->len] = '\0'; + + /* there's no more input data, so we can stop */ + break; + } + else if (pg_encoding_verifymbchar(encoding, cp, charlen) == -1) + { + /* + * Multibyte character is invalid. It's important to verify + * that as invalid multi-byte characters could e.g. be used to + * "skip" over quote characters, e.g. when parsing + * character-by-character. + * + * Replace the bytes corresponding to the invalid character + * with an invalid sequence, for the same reason as above. + * + * It would be a bit faster to verify the whole string the + * first time we encounter a set highbit, but this way we can + * replace just the invalid characters, which probably makes + * it easier for users to find the invalidly encoded portion + * of a larger string. + */ + enlargePQExpBuffer(id_return, 2); + pg_encoding_set_invalid(encoding, + id_return->data + id_return->len); + id_return->len += 2; + id_return->data[id_return->len] = '\0'; + + /* + * Copy the rest of the string after the invalid multi-byte + * character. + */ + remaining -= charlen; + cp += charlen; + } + else + { + for (int i = 0; i < charlen; i++) + { + appendPQExpBufferChar(id_return, *cp); + remaining--; + cp++; + } + } } + appendPQExpBufferChar(id_return, '"'); } @@ -290,6 +365,7 @@ appendStringLiteral(PQExpBuffer buf, const char *str, size_t length = strlen(str); const char *source = str; char *target; + size_t remaining = length; if (!enlargePQExpBuffer(buf, 2 * length + 2)) return; @@ -297,10 +373,10 @@ appendStringLiteral(PQExpBuffer buf, const char *str, target = buf->data + buf->len; *target++ = '\''; - while (*source != '\0') + while (remaining > 0) { char c = *source; - int len; + int charlen; int i; /* Fast path for plain ASCII */ @@ -312,39 +388,65 @@ appendStringLiteral(PQExpBuffer buf, const char *str, /* Copy the character */ *target++ = c; source++; + remaining--; continue; } /* Slow path for possible multibyte characters */ - len = PQmblen(source, encoding); + charlen = PQmblen(source, encoding); - /* Copy the character */ - for (i = 0; i < len; i++) + if (remaining < charlen) { - if (*source == '\0') - break; - *target++ = *source++; - } + /* + * If the character is longer than the available input, replace + * the string with an invalid sequence. The invalid sequence + * ensures that the escaped string will trigger an error on the + * server-side, even if we can't directly report an error here. + * + * We know there's enough space for the invalid sequence because + * the "target" buffer is 2 * length + 2 long, and at worst we're + * replacing a single input byte with two invalid bytes. + */ + pg_encoding_set_invalid(encoding, target); + target += 2; - /* - * If we hit premature end of string (ie, incomplete multibyte - * character), try to pad out to the correct length with spaces. We - * may not be able to pad completely, but we will always be able to - * insert at least one pad space (since we'd not have quoted a - * multibyte character). This should be enough to make a string that - * the server will error out on. - */ - if (i < len) + /* there's no more valid input data, so we can stop */ + break; + } + else if (pg_encoding_verifymbchar(encoding, source, charlen) == -1) { - char *stop = buf->data + buf->maxlen - 2; + /* + * Multibyte character is invalid. It's important to verify that + * as invalid multi-byte characters could e.g. be used to "skip" + * over quote characters, e.g. when parsing + * character-by-character. + * + * Replace the bytes corresponding to the invalid character with + * an invalid sequence, for the same reason as above. + * + * It would be a bit faster to verify the whole string the first + * time we encounter a set highbit, but this way we can replace + * just the invalid characters, which probably makes it easier for + * users to find the invalidly encoded portion of a larger string. + */ + pg_encoding_set_invalid(encoding, target); + target += 2; + remaining -= charlen; - for (; i < len; i++) + /* + * Copy the rest of the string after the invalid multi-byte + * character. + */ + source += charlen; + } + else + { + /* Copy the character */ + for (i = 0; i < charlen; i++) { - if (target >= stop) - break; - *target++ = ' '; + *target++ = *source++; + remaining--; } - break; } } diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index a1c946bccd2..8d5ad9cdbe8 100644 --- a/src/interfaces/libpq/fe-exec.c +++ b/src/interfaces/libpq/fe-exec.c @@ -3954,15 +3954,15 @@ PQescapeStringInternal(PGconn *conn, { const char *source = from; char *target = to; - size_t remaining = length; + size_t remaining = strnlen(from, length); if (error) *error = 0; - while (remaining > 0 && *source != '\0') + while (remaining > 0) { char c = *source; - int len; + int charlen; int i; /* Fast path for plain ASCII */ @@ -3979,39 +3979,78 @@ PQescapeStringInternal(PGconn *conn, } /* Slow path for possible multibyte characters */ - len = pg_encoding_mblen(encoding, source); + charlen = pg_encoding_mblen(encoding, source); - /* Copy the character */ - for (i = 0; i < len; i++) + if (remaining < charlen) { - if (remaining == 0 || *source == '\0') - break; - *target++ = *source++; - remaining--; - } + /* + * If the character is longer than the available input, report an + * error if possible, and replace the string with an invalid + * sequence. The invalid sequence ensures that the escaped string + * will trigger an error on the server-side, even if we can't + * directly report an error here. + * + * This isn't *that* crucial when we can report an error to the + * caller, but if we can't, the caller will use this string + * unmodified and it needs to be safe for parsing. + * + * We know there's enough space for the invalid sequence because + * the "to" buffer needs to be at least 2 * length + 1 long, and + * at worst we're replacing a single input byte with two invalid + * bytes. + */ + if (error) + *error = 1; + if (conn) + appendPQExpBufferStr(&conn->errorMessage, + libpq_gettext("incomplete multibyte character\n")); - /* - * If we hit premature end of string (ie, incomplete multibyte - * character), try to pad out to the correct length with spaces. We - * may not be able to pad completely, but we will always be able to - * insert at least one pad space (since we'd not have quoted a - * multibyte character). This should be enough to make a string that - * the server will error out on. - */ - if (i < len) + pg_encoding_set_invalid(encoding, target); + target += 2; + + /* there's no more input data, so we can stop */ + break; + } + else if (pg_encoding_verifymbchar(encoding, source, charlen) == -1) { + /* + * Multibyte character is invalid. It's important to verify that + * as invalid multi-byte characters could e.g. be used to "skip" + * over quote characters, e.g. when parsing + * character-by-character. + * + * Replace the bytes corresponding to the invalid character with + * an invalid sequence, for the same reason as above. + * + * It would be a bit faster to verify the whole string the first + * time we encounter a set highbit, but this way we can replace + * just the invalid characters, which probably makes it easier for + * users to find the invalidly encoded portion of a larger string. + */ if (error) *error = 1; if (conn) appendPQExpBufferStr(&conn->errorMessage, - libpq_gettext("incomplete multibyte character\n")); - for (; i < len; i++) + libpq_gettext("invalid multibyte character\n")); + + pg_encoding_set_invalid(encoding, target); + target += 2; + remaining -= charlen; + + /* + * Copy the rest of the string after the invalid multi-byte + * character. + */ + source += charlen; + } + else + { + /* Copy the character */ + for (i = 0; i < charlen; i++) { - if (((size_t) (target - to)) / 2 >= length) - break; - *target++ = ' '; + *target++ = *source++; + remaining--; } - break; } } @@ -4065,9 +4104,10 @@ PQescapeInternal(PGconn *conn, const char *str, size_t len, bool as_ident) char *rp; int num_quotes = 0; /* single or double, depending on as_ident */ int num_backslashes = 0; - int input_len; - int result_size; + size_t input_len = strlen(str); + size_t result_size; char quote_char = as_ident ? '"' : '\''; + bool validated_mb = false; /* We must have a connection, else fail immediately. */ if (!conn) @@ -4075,8 +4115,12 @@ PQescapeInternal(PGconn *conn, const char *str, size_t len, bool as_ident) resetPQExpBuffer(&conn->errorMessage); - /* Scan the string for characters that must be escaped. */ - for (s = str; (s - str) < len && *s != '\0'; ++s) + /* + * Scan the string for characters that must be escaped and for invalidly + * encoded data. + */ + s = str; + for (size_t remaining = input_len; remaining > 0; remaining--, s++) { if (*s == quote_char) ++num_quotes; @@ -4089,21 +4133,42 @@ PQescapeInternal(PGconn *conn, const char *str, size_t len, bool as_ident) /* Slow path for possible multibyte characters */ charlen = pg_encoding_mblen(conn->client_encoding, s); - /* Multibyte character overruns allowable length. */ - if ((s - str) + charlen > len || memchr(s, 0, charlen) != NULL) + if (charlen > remaining) { appendPQExpBufferStr(&conn->errorMessage, libpq_gettext("incomplete multibyte character\n")); return NULL; } + /* + * If we haven't already, check that multibyte characters are + * valid. It's important to verify that as invalid multi-byte + * characters could e.g. be used to "skip" over quote characters, + * e.g. when parsing character-by-character. + * + * We check validity once, for the whole remainder of the string, + * when we first encounter any multi-byte character. Some + * encodings have optimized implementations for longer strings. + */ + if (!validated_mb) + { + if (pg_encoding_verifymbstr(conn->client_encoding, s, remaining) + != strlen(s)) + { + appendPQExpBufferStr(&conn->errorMessage, + libpq_gettext("invalid multibyte character\n")); + return NULL; + } + validated_mb = true; + } + /* Adjust s, bearing in mind that for loop will increment it. */ s += charlen - 1; + remaining -= charlen - 1; } } /* Allocate output buffer. */ - input_len = s - str; result_size = input_len + num_quotes + 3; /* two quotes, plus a NUL */ if (!as_ident && num_backslashes > 0) result_size += num_backslashes + 2; @@ -4149,7 +4214,8 @@ PQescapeInternal(PGconn *conn, const char *str, size_t len, bool as_ident) } else { - for (s = str; s - str < input_len; ++s) + s = str; + for (size_t remaining = input_len; remaining > 0; remaining--, s++) { if (*s == quote_char || (!as_ident && *s == '\\')) { @@ -4167,6 +4233,7 @@ PQescapeInternal(PGconn *conn, const char *str, size_t len, bool as_ident) *rp++ = *s; if (--i == 0) break; + remaining--; ++s; /* for loop will provide the final increment */ } } From 46ddf98df0517d39108abdf5da29e0cae8d4ebfd Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Mon, 10 Feb 2025 10:03:40 -0500 Subject: [PATCH 85/90] Add test of various escape functions As highlighted by the prior commit, writing correct escape functions is less trivial than one might hope. This test module tries to verify that different escaping functions behave reasonably. It e.g. tests: - Invalidly encoded input to an escape function leads to invalidly encoded output - Trailing incomplete multi-byte characters are handled sensibly - Escaped strings are parsed as single statement by psql's parser (which derives from the backend parser) There are further tests that would be good to add. But even in the current state it was rather useful for writing the fix in the prior commit. Reviewed-by: Noah Misch Backpatch-through: 13 Security: CVE-2025-1094 --- src/test/modules/Makefile | 1 + src/test/modules/test_escape/.gitignore | 2 + src/test/modules/test_escape/Makefile | 27 + .../modules/test_escape/t/001_test_escape.pl | 53 ++ src/test/modules/test_escape/test_escape.c | 803 ++++++++++++++++++ src/tools/msvc/Mkvcbuild.pm | 3 +- src/tools/pgindent/typedefs.list | 3 + 7 files changed, 891 insertions(+), 1 deletion(-) create mode 100644 src/test/modules/test_escape/.gitignore create mode 100644 src/test/modules/test_escape/Makefile create mode 100644 src/test/modules/test_escape/t/001_test_escape.pl create mode 100644 src/test/modules/test_escape/test_escape.c diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile index dffc79b2d9a..3b8c55cd3e3 100644 --- a/src/test/modules/Makefile +++ b/src/test/modules/Makefile @@ -16,6 +16,7 @@ SUBDIRS = \ spgist_name_ops \ test_bloomfilter \ test_ddl_deparse \ + test_escape \ test_extensions \ test_ginpostinglist \ test_integerset \ diff --git a/src/test/modules/test_escape/.gitignore b/src/test/modules/test_escape/.gitignore new file mode 100644 index 00000000000..e498d6b7efa --- /dev/null +++ b/src/test/modules/test_escape/.gitignore @@ -0,0 +1,2 @@ +/tmp_check/ +/test_escape diff --git a/src/test/modules/test_escape/Makefile b/src/test/modules/test_escape/Makefile new file mode 100644 index 00000000000..786db4cbae4 --- /dev/null +++ b/src/test/modules/test_escape/Makefile @@ -0,0 +1,27 @@ +# src/test/modules/test_escape/Makefile + +PGFILEDESC = "test escape program" +PGAPPICON = win32 + +PROGRAM = test_escape +OBJS = $(WIN32RES) test_escape.o + +PG_CPPFLAGS = -I$(libpq_srcdir) +PG_LIBS_INTERNAL += -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_pgport) + +NO_INSTALL = 1 +TAP_TESTS = 1 + +ifdef USE_PGXS +PG_CONFIG = pg_config +PGXS := $(shell $(PG_CONFIG) --pgxs) +include $(PGXS) +else +subdir = src/test/modules/test_escape +top_builddir = ../../../.. +include $(top_builddir)/src/Makefile.global +include $(top_srcdir)/contrib/contrib-global.mk +endif + +test_escape$(X): | submake-libpgfeutils +check: test_escape$(X) diff --git a/src/test/modules/test_escape/t/001_test_escape.pl b/src/test/modules/test_escape/t/001_test_escape.pl new file mode 100644 index 00000000000..0d5aec3ed74 --- /dev/null +++ b/src/test/modules/test_escape/t/001_test_escape.pl @@ -0,0 +1,53 @@ +# Copyright (c) 2023-2025, PostgreSQL Global Development Group +use strict; +use warnings FATAL => 'all'; +use Config; +use PostgreSQL::Test::Utils; +use PostgreSQL::Test::Cluster; +use Test::More; + +my $node = PostgreSQL::Test::Cluster->new('node'); + +$node->init(); +$node->start(); + +$node->safe_psql('postgres', + q(CREATE DATABASE db_sql_ascii ENCODING "sql_ascii" TEMPLATE template0;)); + +my $cmd = + [ 'test_escape', '--conninfo', $node->connstr . " dbname=db_sql_ascii" ]; + +# There currently is no good other way to transport test results from a C +# program that requires just the node being set-up... +my ($stderr, $stdout); +my $result = IPC::Run::run $cmd, '>', \$stdout, '2>', \$stderr; + +is($result, 1, "test_escape returns 0"); +is($stderr, '', "test_escape stderr is empty"); + +foreach my $line (split('\n', $stdout)) +{ + if ($line =~ m/^ok \d+ ?(.*)/) + { + ok(1, $1); + } + + elsif ($line =~ m/^not ok \d+ ?(.*)/) + { + ok(0, $1); + } + + elsif ($line =~ m/^# ?(.*)/) + { + note $1; + } + elsif ($line =~ m/^\d+..\d+$/) + { + } + else + { + BAIL_OUT("no unmapped lines, got $line"); + } +} + +done_testing(); diff --git a/src/test/modules/test_escape/test_escape.c b/src/test/modules/test_escape/test_escape.c new file mode 100644 index 00000000000..6654ab1dbe7 --- /dev/null +++ b/src/test/modules/test_escape/test_escape.c @@ -0,0 +1,803 @@ +/* + * test_escape.c Test escape functions + * + * Copyright (c) 2022-2025, PostgreSQL Global Development Group + * + * IDENTIFICATION + * src/test/modules/test_escape/test_escape.c + */ + +#include "postgres_fe.h" + +#include +#include + +#include "fe_utils/psqlscan.h" +#include "fe_utils/string_utils.h" +#include "getopt_long.h" +#include "libpq-fe.h" +#include "mb/pg_wchar.h" + + +typedef struct pe_test_config +{ + int verbosity; + bool force_unsupported; + const char *conninfo; + PGconn *conn; + + int test_count; + int failure_count; +} pe_test_config; + + +/* + * An escape function to be tested by this test. + */ +typedef struct pe_test_escape_func +{ + const char *name; + + /* + * Can the escape method report errors? If so, we validate that it does in + * case of various invalid inputs. + */ + bool reports_errors; + + /* + * Is the escape method known to not handle invalidly encoded input? If + * so, we don't run the test unless --force-unsupported is used. + */ + bool supports_only_valid; + + /* + * Is the escape method known to only handle encodings where no byte in a + * multi-byte characters are valid ascii. + */ + bool supports_only_ascii_overlap; + + bool (*escape) (PGconn *conn, PQExpBuffer target, + const char *unescaped, size_t unescaped_len, + PQExpBuffer escape_err); +} pe_test_escape_func; + +/* + * A single test input for this test. + */ +typedef struct pe_test_vector +{ + const char *client_encoding; + size_t escape_len; + const char *escape; +} pe_test_vector; + + +/* + * Callback functions from flex lexer. Not currently used by the test. + */ +static const PsqlScanCallbacks test_scan_callbacks = { + NULL +}; + + +static bool +escape_literal(PGconn *conn, PQExpBuffer target, + const char *unescaped, size_t unescaped_len, + PQExpBuffer escape_err) +{ + char *escaped; + + escaped = PQescapeLiteral(conn, unescaped, unescaped_len); + if (!escaped) + { + appendPQExpBuffer(escape_err, "%s", + PQerrorMessage(conn)); + escape_err->data[escape_err->len - 1] = 0; + escape_err->len--; + return false; + } + else + { + appendPQExpBufferStr(target, escaped); + PQfreemem(escaped); + return true; + } +} + +static bool +escape_identifier(PGconn *conn, PQExpBuffer target, + const char *unescaped, size_t unescaped_len, + PQExpBuffer escape_err) +{ + char *escaped; + + escaped = PQescapeIdentifier(conn, unescaped, unescaped_len); + if (!escaped) + { + appendPQExpBuffer(escape_err, "%s", + PQerrorMessage(conn)); + escape_err->data[escape_err->len - 1] = 0; + escape_err->len--; + return false; + } + else + { + appendPQExpBufferStr(target, escaped); + PQfreemem(escaped); + return true; + } +} + +static bool +escape_string_conn(PGconn *conn, PQExpBuffer target, + const char *unescaped, size_t unescaped_len, + PQExpBuffer escape_err) +{ + int error; + size_t sz; + + appendPQExpBufferChar(target, '\''); + enlargePQExpBuffer(target, unescaped_len * 2 + 1); + sz = PQescapeStringConn(conn, target->data + target->len, + unescaped, unescaped_len, + &error); + + target->len += sz; + appendPQExpBufferChar(target, '\''); + + if (error) + { + appendPQExpBuffer(escape_err, "%s", + PQerrorMessage(conn)); + escape_err->data[escape_err->len - 1] = 0; + escape_err->len--; + return false; + } + else + { + return true; + } +} + +static bool +escape_string(PGconn *conn, PQExpBuffer target, + const char *unescaped, size_t unescaped_len, + PQExpBuffer escape_err) +{ + size_t sz; + + appendPQExpBufferChar(target, '\''); + enlargePQExpBuffer(target, unescaped_len * 2 + 1); + sz = PQescapeString(target->data + target->len, + unescaped, unescaped_len); + target->len += sz; + appendPQExpBufferChar(target, '\''); + + + return true; +} + +/* + * Escape via s/'/''/. Non-core drivers invariably wrap libpq or use this + * method. It suffices iff the input passes encoding validation, so it's + * marked as supports_only_valid. + */ +static bool +escape_replace(PGconn *conn, PQExpBuffer target, + const char *unescaped, size_t unescaped_len, + PQExpBuffer escape_err) +{ + const char *s = unescaped; + + appendPQExpBufferChar(target, '\''); + + for (int i = 0; i < unescaped_len; i++) + { + char c = *s; + + if (c == '\'') + { + appendPQExpBufferStr(target, "''"); + } + else + appendPQExpBufferChar(target, c); + s++; + } + appendPQExpBufferChar(target, '\''); + + return true; +} + +static bool +escape_append_literal(PGconn *conn, PQExpBuffer target, + const char *unescaped, size_t unescaped_len, + PQExpBuffer escape_err) +{ + appendStringLiteral(target, unescaped, PQclientEncoding(conn), 1); + + return true; +} + +static bool +escape_fmt_id(PGconn *conn, PQExpBuffer target, + const char *unescaped, size_t unescaped_len, + PQExpBuffer escape_err) +{ + setFmtEncoding(PQclientEncoding(conn)); + appendPQExpBufferStr(target, fmtId(unescaped)); + + return true; +} + +static pe_test_escape_func pe_test_escape_funcs[] = +{ + { + .name = "PQescapeLiteral", + .reports_errors = true, + .escape = escape_literal, + }, + { + .name = "PQescapeIdentifier", + .reports_errors = true, + .escape = escape_identifier + }, + { + .name = "PQescapeStringConn", + .reports_errors = true, + .escape = escape_string_conn + }, + { + .name = "PQescapeString", + .reports_errors = false, + .escape = escape_string + }, + { + .name = "replace", + .reports_errors = false, + .supports_only_valid = true, + .supports_only_ascii_overlap = true, + .escape = escape_replace + }, + { + .name = "appendStringLiteral", + .reports_errors = false, + .escape = escape_append_literal + }, + { + .name = "fmtId", + .reports_errors = false, + .escape = escape_fmt_id + }, +}; + + +#define TV(enc, string) {.client_encoding = (enc), .escape=string, .escape_len=sizeof(string) - 1, } +static pe_test_vector pe_test_vectors[] = +{ + /* expected to work sanity checks */ + TV("UTF-8", "1"), + TV("UTF-8", "'"), + TV("UTF-8", "\""), + + TV("UTF-8", "\'"), + TV("UTF-8", "\""), + + TV("UTF-8", "\\"), + + TV("UTF-8", "\\'"), + TV("UTF-8", "\\\""), + + /* trailing multi-byte character, paddable in available space */ + TV("UTF-8", "1\xC0"), + TV("UTF-8", "1\xE0 "), + TV("UTF-8", "1\xF0 "), + TV("UTF-8", "1\xF0 "), + TV("UTF-8", "1\xF0 "), + + /* trailing multi-byte character, not enough space to pad */ + TV("UTF-8", "1\xE0"), + TV("UTF-8", "1\xF0"), + TV("UTF-8", "\xF0"), + + /* try to smuggle in something in invalid characters */ + TV("UTF-8", "1\xE0'"), + TV("UTF-8", "1\xE0\""), + TV("UTF-8", "1\xF0'"), + TV("UTF-8", "1\xF0\""), + TV("UTF-8", "1\xF0'; "), + TV("UTF-8", "1\xF0\"; "), + TV("UTF-8", "1\xF0';;;;"), + TV("UTF-8", "1\xF0 ';;;;"), + TV("UTF-8", "1\xF0 \";;;;"), + TV("UTF-8", "1\xE0'; \\l ; "), + TV("UTF-8", "1\xE0\"; \\l ; "), + + /* null byte handling */ + TV("UTF-8", "some\0thing"), + TV("UTF-8", "some\0"), + TV("UTF-8", "some\xF0'\0"), + TV("UTF-8", "some\xF0'\0'"), + TV("UTF-8", "some\xF0" "ab\0'"), + + /* GB18030's 4 byte encoding requires a 2nd byte limited values */ + TV("GB18030", "\x90\x31"), + TV("GB18030", "\\\x81\x5c'"), + TV("GB18030", "\\\x81\x5c\""), + TV("GB18030", "\\\x81\x5c\0'"), + + /* + * \x81 indicates a 2 byte char. ' and " are not a valid second byte, but + * that requires encoding verification to know. E.g. replace_string() + * doesn't cope. + */ + TV("GB18030", "\\\x81';"), + TV("GB18030", "\\\x81\";"), + + /* + * \x81 indicates a 2 byte char. \ is a valid second character. + */ + TV("GB18030", "\\\x81\\';"), + TV("GB18030", "\\\x81\\\";"), + TV("GB18030", "\\\x81\0;"), + TV("GB18030", "\\\x81\0'"), + TV("GB18030", "\\\x81'\0"), + + TV("SJIS", "\xF0\x40;"), + + TV("SJIS", "\xF0';"), + TV("SJIS", "\xF0\";"), + TV("SJIS", "\xF0\0'"), + TV("SJIS", "\\\xF0\\';"), + TV("SJIS", "\\\xF0\\\";"), + + TV("gbk", "\x80';"), + TV("gbk", "\x80"), + TV("gbk", "\x80'"), + TV("gbk", "\x80\""), + TV("gbk", "\x80\\"), + + TV("mule_internal", "\\\x9c';\0;"), + + TV("sql_ascii", "1\xC0'"), +}; + + +/* + * Print the string into buf, making characters outside of plain ascii + * somewhat easier to recognize. + * + * The output format could stand to be improved significantly, it's not at all + * unambiguous. + */ +static void +escapify(PQExpBuffer buf, const char *str, size_t len) +{ + for (size_t i = 0; i < len; i++) + { + char c = *str; + + if (c == '\n') + appendPQExpBufferStr(buf, "\\n"); + else if (c == '\0') + appendPQExpBufferStr(buf, "\\0"); + else if (c < ' ' || c > '~') + appendPQExpBuffer(buf, "\\x%2x", (uint8_t) c); + else + appendPQExpBufferChar(buf, c); + str++; + } +} + +static void +report_result(pe_test_config *tc, + bool success, + PQExpBuffer testname, + PQExpBuffer details, + const char *subname, + const char *resultdesc) +{ + int test_id = ++tc->test_count; + bool print_details = true; + bool print_result = true; + + if (success) + { + if (tc->verbosity <= 0) + print_details = false; + if (tc->verbosity < 0) + print_result = false; + } + else + tc->failure_count++; + + if (print_details) + printf("%s", details->data); + + if (print_result) + printf("%s %d - %s: %s: %s\n", + success ? "ok" : "not ok", + test_id, testname->data, + subname, + resultdesc); +} + +/* + * Return true for encodings in which bytes in a multi-byte character look + * like valid ascii characters. + */ +static bool +encoding_conflicts_ascii(int encoding) +{ + /* + * We don't store this property directly anywhere, but whether an encoding + * is a client-only encoding is a good proxy. + */ + if (encoding > PG_ENCODING_BE_LAST) + return true; + return false; +} + +static const char * +scan_res_s(PsqlScanResult res) +{ +#define TOSTR_CASE(sym) case sym: return #sym + + switch (res) + { + TOSTR_CASE(PSCAN_SEMICOLON); + TOSTR_CASE(PSCAN_BACKSLASH); + TOSTR_CASE(PSCAN_INCOMPLETE); + TOSTR_CASE(PSCAN_EOL); + } + + pg_unreachable(); + return ""; /* silence compiler */ +} + +/* + * Verify that psql parses the input as a single statement. If this property + * is violated, the escape function does not effectively protect against + * smuggling in a second statement. + */ +static void +test_psql_parse(pe_test_config *tc, PQExpBuffer testname, + PQExpBuffer input_buf, PQExpBuffer details) +{ + PsqlScanState scan_state; + PsqlScanResult scan_result; + PQExpBuffer query_buf; + promptStatus_t prompt_status = PROMPT_READY; + int matches = 0; + bool test_fails; + const char *resdesc; + + query_buf = createPQExpBuffer(); + + scan_state = psql_scan_create(&test_scan_callbacks); + + /* + * TODO: This hardcodes standard conforming strings, it would be useful to + * test without as well. + */ + psql_scan_setup(scan_state, input_buf->data, input_buf->len, + PQclientEncoding(tc->conn), 1); + + do + { + resetPQExpBuffer(query_buf); + + scan_result = psql_scan(scan_state, query_buf, + &prompt_status); + + appendPQExpBuffer(details, + "#\t\t %d: scan_result: %s prompt: %u, query_buf: ", + matches, scan_res_s(scan_result), prompt_status); + escapify(details, query_buf->data, query_buf->len); + appendPQExpBuffer(details, "\n"); + + matches++; + } + while (scan_result != PSCAN_INCOMPLETE && scan_result != PSCAN_EOL); + + psql_scan_destroy(scan_state); + destroyPQExpBuffer(query_buf); + + test_fails = matches > 1 || scan_result != PSCAN_EOL; + + if (matches > 1) + resdesc = "more than one match"; + else if (scan_result != PSCAN_EOL) + resdesc = "unexpected end state"; + else + resdesc = "ok"; + + report_result(tc, !test_fails, testname, details, + "psql parse", + resdesc); +} + +static void +test_one_vector_escape(pe_test_config *tc, const pe_test_vector *tv, const pe_test_escape_func *ef) +{ + PQExpBuffer testname; + PQExpBuffer details; + PQExpBuffer escape_buf; + PQExpBuffer escape_err; + size_t input_encoding_validlen; + bool input_encoding_valid; + size_t input_encoding0_validlen; + bool input_encoding0_valid; + bool escape_success; + size_t escape_encoding_length; + bool escape_encoding_valid; + + escape_err = createPQExpBuffer(); + testname = createPQExpBuffer(); + details = createPQExpBuffer(); + escape_buf = createPQExpBuffer(); + + if (ef->supports_only_ascii_overlap && + encoding_conflicts_ascii(PQclientEncoding(tc->conn))) + { + goto out; + } + + /* name to describe the test */ + appendPQExpBuffer(testname, ">"); + escapify(testname, tv->escape, tv->escape_len); + appendPQExpBuffer(testname, "< - %s - %s", + tv->client_encoding, ef->name); + + /* details to describe the test, to allow for debugging */ + appendPQExpBuffer(details, "#\t input: %zd bytes: ", + tv->escape_len); + escapify(details, tv->escape, tv->escape_len); + appendPQExpBufferStr(details, "\n"); + appendPQExpBuffer(details, "#\t encoding: %s\n", + tv->client_encoding); + + + /* check encoding of input, to compare with after the test */ + input_encoding_validlen = pg_encoding_verifymbstr(PQclientEncoding(tc->conn), + tv->escape, + tv->escape_len); + input_encoding_valid = input_encoding_validlen == tv->escape_len; + appendPQExpBuffer(details, "#\t input encoding valid: %d\n", + input_encoding_valid); + + input_encoding0_validlen = pg_encoding_verifymbstr(PQclientEncoding(tc->conn), + tv->escape, + strlen(tv->escape)); + input_encoding0_valid = input_encoding0_validlen == strlen(tv->escape); + appendPQExpBuffer(details, "#\t input encoding valid till 0: %d\n", + input_encoding0_valid); + + appendPQExpBuffer(details, "#\t escape func: %s\n", + ef->name); + + if (!input_encoding_valid && ef->supports_only_valid + && !tc->force_unsupported) + goto out; + + + /* call the to-be-tested escape function */ + escape_success = ef->escape(tc->conn, escape_buf, + tv->escape, tv->escape_len, + escape_err); + if (!escape_success) + { + appendPQExpBuffer(details, "#\t escape error: %s\n", + escape_err->data); + } + + if (escape_buf->len > 0) + { + appendPQExpBuffer(details, "#\t escaped string: %zd bytes: ", escape_buf->len); + escapify(details, escape_buf->data, escape_buf->len); + appendPQExpBufferChar(details, '\n'); + + escape_encoding_length = pg_encoding_verifymbstr(PQclientEncoding(tc->conn), + escape_buf->data, + escape_buf->len); + escape_encoding_valid = escape_encoding_length == escape_buf->len; + + appendPQExpBuffer(details, "#\t escape encoding valid: %d\n", + escape_encoding_valid); + } + else + { + escape_encoding_length = 0; + escape_encoding_valid = 1; + } + + /* + * If the test reports errors, and the input was invalidly encoded, + * escaping should fail. One edge-case that we accept for now is that the + * input could have an embedded null byte, which the escape functions will + * just treat as a shorter string. If the encoding error is after the zero + * byte, the output thus won't contain it. + */ + if (ef->reports_errors) + { + bool ok = true; + const char *resdesc = "ok"; + + if (escape_success) + { + if (!input_encoding0_valid) + { + ok = false; + resdesc = "invalid input escaped successfully"; + } + else if (!input_encoding_valid) + resdesc = "invalid input escaped successfully, due to zero byte"; + } + else + { + if (input_encoding0_valid) + { + ok = false; + resdesc = "valid input failed to escape"; + } + else if (input_encoding_valid) + resdesc = "valid input failed to escape, due to zero byte"; + } + + report_result(tc, ok, testname, details, + "input validity vs escape success", + resdesc); + } + + /* + * If the input is invalidly encoded, the output should also be invalidly + * encoded. We accept the same zero-byte edge case as above. + */ + { + bool ok = true; + const char *resdesc = "ok"; + + if (input_encoding0_valid && !input_encoding_valid && escape_encoding_valid) + { + resdesc = "invalid input produced valid output, due to zero byte"; + } + else if (input_encoding0_valid && !escape_encoding_valid) + { + ok = false; + resdesc = "valid input produced invalid output"; + } + else if (!input_encoding0_valid && + (!ef->reports_errors || escape_success) && + escape_encoding_valid) + { + ok = false; + resdesc = "invalid input produced valid output"; + } + + report_result(tc, ok, testname, details, + "input and escaped encoding validity", + resdesc); + } + + /* + * Test psql parsing whenever we get any string back, even if the escape + * function returned a failure. + */ + if (escape_buf->len > 0) + { + test_psql_parse(tc, testname, + escape_buf, details); + } + +out: + destroyPQExpBuffer(escape_err); + destroyPQExpBuffer(details); + destroyPQExpBuffer(testname); + destroyPQExpBuffer(escape_buf); +} + +static void +test_one_vector(pe_test_config *tc, const pe_test_vector *tv) +{ + if (PQsetClientEncoding(tc->conn, tv->client_encoding)) + { + fprintf(stderr, "failed to set encoding to %s:\n%s\n", + tv->client_encoding, PQerrorMessage(tc->conn)); + exit(1); + } + + for (int escoff = 0; escoff < lengthof(pe_test_escape_funcs); escoff++) + { + const pe_test_escape_func *ef = &pe_test_escape_funcs[escoff]; + + test_one_vector_escape(tc, tv, ef); + } +} + +static void +usage(const char *hint) +{ + if (hint) + fprintf(stderr, "Error: %s\n\n", hint); + + printf("PostgreSQL escape function test\n" + "\n" + "Usage:\n" + " test_escape --conninfo=CONNINFO [OPTIONS]\n" + "\n" + "Options:\n" + " -h, --help show this help\n" + " -c, --conninfo=CONNINFO connection information to use\n" + " -v, --verbose show test details even for successes\n" + " -q, --quiet only show failures\n" + " --force-unsupported test invalid input even if unsupported\n" + ); + + if (hint) + exit(1); +} + +int +main(int argc, char *argv[]) +{ + pe_test_config tc = {0}; + char c; + int option_index; + + static const struct option long_options[] = { + {"help", no_argument, NULL, 'h'}, + {"conninfo", required_argument, NULL, 'c'}, + {"verbose", no_argument, NULL, 'v'}, + {"quiet", no_argument, NULL, 'q'}, + {"force-unsupported", no_argument, NULL, 'f'}, + {NULL, 0, NULL, 0}, + }; + + while ((c = getopt_long(argc, argv, "vqh", long_options, &option_index)) != -1) + { + switch (c) + { + case 'h': + usage(NULL); + exit(0); + break; + case 'c': + tc.conninfo = optarg; + break; + case 'v': + tc.verbosity++; + break; + case 'q': + tc.verbosity--; + break; + case 'f': + tc.force_unsupported = true; + break; + } + } + + if (argc - optind >= 1) + usage("unused option(s) specified"); + + if (tc.conninfo == NULL) + usage("--conninfo needs to be specified"); + + tc.conn = PQconnectdb(tc.conninfo); + + if (!tc.conn || PQstatus(tc.conn) != CONNECTION_OK) + { + fprintf(stderr, "could not connect: %s\n", + PQerrorMessage(tc.conn)); + exit(1); + } + + for (int i = 0; i < lengthof(pe_test_vectors); i++) + { + test_one_vector(&tc, &pe_test_vectors[i]); + } + + PQfinish(tc.conn); + + printf("# %d failures\n", tc.failure_count); + printf("1..%d\n", tc.test_count); + return tc.failure_count > 0; +} diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm index 57cd0d39812..43880a0a34c 100644 --- a/src/tools/msvc/Mkvcbuild.pm +++ b/src/tools/msvc/Mkvcbuild.pm @@ -54,7 +54,8 @@ my @contrib_excludes = ( 'pgcrypto', 'sepgsql', 'brin', 'test_extensions', 'test_misc', 'test_pg_dump', - 'snapshot_too_old', 'unsafe_tests'); + 'snapshot_too_old', 'unsafe_tests', + 'test_escape'); # Set of variables for frontend modules my $frontend_defines = { 'initdb' => 'FRONTEND' }; diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index fd1a1a7da65..1d615493deb 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -3323,6 +3323,9 @@ parallel_worker_main_type parse_error_callback_arg parser_context partition_method_t +pe_test_config +pe_test_escape_func +pe_test_vector pendingPosition pgParameterStatus pg_atomic_flag From 17b789469106e156f559fcdab0c720db3c38151a Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Mon, 10 Feb 2025 10:03:40 -0500 Subject: [PATCH 86/90] docs: EUC_TW can be up to four bytes wide, not three Backpatch-through: 13 Security: CVE-2025-1094 --- doc/src/sgml/charset.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/sgml/charset.sgml b/doc/src/sgml/charset.sgml index ce89c5aa46b..afc0b989b5b 100644 --- a/doc/src/sgml/charset.sgml +++ b/doc/src/sgml/charset.sgml @@ -1065,7 +1065,7 @@ CREATE COLLATION ignore_accents (provider = icu, locale = 'und-u-ks-level1-kc-tr Traditional Chinese, Taiwanese Yes Yes - 1–3 + 1–4 From 4a6825c762112f085d6ee03bbce8e7abe2bf98e5 Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Mon, 10 Feb 2025 12:09:23 -0500 Subject: [PATCH 87/90] Fix type in test_escape test On machines where char is unsigned this could lead to option parsing looping endlessly. It's also too narrow a type on other hardware. Found via Tom Lane's monitoring of the buildfarm. Reported-by: Tom Lane Security: CVE-2025-1094 Backpatch-through: 13 --- src/test/modules/test_escape/test_escape.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/modules/test_escape/test_escape.c b/src/test/modules/test_escape/test_escape.c index 6654ab1dbe7..3ed70436155 100644 --- a/src/test/modules/test_escape/test_escape.c +++ b/src/test/modules/test_escape/test_escape.c @@ -740,7 +740,7 @@ int main(int argc, char *argv[]) { pe_test_config tc = {0}; - char c; + int c; int option_index; static const struct option long_options[] = { From e1f1b030d7d9fea27a77a335699372e0b222c61a Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 10 Feb 2025 16:30:03 -0500 Subject: [PATCH 88/90] Adapt appendPsqlMetaConnect() to the new fmtId() encoding expectations. We need to tell fmtId() what encoding to assume, but this function doesn't know that. Fortunately we can fix that without changing the function's API, because we can just use SQL_ASCII. That's because database names in connection requests are effectively binary not text: no encoding-aware processing will happen on them. This fixes XversionUpgrade failures seen in the buildfarm. The alternative of having pg_upgrade use setFmtEncoding() is unappetizing, given that it's connecting to multiple databases that may have different encodings. Andres Freund, Noah Misch, Tom Lane Security: CVE-2025-1094 --- src/fe_utils/string_utils.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/fe_utils/string_utils.c b/src/fe_utils/string_utils.c index 9131b471cd5..ba409e63879 100644 --- a/src/fe_utils/string_utils.c +++ b/src/fe_utils/string_utils.c @@ -790,29 +790,38 @@ appendPsqlMetaConnect(PQExpBuffer buf, const char *dbname) } } - appendPQExpBufferStr(buf, "\\connect "); if (complex) { PQExpBufferData connstr; initPQExpBuffer(&connstr); + + /* + * Force the target psql's encoding to SQL_ASCII. We don't really + * know the encoding of the database name, and it doesn't matter as + * long as psql will forward it to the server unchanged. + */ + appendPQExpBufferStr(buf, "\\encoding SQL_ASCII\n"); + appendPQExpBufferStr(buf, "\\connect -reuse-previous=on "); + appendPQExpBufferStr(&connstr, "dbname="); appendConnStrVal(&connstr, dbname); - appendPQExpBufferStr(buf, "-reuse-previous=on "); - /* * As long as the name does not contain a newline, SQL identifier * quoting satisfies the psql meta-command parser. Prefer not to * involve psql-interpreted single quotes, which behaved differently * before PostgreSQL 9.2. */ - appendPQExpBufferStr(buf, fmtId(connstr.data)); + appendPQExpBufferStr(buf, fmtIdEnc(connstr.data, PG_SQL_ASCII)); termPQExpBuffer(&connstr); } else - appendPQExpBufferStr(buf, fmtId(dbname)); + { + appendPQExpBufferStr(buf, "\\connect "); + appendPQExpBufferStr(buf, fmtIdEnc(dbname, PG_SQL_ASCII)); + } appendPQExpBufferChar(buf, '\n'); } From e748064669f40a2dc9cf29b8518902620e47e2db Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 10 Feb 2025 18:16:25 -0500 Subject: [PATCH 89/90] Last-minute updates for release notes. Security: CVE-2025-1094 --- doc/src/sgml/release-14.sgml | 96 ++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index 34f4b610a83..c4a44b59bc2 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -35,6 +35,102 @@ + + Harden PQescapeString and allied functions + against invalidly-encoded input strings (Andres Freund, Noah Misch) + § + § + § + § + § + § + + + + Data-quoting functions supplied by libpq + now fully check the encoding validity of their input. If invalid + characters are detected, they report an error if possible. For the + ones that lack an error return convention, the output string is + adjusted to ensure that the server will report invalid encoding and + no intervening processing will be fooled by bytes that might happen + to match single quote, backslash, etc. + + + + The purpose of this change is to guard against SQL-injection attacks + that are possible if one of these functions is used to quote crafted + input. There is no hazard when the resulting string is sent + directly to a PostgreSQL server (which + would check its encoding anyway), but there is a risk when it is + passed through psql or other client-side + code. Historically such code has not carefully vetted encoding, and + in many cases it's not clear what it should do if it did detect such + a problem. + + + + This fix is effective only if the data-quoting function, the server, + and any intermediate processing agree on the character encoding + that's being used. Applications that insert untrusted input into + SQL commands should take special care to ensure that that's true. + + + + Applications and drivers that quote untrusted input without using + these libpq functions may be at risk of + similar problems. They should first confirm the data is valid in + the encoding expected by the server. + + + + The PostgreSQL Project thanks + Stephen Fewer for reporting this problem. + (CVE-2025-1094) + + + + +