Version in base suite: 17.9-0+deb13u1 Base version: postgresql-17_17.9-0+deb13u1 Target version: postgresql-17_17.10-0+deb13u1 Base file: /srv/ftp-master.debian.org/ftp/pool/main/p/postgresql-17/postgresql-17_17.9-0+deb13u1.dsc Target file: /srv/ftp-master.debian.org/policy/pool/main/p/postgresql-17/postgresql-17_17.10-0+deb13u1.dsc .abi-compliance-history | 9 config/c-compiler.m4 | 46 configure | 137 configure.ac | 6 contrib/basic_archive/basic_archive.c | 15 contrib/hstore_plperl/hstore_plperl.c | 2 contrib/hstore_plpython/hstore_plpython.c | 2 contrib/intarray/_int_bool.c | 82 contrib/ltree/lquery_op.c | 67 contrib/ltree/ltree.h | 10 contrib/ltree/ltree_io.c | 19 contrib/ltree/ltxtquery_io.c | 73 contrib/ltree/ltxtquery_op.c | 11 contrib/pg_stat_statements/pg_stat_statements.c | 22 contrib/postgres_fdw/connection.c | 15 contrib/postgres_fdw/expected/postgres_fdw.out | 76 contrib/postgres_fdw/sql/postgres_fdw.sql | 51 contrib/spi/refint.c | 84 contrib/xml2/expected/xml2.out | 10 contrib/xml2/expected/xml2_1.out | 6 contrib/xml2/sql/xml2.sql | 6 contrib/xml2/xslt_proc.c | 9 debian/changelog | 142 doc/src/sgml/config.sgml | 8 doc/src/sgml/libpq.sgml | 11 doc/src/sgml/logical-replication.sgml | 12 doc/src/sgml/ref/alter_foreign_table.sgml | 8 doc/src/sgml/ref/alter_index.sgml | 5 doc/src/sgml/ref/alter_table.sgml | 4 doc/src/sgml/ref/comment.sgml | 18 doc/src/sgml/ref/create_publication.sgml | 4 doc/src/sgml/ref/create_table.sgml | 5 doc/src/sgml/ref/drop_subscription.sgml | 10 doc/src/sgml/ref/pg_ctl-ref.sgml | 5 doc/src/sgml/ref/pg_walsummary.sgml | 2 doc/src/sgml/release-17.sgml | 1575 ++ meson.build | 21 src/backend/access/gist/gistutil.c | 2 src/backend/access/heap/visibilitymap.c | 17 src/backend/access/transam/multixact.c | 218 src/backend/access/transam/twophase.c | 7 src/backend/access/transam/xlog.c | 16 src/backend/catalog/heap.c | 20 src/backend/catalog/pg_type.c | 2 src/backend/commands/copy.c | 3 src/backend/commands/event_trigger.c | 7 src/backend/commands/foreigncmds.c | 5 src/backend/commands/subscriptioncmds.c | 9 src/backend/commands/tablecmds.c | 13 src/backend/commands/typecmds.c | 7 src/backend/executor/execExprInterp.c | 113 src/backend/executor/nodeAgg.c | 2 src/backend/executor/nodeIncrementalSort.c | 2 src/backend/executor/nodeMemoize.c | 2 src/backend/executor/nodeModifyTable.c | 5 src/backend/executor/nodeSort.c | 2 src/backend/executor/nodeWindowAgg.c | 62 src/backend/jit/llvm/Makefile | 2 src/backend/jit/llvm/SectionMemoryManager.cpp | 19 src/backend/jit/llvm/llvmjit.c | 5 src/backend/jit/llvm/llvmjit_expr.c | 11 src/backend/libpq/auth-scram.c | 8 src/backend/libpq/auth.c | 2 src/backend/libpq/crypt.c | 6 src/backend/optimizer/path/indxpath.c | 20 src/backend/optimizer/plan/analyzejoins.c | 200 src/backend/parser/parse_utilcmd.c | 8 src/backend/po/de.po | 1421 +- src/backend/po/es.po | 4 src/backend/po/ka.po | 6722 +++++----- src/backend/po/ru.po | 1449 +- src/backend/postmaster/postmaster.c | 46 src/backend/postmaster/walsummarizer.c | 4 src/backend/regex/regc_color.c | 17 src/backend/regex/regc_cvec.c | 3 src/backend/regex/regc_nfa.c | 10 src/backend/regex/regcomp.c | 5 src/backend/regex/rege_dfa.c | 23 src/backend/regex/regexec.c | 8 src/backend/replication/logical/applyparallelworker.c | 9 src/backend/replication/logical/slotsync.c | 236 src/backend/replication/walsender.c | 47 src/backend/rewrite/rewriteHandler.c | 134 src/backend/statistics/extended_stats.c | 20 src/backend/storage/file/fd.c | 2 src/backend/storage/freespace/freespace.c | 12 src/backend/storage/ipc/procsignal.c | 4 src/backend/storage/ipc/shmem.c | 36 src/backend/storage/lmgr/proc.c | 6 src/backend/tcop/backend_startup.c | 23 src/backend/tcop/postgres.c | 4 src/backend/tsearch/spell.c | 83 src/backend/tsearch/wparser_def.c | 24 src/backend/utils/activity/pgstat_database.c | 6 src/backend/utils/adt/array_userfuncs.c | 33 src/backend/utils/adt/arrayfuncs.c | 13 src/backend/utils/adt/datum.c | 50 src/backend/utils/adt/formatting.c | 76 src/backend/utils/adt/jsonpath_exec.c | 2 src/backend/utils/adt/multirangetypes.c | 9 src/backend/utils/adt/pg_locale.c | 92 src/backend/utils/adt/selfuncs.c | 18 src/backend/utils/adt/timestamp.c | 14 src/backend/utils/adt/varlena.c | 14 src/backend/utils/adt/xid8funcs.c | 2 src/backend/utils/cache/catcache.c | 21 src/backend/utils/cache/lsyscache.c | 38 src/backend/utils/misc/injection_point.c | 1 src/backend/utils/mmgr/aset.c | 26 src/backend/utils/mmgr/dsa.c | 29 src/backend/utils/mmgr/generation.c | 10 src/backend/utils/mmgr/mcxt.c | 129 src/backend/utils/mmgr/slab.c | 8 src/backend/utils/sort/tuplestore.c | 20 src/bin/initdb/initdb.c | 4 src/bin/pg_basebackup/bbstreamer_file.c | 16 src/bin/pg_basebackup/bbstreamer_gzip.c | 19 src/bin/pg_basebackup/bbstreamer_lz4.c | 41 src/bin/pg_basebackup/bbstreamer_tar.c | 7 src/bin/pg_basebackup/bbstreamer_zstd.c | 21 src/bin/pg_basebackup/pg_createsubscriber.c | 11 src/bin/pg_basebackup/po/ru.po | 36 src/bin/pg_combinebackup/po/ru.po | 44 src/bin/pg_combinebackup/t/011_ib_truncation.pl | 24 src/bin/pg_dump/compress_lz4.c | 13 src/bin/pg_dump/pg_dumpall.c | 49 src/bin/pg_dump/po/de.po | 93 src/bin/pg_dump/po/fr.po | 121 src/bin/pg_dump/po/ru.po | 83 src/bin/pg_rewind/file_ops.c | 23 src/bin/pg_test_fsync/po/ru.po | 2 src/bin/pg_test_timing/pg_test_timing.c | 2 src/bin/pg_test_timing/po/de.po | 6 src/bin/pg_test_timing/po/fr.po | 10 src/bin/pg_test_timing/po/ru.po | 10 src/bin/pg_upgrade/dump.c | 6 src/bin/pg_upgrade/pg_upgrade.h | 1 src/bin/pg_upgrade/po/ru.po | 46 src/bin/pg_upgrade/server.c | 2 src/bin/pg_upgrade/version.c | 31 src/bin/pg_verifybackup/po/ru.po | 46 src/bin/pg_waldump/pg_waldump.c | 2 src/bin/pgbench/pgbench.c | 2 src/common/blkreftable.c | 27 src/common/compression.c | 2 src/common/encnames.c | 13 src/common/fe_memutils.c | 188 src/common/jsonapi.c | 55 src/common/pg_lzcompress.c | 27 src/common/protocol_openssl.c | 8 src/common/psprintf.c | 3 src/common/saslprep.c | 4 src/common/stringinfo.c | 3 src/common/unicode_norm.c | 19 src/include/access/slru.h | 4 src/include/access/visibilitymap.h | 1 src/include/access/xlog.h | 1 src/include/c.h | 10 src/include/common/fe_memutils.h | 40 src/include/common/int.h | 67 src/include/executor/execExpr.h | 4 src/include/jit/SectionMemoryManager.h | 2 src/include/jit/llvmjit_backport.h | 4 src/include/pg_config.h.in | 18 src/include/port.h | 5 src/include/regex/regcustom.h | 2 src/include/regex/regguts.h | 13 src/include/replication/slotsync.h | 7 src/include/storage/proc.h | 2 src/include/storage/procsignal.h | 2 src/include/storage/shmem.h | 2 src/include/utils/lsyscache.h | 1 src/include/utils/memutils.h | 2 src/include/utils/palloc.h | 22 src/interfaces/ecpg/ecpglib/descriptor.c | 12 src/interfaces/ecpg/ecpglib/po/ru.po | 4 src/interfaces/ecpg/ecpglib/prepare.c | 32 src/interfaces/ecpg/pgtypeslib/datetime.c | 4 src/interfaces/ecpg/test/connect/.gitignore | 2 src/interfaces/ecpg/test/connect/Makefile | 3 src/interfaces/ecpg/test/connect/meson.build | 1 src/interfaces/ecpg/test/connect/test6.pgc | 68 src/interfaces/ecpg/test/ecpg_schedule | 1 src/interfaces/ecpg/test/expected/connect-test6.c | 146 src/interfaces/ecpg/test/expected/connect-test6.stderr | 50 src/interfaces/ecpg/test/expected/connect-test6.stdout | 9 src/interfaces/libpq/fe-auth-scram.c | 6 src/interfaces/libpq/fe-exec.c | 60 src/interfaces/libpq/fe-lobj.c | 12 src/interfaces/libpq/fe-print.c | 36 src/interfaces/libpq/fe-protocol3.c | 40 src/interfaces/libpq/libpq-int.h | 6 src/pl/plperl/GNUmakefile | 2 src/pl/plperl/expected/plperl_elog.out | 13 src/pl/plperl/expected/plperl_elog_1.out | 13 src/pl/plperl/expected/plperl_unicode.out | 18 src/pl/plperl/expected/plperl_unicode_1.out | 10 src/pl/plperl/meson.build | 1 src/pl/plperl/sql/plperl_elog.sql | 15 src/pl/plperl/sql/plperl_unicode.sql | 19 src/pl/plpgsql/src/expected/plpgsql_trap.out | 8 src/pl/plpgsql/src/sql/plpgsql_trap.sql | 6 src/pl/plpython/expected/plpython_unicode.out | 13 src/pl/plpython/expected/plpython_unicode_1.out | 12 src/pl/plpython/sql/plpython_unicode.sql | 13 src/pl/tcl/expected/pltcl_unicode.out | 13 src/pl/tcl/expected/pltcl_unicode_1.out | 12 src/pl/tcl/sql/pltcl_unicode.sql | 13 src/port/getopt.c | 2 src/port/getopt_long.c | 2 src/port/meson.build | 1 src/port/path.c | 17 src/port/timingsafe_bcmp.c | 43 src/port/win32setlocale.c | 8 src/test/Makefile | 2 src/test/isolation/expected/insert-conflict-do-update-4.out | 8 src/test/isolation/expected/merge-update.out | 33 src/test/isolation/specs/insert-conflict-do-update-4.spec | 2 src/test/isolation/specs/merge-update.spec | 2 src/test/meson.build | 1 src/test/modules/Makefile | 1 src/test/modules/meson.build | 1 src/test/modules/test_custom_types/.gitignore | 4 src/test/modules/test_custom_types/Makefile | 20 src/test/modules/test_custom_types/README | 9 src/test/modules/test_custom_types/expected/test_custom_types.out | 174 src/test/modules/test_custom_types/meson.build | 33 src/test/modules/test_custom_types/sql/test_custom_types.sql | 104 src/test/modules/test_custom_types/test_custom_types--1.0.sql | 164 src/test/modules/test_custom_types/test_custom_types.c | 182 src/test/modules/test_custom_types/test_custom_types.control | 5 src/test/modules/test_ddl_deparse/Makefile | 1 src/test/modules/test_ddl_deparse/expected/textsearch.out | 5 src/test/modules/test_ddl_deparse/meson.build | 1 src/test/modules/test_ddl_deparse/sql/textsearch.sql | 3 src/test/modules/test_dsa/expected/test_dsa.out | 16 src/test/modules/test_dsa/sql/test_dsa.sql | 7 src/test/modules/test_dsa/test_dsa--1.0.sql | 4 src/test/modules/test_dsa/test_dsa.c | 41 src/test/modules/test_ginpostinglist/test_ginpostinglist.c | 8 src/test/modules/test_tidstore/test_tidstore.c | 16 src/test/perl/PostgreSQL/Test/Cluster.pm | 76 src/test/postmaster/.gitignore | 2 src/test/postmaster/Makefile | 23 src/test/postmaster/README | 27 src/test/postmaster/meson.build | 12 src/test/postmaster/t/004_negotiate.pl | 82 src/test/recovery/t/004_timeline_switch.pl | 9 src/test/recovery/t/009_twophase.pl | 2 src/test/regress/expected/alter_table.out | 10 src/test/regress/expected/collate.icu.utf8.out | 304 src/test/regress/expected/compression_pglz.out | 65 src/test/regress/expected/create_index.out | 14 src/test/regress/expected/create_role.out | 27 src/test/regress/expected/create_table_like.out | 31 src/test/regress/expected/expressions.out | 209 src/test/regress/expected/foreign_data.out | 20 src/test/regress/expected/generated.out | 34 src/test/regress/expected/indexing.out | 105 src/test/regress/expected/join.out | 39 src/test/regress/expected/multirangetypes.out | 19 src/test/regress/expected/prepared_xacts.out | 37 src/test/regress/expected/prepared_xacts_1.out | 269 src/test/regress/expected/stats.out | 18 src/test/regress/expected/tsearch.out | 10 src/test/regress/expected/union.out | 17 src/test/regress/expected/window.out | 91 src/test/regress/parallel_schedule | 7 src/test/regress/pg_regress.c | 2 src/test/regress/regress.c | 66 src/test/regress/sql/alter_table.sql | 8 src/test/regress/sql/collate.icu.utf8.sql | 103 src/test/regress/sql/compression_pglz.sql | 53 src/test/regress/sql/create_index.sql | 4 src/test/regress/sql/create_role.sql | 7 src/test/regress/sql/create_table_like.sql | 26 src/test/regress/sql/expressions.sql | 112 src/test/regress/sql/foreign_data.sql | 12 src/test/regress/sql/generated.sql | 24 src/test/regress/sql/indexing.sql | 59 src/test/regress/sql/join.sql | 23 src/test/regress/sql/multirangetypes.sql | 19 src/test/regress/sql/prepared_xacts.sql | 32 src/test/regress/sql/stats.sql | 8 src/test/regress/sql/tsearch.sql | 8 src/test/regress/sql/union.sql | 4 src/test/regress/sql/window.sql | 26 src/test/subscription/t/030_origin.pl | 35 src/timezone/data/tzdata.zi | 14 src/timezone/strftime.c | 11 src/timezone/zic.c | 2 src/tools/pgindent/typedefs.list | 1 292 files changed, 13158 insertions(+), 6328 deletions(-) dpkg-source: warning: cannot verify inline signature for /srv/release.debian.org/tmp/tmp0rjzhxks/postgresql-17_17.9-0+deb13u1.dsc: no acceptable signature found dpkg-source: warning: cannot verify inline signature for /srv/release.debian.org/tmp/tmp0rjzhxks/postgresql-17_17.10-0+deb13u1.dsc: no acceptable signature found diff -Nru postgresql-17-17.9/.abi-compliance-history postgresql-17-17.10/.abi-compliance-history --- postgresql-17-17.9/.abi-compliance-history 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/.abi-compliance-history 2026-05-11 19:46:41.000000000 +0000 @@ -18,6 +18,15 @@ # Be sure to replace "" with details of your change and # why it is deemed acceptable. +586f4266fb4945f6ea3564b9c1bab093eb74bee4 +# +# Fix ABI break by moving PROCSIG_SLOTSYNC_MESSAGE in ProcSignalReason +# 2026-04-09 15:30:59 +0900 +# +# This commit added PROCSIG_SLOTSYNC_MESSAGE just before the final entry, +# NUM_PROCSIGNALS, in enum ProcSignalReason. This increased the value of +# NUM_PROCSIGNALS, but no affected third-party code is known. + 4dac22aa10d2882c2e6fb465d7c314cc2d8fb754 # # Add file_extend_method=posix_fallocate,write_zeros. diff -Nru postgresql-17-17.9/config/c-compiler.m4 postgresql-17-17.10/config/c-compiler.m4 --- postgresql-17-17.9/config/c-compiler.m4 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/config/c-compiler.m4 2026-05-11 19:46:41.000000000 +0000 @@ -7,10 +7,10 @@ # Select the format archetype to be used by gcc to check printf-type functions. # We prefer "gnu_printf", as that most closely matches the features supported # by src/port/snprintf.c (particularly the %m conversion spec). However, -# on some NetBSD versions, that doesn't work while "__syslog__" does. -# If all else fails, use "printf". +# on clang and on some NetBSD versions, that doesn't work while "__syslog__" +# does. If all else fails, use "printf". AC_DEFUN([PGAC_PRINTF_ARCHETYPE], -[AC_CACHE_CHECK([for printf format archetype], pgac_cv_printf_archetype, +[AC_CACHE_CHECK([for C printf format archetype], pgac_cv_printf_archetype, [pgac_cv_printf_archetype=gnu_printf PGAC_TEST_PRINTF_ARCHETYPE if [[ "$ac_archetype_ok" = no ]]; then @@ -20,8 +20,8 @@ pgac_cv_printf_archetype=printf fi fi]) -AC_DEFINE_UNQUOTED([PG_PRINTF_ATTRIBUTE], [$pgac_cv_printf_archetype], -[Define to best printf format archetype, usually gnu_printf if available.]) +AC_DEFINE_UNQUOTED([PG_C_PRINTF_ATTRIBUTE], [$pgac_cv_printf_archetype], +[Define to best C printf format archetype, usually gnu_printf if available.]) ])# PGAC_PRINTF_ARCHETYPE # Subroutine: test $pgac_cv_printf_archetype, set $ac_archetype_ok to yes or no @@ -92,6 +92,42 @@ ])# PGAC_TYPE_64BIT_INT +# PGAC_CXX_PRINTF_ARCHETYPE +# ------------------------- +# Because we support using gcc as C compiler with clang as C++ compiler, +# we have to be prepared to use different printf archetypes in C++ code. +# So, do the above test all over in C++. +AC_DEFUN([PGAC_CXX_PRINTF_ARCHETYPE], +[AC_CACHE_CHECK([for C++ printf format archetype], pgac_cv_cxx_printf_archetype, +[pgac_cv_cxx_printf_archetype=gnu_printf +PGAC_TEST_CXX_PRINTF_ARCHETYPE +if [[ "$ac_archetype_ok" = no ]]; then + pgac_cv_cxx_printf_archetype=__syslog__ + PGAC_TEST_CXX_PRINTF_ARCHETYPE + if [[ "$ac_archetype_ok" = no ]]; then + pgac_cv_cxx_printf_archetype=printf + fi +fi]) +AC_DEFINE_UNQUOTED([PG_CXX_PRINTF_ATTRIBUTE], [$pgac_cv_cxx_printf_archetype], +[Define to best C++ printf format archetype, usually gnu_printf if available.]) +])# PGAC_CXX_PRINTF_ARCHETYPE + +# Subroutine: test $pgac_cv_cxx_printf_archetype, set $ac_archetype_ok to yes or no +AC_DEFUN([PGAC_TEST_CXX_PRINTF_ARCHETYPE], +[ac_save_cxx_werror_flag=$ac_cxx_werror_flag +ac_cxx_werror_flag=yes +AC_LANG_PUSH(C++) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM( +[extern void pgac_write(int ignore, const char *fmt,...) +__attribute__((format($pgac_cv_cxx_printf_archetype, 2, 3)));], +[pgac_write(0, "error %s: %m", "foo");])], + [ac_archetype_ok=yes], + [ac_archetype_ok=no]) +AC_LANG_POP([]) +ac_cxx_werror_flag=$ac_save_cxx_werror_flag +])# PGAC_TEST_CXX_PRINTF_ARCHETYPE + + # PGAC_TYPE_128BIT_INT # -------------------- # Check if __int128 is a working 128 bit integer type, and if so diff -Nru postgresql-17-17.9/configure postgresql-17-17.10/configure --- postgresql-17-17.9/configure 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/configure 2026-05-11 19:46:41.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for PostgreSQL 17.9. +# Generated by GNU Autoconf 2.69 for PostgreSQL 17.10. # # Report bugs to . # @@ -582,8 +582,8 @@ # Identity of this package. PACKAGE_NAME='PostgreSQL' PACKAGE_TARNAME='postgresql' -PACKAGE_VERSION='17.9' -PACKAGE_STRING='PostgreSQL 17.9' +PACKAGE_VERSION='17.10' +PACKAGE_STRING='PostgreSQL 17.10' PACKAGE_BUGREPORT='pgsql-bugs@lists.postgresql.org' PACKAGE_URL='https://www.postgresql.org/' @@ -1450,7 +1450,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures PostgreSQL 17.9 to adapt to many kinds of systems. +\`configure' configures PostgreSQL 17.10 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1515,7 +1515,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of PostgreSQL 17.9:";; + short | recursive ) echo "Configuration of PostgreSQL 17.10:";; esac cat <<\_ACEOF @@ -1690,7 +1690,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -PostgreSQL configure 17.9 +PostgreSQL configure 17.10 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2443,7 +2443,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by PostgreSQL $as_me 17.9, which was +It was created by PostgreSQL $as_me 17.10, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -14364,8 +14364,8 @@ ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for printf format archetype" >&5 -$as_echo_n "checking for printf format archetype... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C printf format archetype" >&5 +$as_echo_n "checking for C printf format archetype... " >&6; } if ${pgac_cv_printf_archetype+:} false; then : $as_echo_n "(cached) " >&6 else @@ -14425,7 +14425,97 @@ $as_echo "$pgac_cv_printf_archetype" >&6; } cat >>confdefs.h <<_ACEOF -#define PG_PRINTF_ATTRIBUTE $pgac_cv_printf_archetype +#define PG_C_PRINTF_ATTRIBUTE $pgac_cv_printf_archetype +_ACEOF + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ printf format archetype" >&5 +$as_echo_n "checking for C++ printf format archetype... " >&6; } +if ${pgac_cv_cxx_printf_archetype+:} false; then : + $as_echo_n "(cached) " >&6 +else + pgac_cv_cxx_printf_archetype=gnu_printf +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. */ +extern void pgac_write(int ignore, const char *fmt,...) +__attribute__((format($pgac_cv_cxx_printf_archetype, 2, 3))); +int +main () +{ +pgac_write(0, "error %s: %m", "foo"); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_archetype_ok=yes +else + ac_archetype_ok=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 + +if [ "$ac_archetype_ok" = no ]; then + pgac_cv_cxx_printf_archetype=__syslog__ + 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. */ +extern void pgac_write(int ignore, const char *fmt,...) +__attribute__((format($pgac_cv_cxx_printf_archetype, 2, 3))); +int +main () +{ +pgac_write(0, "error %s: %m", "foo"); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_archetype_ok=yes +else + ac_archetype_ok=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 + + if [ "$ac_archetype_ok" = no ]; then + pgac_cv_cxx_printf_archetype=printf + fi +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_cxx_printf_archetype" >&5 +$as_echo "$pgac_cv_cxx_printf_archetype" >&6; } + +cat >>confdefs.h <<_ACEOF +#define PG_CXX_PRINTF_ATTRIBUTE $pgac_cv_cxx_printf_archetype _ACEOF @@ -15788,6 +15878,16 @@ cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRNLEN $ac_have_decl _ACEOF +ac_fn_c_check_decl "$LINENO" "timingsafe_bcmp" "ac_cv_have_decl_timingsafe_bcmp" "$ac_includes_default" +if test "x$ac_cv_have_decl_timingsafe_bcmp" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_TIMINGSAFE_BCMP $ac_have_decl +_ACEOF # We can't use AC_CHECK_FUNCS to detect these functions, because it @@ -15960,6 +16060,19 @@ fi +ac_fn_c_check_func "$LINENO" "timingsafe_bcmp" "ac_cv_func_timingsafe_bcmp" +if test "x$ac_cv_func_timingsafe_bcmp" = xyes; then : + $as_echo "#define HAVE_TIMINGSAFE_BCMP 1" >>confdefs.h + +else + case " $LIBOBJS " in + *" timingsafe_bcmp.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS timingsafe_bcmp.$ac_objext" + ;; +esac + +fi + ac_fn_c_check_func "$LINENO" "pthread_barrier_wait" "ac_cv_func_pthread_barrier_wait" @@ -19866,7 +19979,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by PostgreSQL $as_me 17.9, which was +This file was extended by PostgreSQL $as_me 17.10, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -19937,7 +20050,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -PostgreSQL config.status 17.9 +PostgreSQL config.status 17.10 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -Nru postgresql-17-17.9/configure.ac postgresql-17-17.10/configure.ac --- postgresql-17-17.9/configure.ac 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/configure.ac 2026-05-11 19:46:41.000000000 +0000 @@ -17,7 +17,7 @@ dnl m4_pattern_forbid(^PGAC_)dnl to catch undefined macros -AC_INIT([PostgreSQL], [17.9], [pgsql-bugs@lists.postgresql.org], [], [https://www.postgresql.org/]) +AC_INIT([PostgreSQL], [17.10], [pgsql-bugs@lists.postgresql.org], [], [https://www.postgresql.org/]) m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.69], [], [m4_fatal([Autoconf version 2.69 is required. Untested combinations of 'autoconf' and PostgreSQL versions are not @@ -1631,6 +1631,7 @@ AC_C_BIGENDIAN AC_C_INLINE PGAC_PRINTF_ARCHETYPE +PGAC_CXX_PRINTF_ARCHETYPE PGAC_C_STATIC_ASSERT PGAC_C_TYPEOF PGAC_C_TYPES_COMPATIBLE @@ -1795,7 +1796,7 @@ ]) # fi AC_CHECK_DECLS(fdatasync, [], [], [#include ]) -AC_CHECK_DECLS([strlcat, strlcpy, strnlen]) +AC_CHECK_DECLS([strlcat, strlcpy, strnlen, timingsafe_bcmp]) # We can't use AC_CHECK_FUNCS to detect these functions, because it # won't handle deployment target restrictions on macOS @@ -1817,6 +1818,7 @@ strlcat strlcpy strnlen + timingsafe_bcmp ])) AC_REPLACE_FUNCS(pthread_barrier_wait) diff -Nru postgresql-17-17.9/contrib/basic_archive/basic_archive.c postgresql-17-17.10/contrib/basic_archive/basic_archive.c --- postgresql-17-17.9/contrib/basic_archive/basic_archive.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/contrib/basic_archive/basic_archive.c 2026-05-11 19:46:41.000000000 +0000 @@ -88,13 +88,11 @@ /* * check_archive_directory * - * Checks that the provided archive directory exists. + * Checks that the provided archive directory path isn't too long. */ static bool check_archive_directory(char **newval, void **extra, GucSource source) { - struct stat st; - /* * The default value is an empty string, so we have to accept that value. * Our check_configured callback also checks for this and prevents @@ -113,17 +111,6 @@ return false; } - /* - * Do a basic sanity check that the specified archive directory exists. It - * could be removed at some point in the future, so we still need to be - * prepared for it not to exist in the actual archiving logic. - */ - if (stat(*newval, &st) != 0 || !S_ISDIR(st.st_mode)) - { - GUC_check_errdetail("Specified archive directory does not exist."); - return false; - } - return true; } diff -Nru postgresql-17-17.9/contrib/hstore_plperl/hstore_plperl.c postgresql-17-17.10/contrib/hstore_plperl/hstore_plperl.c --- postgresql-17-17.9/contrib/hstore_plperl/hstore_plperl.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/contrib/hstore_plperl/hstore_plperl.c 2026-05-11 19:46:41.000000000 +0000 @@ -118,7 +118,7 @@ pcount = hv_iterinit(hv); - pairs = palloc(pcount * sizeof(Pairs)); + pairs = palloc_array(Pairs, pcount); i = 0; while ((he = hv_iternext(hv))) diff -Nru postgresql-17-17.9/contrib/hstore_plpython/hstore_plpython.c postgresql-17-17.10/contrib/hstore_plpython/hstore_plpython.c --- postgresql-17-17.9/contrib/hstore_plpython/hstore_plpython.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/contrib/hstore_plpython/hstore_plpython.c 2026-05-11 19:46:41.000000000 +0000 @@ -147,7 +147,7 @@ Py_ssize_t i; Pairs *pairs; - pairs = palloc(pcount * sizeof(*pairs)); + pairs = palloc_array(Pairs, pcount); for (i = 0; i < pcount; i++) { diff -Nru postgresql-17-17.9/contrib/intarray/_int_bool.c postgresql-17-17.10/contrib/intarray/_int_bool.c --- postgresql-17-17.9/contrib/intarray/_int_bool.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/contrib/intarray/_int_bool.c 2026-05-11 19:46:41.000000000 +0000 @@ -435,37 +435,77 @@ PG_RETURN_BOOL(result); } -static void -findoprnd(ITEM *ptr, int32 *pos) +/* + * Recursively fill the "left" fields of an ITEM array that represents + * a valid postfix tree. + * + * state: only needed for error reporting + * ptr: starting element of array + * pos: in/out argument, the array index this call is responsible to fill + * + * At exit, *pos has been decremented to point before the sub-tree whose + * top is the entry-time value of *pos. + * + * Returns true if okay, false if error (the only possible error is + * overflow of a "left" field). + */ +static bool +findoprnd(WORKSTATE *state, ITEM *ptr, int32 *pos) { + int32 mypos; + /* since this function recurses, it could be driven to stack overflow. */ check_stack_depth(); + /* get the position this call is supposed to update */ + mypos = *pos; + Assert(mypos >= 0); + + /* in all cases, we should decrement *pos to advance over this item */ + (*pos)--; + #ifdef BS_DEBUG - elog(DEBUG3, (ptr[*pos].type == OPR) ? - "%d %c" : "%d %d", *pos, ptr[*pos].val); + elog(DEBUG3, (ptr[mypos].type == OPR) ? + "%d %c" : "%d %d", mypos, ptr[mypos].val); #endif - if (ptr[*pos].type == VAL) + + if (ptr[mypos].type == VAL) { - ptr[*pos].left = 0; - (*pos)--; + /* base case: a VAL has no operand, so just set its left to zero */ + ptr[mypos].left = 0; } - else if (ptr[*pos].val == (int32) '!') + else if (ptr[mypos].val == (int32) '!') { - ptr[*pos].left = -1; - (*pos)--; - findoprnd(ptr, pos); + /* unary operator, likewise easy: operand is just before it */ + ptr[mypos].left = -1; + /* recurse to scan operand */ + if (!findoprnd(state, ptr, pos)) + return false; } else { - ITEM *curitem = &ptr[*pos]; - int32 tmp = *pos; + /* binary operator */ + int32 delta; - (*pos)--; - findoprnd(ptr, pos); - curitem->left = *pos - tmp; - findoprnd(ptr, pos); + /* recurse to scan right operand */ + if (!findoprnd(state, ptr, pos)) + return false; + /* we must fill left with offset to left operand's top */ + /* abs(delta) < QUERYTYPEMAXITEMS, so it can't overflow ... */ + delta = *pos - mypos; + /* ... but it might be too large to fit in the 16-bit left field */ + Assert(delta < 0); + if (unlikely(delta < PG_INT16_MIN)) + ereturn(state->escontext, false, + (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), + errmsg("query_int expression is too complex"))); + ptr[mypos].left = (int16) delta; + /* recurse to scan left operand */ + if (!findoprnd(state, ptr, pos)) + return false; } + + return true; } @@ -516,6 +556,7 @@ query->size = state.num; ptr = GETQUERY(query); + /* fill the query array from the data makepol constructed */ for (i = state.num - 1; i >= 0; i--) { ptr[i].type = state.str->type; @@ -525,8 +566,13 @@ state.str = tmp; } + /* now fill the "left" fields */ pos = query->size - 1; - findoprnd(ptr, &pos); + if (!findoprnd(&state, ptr, &pos)) + PG_RETURN_NULL(); + /* if successful, findoprnd should have scanned the whole array */ + Assert(pos == -1); + #ifdef BS_DEBUG initStringInfo(&pbuf); for (i = 0; i < query->size; i++) diff -Nru postgresql-17-17.9/contrib/ltree/lquery_op.c postgresql-17-17.10/contrib/ltree/lquery_op.c --- postgresql-17-17.9/contrib/ltree/lquery_op.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/contrib/ltree/lquery_op.c 2026-05-11 19:46:41.000000000 +0000 @@ -41,8 +41,7 @@ } bool -compare_subnode(ltree_level *t, char *qn, int len, - ltree_prefix_eq_func prefix_eq, bool anyend) +compare_subnode(ltree_level *t, char *qn, int len, bool prefix, bool ci) { char *endt = t->name + t->len; char *endq = qn + len; @@ -57,10 +56,8 @@ isok = false; while ((tn = getlexeme(tn, endt, &lent)) != NULL) { - if ((lent == lenq || (lent > lenq && anyend)) && - (*prefix_eq) (qn, lenq, tn, lent)) + if (ltree_label_match(qn, lenq, tn, lent, prefix, ci)) { - isok = true; break; } @@ -76,31 +73,40 @@ } /* - * Check if 'a' is a prefix of 'b'. + * Check if the label matches the predicate string. If 'prefix' is true, then + * the predicate string is treated as a prefix. If 'ci' is true, then the + * predicate string is case-insensitive (and locale-aware). */ bool -ltree_prefix_eq(const char *a, size_t a_sz, const char *b, size_t b_sz) +ltree_label_match(const char *pred, size_t pred_len, const char *label, + size_t label_len, bool prefix, bool ci) { - if (a_sz > b_sz) - return false; - else - return (strncmp(a, b, a_sz) == 0); -} - -/* - * Case-insensitive check if 'a' is a prefix of 'b'. - */ -bool -ltree_prefix_eq_ci(const char *a, size_t a_sz, const char *b, size_t b_sz) -{ - char *al = str_tolower(a, a_sz, DEFAULT_COLLATION_OID); - char *bl = str_tolower(b, b_sz, DEFAULT_COLLATION_OID); + char *fpred; /* casefolded predicate */ + size_t fpred_len; + char *flabel; /* casefolded label */ + size_t flabel_len; bool res; - res = (strncmp(al, bl, a_sz) == 0); + /* fast path for binary match or binary prefix match */ + if ((pred_len == label_len || (prefix && pred_len < label_len)) && + strncmp(pred, label, pred_len) == 0) + return true; + else if (!ci) + return false; + + fpred = str_tolower(pred, pred_len, DEFAULT_COLLATION_OID); + fpred_len = strlen(fpred); + flabel = str_tolower(label, label_len, DEFAULT_COLLATION_OID); + flabel_len = strlen(flabel); + + if ((fpred_len == flabel_len || (prefix && fpred_len < flabel_len)) && + strncmp(fpred, flabel, fpred_len) == 0) + res = true; + else + res = false; - pfree(al); - pfree(bl); + pfree(fpred); + pfree(flabel); return res; } @@ -125,19 +131,16 @@ for (int i = 0; i < curq->numvar; i++) { - ltree_prefix_eq_func prefix_eq; - - prefix_eq = (curvar->flag & LVAR_INCASE) ? ltree_prefix_eq_ci : ltree_prefix_eq; + bool prefix = (curvar->flag & LVAR_ANYEND); + bool ci = (curvar->flag & LVAR_INCASE); if (curvar->flag & LVAR_SUBLEXEME) { - if (compare_subnode(curt, curvar->name, curvar->len, prefix_eq, - (curvar->flag & LVAR_ANYEND))) + if (compare_subnode(curt, curvar->name, curvar->len, prefix, ci)) return success; } - else if ((curvar->len == curt->len || - (curt->len > curvar->len && (curvar->flag & LVAR_ANYEND))) && - (*prefix_eq) (curvar->name, curvar->len, curt->name, curt->len)) + else if (ltree_label_match(curvar->name, curvar->len, curt->name, + curt->len, prefix, ci)) return success; curvar = LVAR_NEXT(curvar); diff -Nru postgresql-17-17.9/contrib/ltree/ltree.h postgresql-17-17.10/contrib/ltree/ltree.h --- postgresql-17-17.9/contrib/ltree/ltree.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/contrib/ltree/ltree.h 2026-05-11 19:46:41.000000000 +0000 @@ -157,8 +157,6 @@ char data[FLEXIBLE_ARRAY_MEMBER]; } ltxtquery; -typedef bool (*ltree_prefix_eq_func) (const char *, size_t, const char *, size_t); - #define HDRSIZEQT MAXALIGN(VARHDRSZ + sizeof(int32)) #define COMPUTESIZE(size,lenofoperand) ( HDRSIZEQT + (size) * sizeof(ITEM) + (lenofoperand) ) #define LTXTQUERY_TOO_BIG(size,lenofoperand) \ @@ -209,11 +207,11 @@ int ltree_compare(const ltree *a, const ltree *b); bool inner_isparent(const ltree *c, const ltree *p); -bool compare_subnode(ltree_level *t, char *qn, int len, - ltree_prefix_eq_func prefix_eq, bool anyend); +bool compare_subnode(ltree_level *t, char *qn, int len, bool prefix, bool ci); ltree *lca_inner(ltree **a, int len); -bool ltree_prefix_eq(const char *a, size_t a_sz, const char *b, size_t b_sz); -bool ltree_prefix_eq_ci(const char *a, size_t a_sz, const char *b, size_t b_sz); +bool ltree_label_match(const char *pred, size_t pred_len, + const char *label, size_t label_len, + bool prefix, bool ci); /* fmgr macros for ltree objects */ #define DatumGetLtreeP(X) ((ltree *) PG_DETOAST_DATUM(X)) diff -Nru postgresql-17-17.9/contrib/ltree/ltree_io.c postgresql-17-17.10/contrib/ltree/ltree_io.c --- postgresql-17-17.9/contrib/ltree/ltree_io.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/contrib/ltree/ltree_io.c 2026-05-11 19:46:41.000000000 +0000 @@ -7,6 +7,7 @@ #include +#include "common/int.h" #include "crc32.h" #include "libpq/pqformat.h" #include "ltree.h" @@ -345,7 +346,12 @@ lptr++; lptr->start = ptr; state = LQPRS_WAITDELIM; - curqlevel->numvar++; + if (pg_add_u16_overflow(curqlevel->numvar, 1, &curqlevel->numvar)) + ereturn(escontext, NULL, + (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), + errmsg("lquery level has too many variants"), + errdetail("Number of variants exceeds the maximum allowed (%d).", + PG_UINT16_MAX))); } else UNCHAR; @@ -543,7 +549,16 @@ lptr = GETVAR(curqlevel); while (lptr - GETVAR(curqlevel) < curqlevel->numvar) { - cur->totallen += MAXALIGN(LVAR_HDRSIZE + lptr->len); + int newlen = cur->totallen + MAXALIGN(LVAR_HDRSIZE + lptr->len); + + if (newlen > PG_UINT16_MAX) + ereturn(escontext, NULL, + (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), + errmsg("lquery level is too large"), + errdetail("Total size of level exceeds the maximum allowed (%d bytes).", + PG_UINT16_MAX))); + cur->totallen = (uint16) newlen; + lrptr->len = lptr->len; lrptr->flag = lptr->flag; lrptr->val = ltree_crc32_sz(lptr->start, lptr->len); diff -Nru postgresql-17-17.9/contrib/ltree/ltxtquery_io.c postgresql-17-17.10/contrib/ltree/ltxtquery_io.c --- postgresql-17-17.9/contrib/ltree/ltxtquery_io.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/contrib/ltree/ltxtquery_io.c 2026-05-11 19:46:41.000000000 +0000 @@ -294,33 +294,71 @@ return END; } -static void -findoprnd(ITEM *ptr, int32 *pos) +/* + * Recursively fill the "left" fields of an ITEM array that represents + * a valid postfix tree. + * + * state: only needed for error reporting + * ptr: starting element of array + * pos: in/out argument, the array index this call is responsible to fill + * + * At exit, *pos has been incremented to point after the sub-tree whose + * top is the entry-time value of *pos. + * + * Returns true if okay, false if error (the only possible error is + * overflow of a "left" field). + */ +static bool +findoprnd(QPRS_STATE *state, ITEM *ptr, int32 *pos) { + int32 mypos; + /* since this function recurses, it could be driven to stack overflow. */ check_stack_depth(); - if (ptr[*pos].type == VAL || ptr[*pos].type == VALTRUE) + /* get the position this call is supposed to update */ + mypos = *pos; + + /* in all cases, we should increment *pos to advance over this item */ + (*pos)++; + + if (ptr[mypos].type == VAL || ptr[mypos].type == VALTRUE) { - ptr[*pos].left = 0; - (*pos)++; + /* base case: a VAL has no operand, so just set its left to zero */ + ptr[mypos].left = 0; } - else if (ptr[*pos].val == (int32) '!') + else if (ptr[mypos].val == (int32) '!') { - ptr[*pos].left = 1; - (*pos)++; - findoprnd(ptr, pos); + /* unary operator, likewise easy: operand is just after it */ + ptr[mypos].left = 1; + /* recurse to scan operand */ + if (!findoprnd(state, ptr, pos)) + return false; } else { - ITEM *curitem = &ptr[*pos]; - int32 tmp = *pos; + /* binary operator */ + int32 delta; - (*pos)++; - findoprnd(ptr, pos); - curitem->left = *pos - tmp; - findoprnd(ptr, pos); + /* recurse to scan right operand */ + if (!findoprnd(state, ptr, pos)) + return false; + /* we must fill left with offset to left operand's top */ + /* delta can't overflow, see LTXTQUERY_TOO_BIG ... */ + delta = *pos - mypos; + /* ... but it might be too large to fit in the 16-bit left field */ + Assert(delta > 0); + if (unlikely(delta > PG_INT16_MAX)) + ereturn(state->escontext, false, + (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), + errmsg("ltxtquery is too large"))); + ptr[mypos].left = (int16) delta; + /* recurse to scan left operand */ + if (!findoprnd(state, ptr, pos)) + return false; } + + return true; } @@ -396,7 +434,10 @@ /* set left operand's position for every operator */ pos = 0; - findoprnd(ptr, &pos); + if (!findoprnd(&state, ptr, &pos)) + return NULL; + /* if successful, findoprnd should have scanned the whole array */ + Assert(pos == state.num); return query; } diff -Nru postgresql-17-17.9/contrib/ltree/ltxtquery_op.c postgresql-17-17.10/contrib/ltree/ltxtquery_op.c --- postgresql-17-17.9/contrib/ltree/ltxtquery_op.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/contrib/ltree/ltxtquery_op.c 2026-05-11 19:46:41.000000000 +0000 @@ -58,19 +58,18 @@ ltree_level *level = LTREE_FIRST(((CHKVAL *) checkval)->node); int tlen = ((CHKVAL *) checkval)->node->numlevel; char *op = ((CHKVAL *) checkval)->operand + val->distance; - ltree_prefix_eq_func prefix_eq; + bool prefix = (val->flag & LVAR_ANYEND); + bool ci = (val->flag & LVAR_INCASE); - prefix_eq = (val->flag & LVAR_INCASE) ? ltree_prefix_eq_ci : ltree_prefix_eq; while (tlen > 0) { if (val->flag & LVAR_SUBLEXEME) { - if (compare_subnode(level, op, val->length, prefix_eq, (val->flag & LVAR_ANYEND))) + if (compare_subnode(level, op, val->length, prefix, ci)) return true; } - else if ((val->length == level->len || - (level->len > val->length && (val->flag & LVAR_ANYEND))) && - (*prefix_eq) (op, val->length, level->name, level->len)) + else if (ltree_label_match(op, val->length, level->name, level->len, + prefix, ci)) return true; tlen--; diff -Nru postgresql-17-17.9/contrib/pg_stat_statements/pg_stat_statements.c postgresql-17-17.10/contrib/pg_stat_statements/pg_stat_statements.c --- postgresql-17-17.9/contrib/pg_stat_statements/pg_stat_statements.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/contrib/pg_stat_statements/pg_stat_statements.c 2026-05-11 19:46:41.000000000 +0000 @@ -791,7 +791,7 @@ if (fwrite(&pgss->stats, sizeof(pgssGlobalStats), 1, file) != 1) goto error; - free(qbuffer); + pfree(qbuffer); qbuffer = NULL; if (FreeFile(file)) @@ -815,7 +815,8 @@ (errcode_for_file_access(), errmsg("could not write file \"%s\": %m", PGSS_DUMP_FILE ".tmp"))); - free(qbuffer); + if (qbuffer) + pfree(qbuffer); if (file) FreeFile(file); unlink(PGSS_DUMP_FILE ".tmp"); @@ -1761,7 +1762,8 @@ pgss->extent != extent || pgss->gc_count != gc_count) { - free(qbuffer); + if (qbuffer) + pfree(qbuffer); qbuffer = qtext_load_file(&qbuffer_size); } } @@ -1962,7 +1964,8 @@ LWLockRelease(pgss->lock); - free(qbuffer); + if (qbuffer) + pfree(qbuffer); } /* Number of output arguments (columns) for pg_stat_statements_info */ @@ -2269,7 +2272,7 @@ } /* - * Read the external query text file into a malloc'd buffer. + * Read the external query text file into a palloc'd buffer. * * Returns NULL (without throwing an error) if unable to read, eg * file not there or insufficient memory. @@ -2311,7 +2314,7 @@ /* Allocate buffer; beware that off_t might be wider than size_t */ if (stat.st_size <= MaxAllocHugeSize) - buf = (char *) malloc(stat.st_size); + buf = (char *) palloc_extended(stat.st_size, MCXT_ALLOC_HUGE | MCXT_ALLOC_NO_OOM); else buf = NULL; if (buf == NULL) @@ -2350,7 +2353,7 @@ (errcode_for_file_access(), errmsg("could not read file \"%s\": %m", PGSS_TEXT_FILE))); - free(buf); + pfree(buf); CloseTransientFile(fd); return NULL; } @@ -2565,7 +2568,7 @@ else pgss->mean_query_len = ASSUMED_LENGTH_INIT; - free(qbuffer); + pfree(qbuffer); /* * OK, count a garbage collection cycle. (Note: even though we have @@ -2582,7 +2585,8 @@ /* clean up resources */ if (qfile) FreeFile(qfile); - free(qbuffer); + if (qbuffer) + pfree(qbuffer); /* * Since the contents of the external file are now uncertain, mark all diff -Nru postgresql-17-17.9/contrib/postgres_fdw/connection.c postgresql-17-17.10/contrib/postgres_fdw/connection.c --- postgresql-17-17.9/contrib/postgres_fdw/connection.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/contrib/postgres_fdw/connection.c 2026-05-11 19:46:41.000000000 +0000 @@ -596,8 +596,9 @@ } /* - * Return true if the password_required is defined and false for this user - * mapping, otherwise false. The mapping has been pre-validated. + * Check and return the value of password_required, if defined; otherwise, + * return true, which is the default value of it. The mapping has been + * pre-validated. */ static bool UserMappingPasswordRequired(UserMapping *user) @@ -1244,6 +1245,11 @@ * Such connections can't safely be further used. Re-establishing the * connection would change the snapshot and roll back any writes already * performed, so that's not an option, either. Thus, we must abort. + * + * Note: there might be open cursors that use the connection, so even if the + * connection cache entry is marked as such, we will retain it until abort + * cleanup of the main transaction, to ensure such open cursors can safely + * refer to the PGconn for the connection. */ static void pgfdw_reject_incomplete_xact_state_change(ConnCacheEntry *entry) @@ -1254,15 +1260,12 @@ if (entry->conn == NULL || !entry->changing_xact_state) return; - /* make sure this entry is inactive */ - disconnect_pg_server(entry); - /* find server name to be shown in the message below */ server = GetForeignServer(entry->serverid); ereport(ERROR, (errcode(ERRCODE_CONNECTION_EXCEPTION), - errmsg("connection to server \"%s\" was lost", + errmsg("connection to server \"%s\" cannot be used due to abort cleanup failure", server->servername))); } diff -Nru postgresql-17-17.9/contrib/postgres_fdw/expected/postgres_fdw.out postgresql-17-17.10/contrib/postgres_fdw/expected/postgres_fdw.out --- postgresql-17-17.9/contrib/postgres_fdw/expected/postgres_fdw.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/contrib/postgres_fdw/expected/postgres_fdw.out 2026-05-11 19:46:41.000000000 +0000 @@ -12452,3 +12452,79 @@ -- cleanup DROP FOREIGN TABLE analyze_ftable; DROP TABLE analyze_table; +-- =================================================================== +-- test cleanup of failed connections on abort +-- =================================================================== +CREATE VIEW my_backend_pid (pid) AS SELECT pg_backend_pid(); +CREATE FOREIGN TABLE remote_backend_pid (pid int) + SERVER loopback OPTIONS (table_name 'my_backend_pid'); +CREATE FUNCTION wait_for_backend_termination(int) RETURNS void AS $$ + BEGIN + WHILE (SELECT count(*) FROM pg_stat_activity WHERE pid = $1) > 0 + LOOP + PERFORM pg_stat_clear_snapshot(); + END LOOP; + END +$$ LANGUAGE plpgsql; +SET client_min_messages = 'ERROR'; +BEGIN; +DECLARE c CURSOR FOR SELECT * FROM ft1 ORDER BY c1; +SAVEPOINT s; +SELECT pid AS remote_pid FROM remote_backend_pid \gset +SELECT pg_terminate_backend(:remote_pid); + pg_terminate_backend +---------------------- + t +(1 row) + +SELECT wait_for_backend_termination(:remote_pid); + wait_for_backend_termination +------------------------------ + +(1 row) + +ROLLBACK TO SAVEPOINT s; +SELECT pid FROM remote_backend_pid; +ERROR: connection to server "loopback" cannot be used due to abort cleanup failure +ROLLBACK TO SAVEPOINT s; +RELEASE SAVEPOINT s; +FETCH c; +ERROR: no connection to the server +CONTEXT: remote SQL command: DECLARE c1 CURSOR FOR +SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" ORDER BY "C 1" ASC NULLS LAST +ABORT; +BEGIN; +DECLARE c CURSOR FOR SELECT * FROM ft1 ORDER BY c1; +FETCH c; + c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 +----+----+-------------------+------------------------------+--------------------------+----+------------+----- + 1 | 2 | 00001_trig_update | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1 | 1 | foo +(1 row) + +SAVEPOINT s; +SELECT pid AS remote_pid FROM remote_backend_pid \gset +SELECT pg_terminate_backend(:remote_pid); + pg_terminate_backend +---------------------- + t +(1 row) + +SELECT wait_for_backend_termination(:remote_pid); + wait_for_backend_termination +------------------------------ + +(1 row) + +ROLLBACK TO SAVEPOINT s; +SELECT pid FROM remote_backend_pid; +ERROR: connection to server "loopback" cannot be used due to abort cleanup failure +ROLLBACK TO SAVEPOINT s; +RELEASE SAVEPOINT s; +CLOSE c; +ERROR: no connection to the server +CONTEXT: remote SQL command: CLOSE c1 +ABORT; +RESET client_min_messages; +DROP FUNCTION wait_for_backend_termination(int); +DROP FOREIGN TABLE remote_backend_pid; +DROP VIEW my_backend_pid; diff -Nru postgresql-17-17.9/contrib/postgres_fdw/sql/postgres_fdw.sql postgresql-17-17.10/contrib/postgres_fdw/sql/postgres_fdw.sql --- postgresql-17-17.9/contrib/postgres_fdw/sql/postgres_fdw.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/contrib/postgres_fdw/sql/postgres_fdw.sql 2026-05-11 19:46:41.000000000 +0000 @@ -4345,3 +4345,54 @@ -- cleanup DROP FOREIGN TABLE analyze_ftable; DROP TABLE analyze_table; + +-- =================================================================== +-- test cleanup of failed connections on abort +-- =================================================================== + +CREATE VIEW my_backend_pid (pid) AS SELECT pg_backend_pid(); +CREATE FOREIGN TABLE remote_backend_pid (pid int) + SERVER loopback OPTIONS (table_name 'my_backend_pid'); +CREATE FUNCTION wait_for_backend_termination(int) RETURNS void AS $$ + BEGIN + WHILE (SELECT count(*) FROM pg_stat_activity WHERE pid = $1) > 0 + LOOP + PERFORM pg_stat_clear_snapshot(); + END LOOP; + END +$$ LANGUAGE plpgsql; + +SET client_min_messages = 'ERROR'; + +BEGIN; +DECLARE c CURSOR FOR SELECT * FROM ft1 ORDER BY c1; +SAVEPOINT s; +SELECT pid AS remote_pid FROM remote_backend_pid \gset +SELECT pg_terminate_backend(:remote_pid); +SELECT wait_for_backend_termination(:remote_pid); +ROLLBACK TO SAVEPOINT s; +SELECT pid FROM remote_backend_pid; +ROLLBACK TO SAVEPOINT s; +RELEASE SAVEPOINT s; +FETCH c; +ABORT; + +BEGIN; +DECLARE c CURSOR FOR SELECT * FROM ft1 ORDER BY c1; +FETCH c; +SAVEPOINT s; +SELECT pid AS remote_pid FROM remote_backend_pid \gset +SELECT pg_terminate_backend(:remote_pid); +SELECT wait_for_backend_termination(:remote_pid); +ROLLBACK TO SAVEPOINT s; +SELECT pid FROM remote_backend_pid; +ROLLBACK TO SAVEPOINT s; +RELEASE SAVEPOINT s; +CLOSE c; +ABORT; + +RESET client_min_messages; + +DROP FUNCTION wait_for_backend_termination(int); +DROP FOREIGN TABLE remote_backend_pid; +DROP VIEW my_backend_pid; diff -Nru postgresql-17-17.9/contrib/spi/refint.c postgresql-17-17.10/contrib/spi/refint.c --- postgresql-17-17.9/contrib/spi/refint.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/contrib/spi/refint.c 2026-05-11 19:46:41.000000000 +0000 @@ -166,21 +166,24 @@ if (plan->nplans <= 0) { SPIPlanPtr pplan; - char sql[8192]; + StringInfoData sql; + + initStringInfo(&sql); /* * Construct query: SELECT 1 FROM _referenced_relation_ WHERE Pkey1 = * $1 [AND Pkey2 = $2 [...]] */ - snprintf(sql, sizeof(sql), "select 1 from %s where ", relname); - for (i = 0; i < nkeys; i++) + appendStringInfo(&sql, "select 1 from %s where ", relname); + for (i = 1; i <= nkeys; i++) { - snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), "%s = $%d %s", - args[i + nkeys + 1], i + 1, (i < nkeys - 1) ? "and " : ""); + appendStringInfo(&sql, "%s = $%d ", args[i + nkeys], i); + if (i < nkeys) + appendStringInfoString(&sql, "and "); } /* Prepare plan for query */ - pplan = SPI_prepare(sql, nkeys, argtypes); + pplan = SPI_prepare(sql.data, nkeys, argtypes); if (pplan == NULL) /* internal error */ elog(ERROR, "check_primary_key: SPI_prepare returned %s", SPI_result_code_string(SPI_result)); @@ -196,6 +199,8 @@ sizeof(SPIPlanPtr)); *(plan->splan) = pplan; plan->nplans = 1; + + pfree(sql.data); } /* @@ -416,7 +421,6 @@ if (plan->nplans <= 0) { SPIPlanPtr pplan; - char sql[8192]; char **args2 = args; plan->splan = (SPIPlanPtr *) MemoryContextAlloc(TopMemoryContext, @@ -424,6 +428,10 @@ for (r = 0; r < nrefs; r++) { + StringInfoData sql; + + initStringInfo(&sql); + relname = args2[0]; /*--------- @@ -437,8 +445,7 @@ *--------- */ if (action == 'r') - - snprintf(sql, sizeof(sql), "select 1 from %s where ", relname); + appendStringInfo(&sql, "select 1 from %s where ", relname); /*--------- * For 'C'ascade action we construct DELETE query @@ -465,42 +472,23 @@ char *nv; int k; - snprintf(sql, sizeof(sql), "update %s set ", relname); + appendStringInfo(&sql, "update %s set ", relname); for (k = 1; k <= nkeys; k++) { - int is_char_type = 0; - char *type; - fn = SPI_fnumber(tupdesc, args_temp[k - 1]); Assert(fn > 0); /* already checked above */ nv = SPI_getvalue(newtuple, tupdesc, fn); - type = SPI_gettype(tupdesc, fn); - if (strcmp(type, "text") == 0 || - strcmp(type, "varchar") == 0 || - strcmp(type, "char") == 0 || - strcmp(type, "bpchar") == 0 || - strcmp(type, "date") == 0 || - strcmp(type, "timestamp") == 0) - is_char_type = 1; -#ifdef DEBUG_QUERY - elog(DEBUG4, "check_foreign_key Debug value %s type %s %d", - nv, type, is_char_type); -#endif - - /* - * is_char_type =1 i set ' ' for define a new value - */ - snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), - " %s = %s%s%s %s ", - args2[k], (is_char_type > 0) ? "'" : "", - nv, (is_char_type > 0) ? "'" : "", (k < nkeys) ? ", " : ""); + appendStringInfo(&sql, " %s = %s ", + args2[k], quote_literal_cstr(nv)); + if (k < nkeys) + appendStringInfoString(&sql, ", "); } - strcat(sql, " where "); + appendStringInfoString(&sql, " where "); } else /* DELETE */ - snprintf(sql, sizeof(sql), "delete from %s where ", relname); + appendStringInfo(&sql, "delete from %s where ", relname); } /* @@ -511,25 +499,26 @@ */ else if (action == 's') { - snprintf(sql, sizeof(sql), "update %s set ", relname); + appendStringInfo(&sql, "update %s set ", relname); for (i = 1; i <= nkeys; i++) { - snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), - "%s = null%s", - args2[i], (i < nkeys) ? ", " : ""); + appendStringInfo(&sql, "%s = null", args2[i]); + if (i < nkeys) + appendStringInfoString(&sql, ", "); } - strcat(sql, " where "); + appendStringInfoString(&sql, " where "); } /* Construct WHERE qual */ for (i = 1; i <= nkeys; i++) { - snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), "%s = $%d %s", - args2[i], i, (i < nkeys) ? "and " : ""); + appendStringInfo(&sql, "%s = $%d ", args2[i], i); + if (i < nkeys) + appendStringInfoString(&sql, "and "); } /* Prepare plan for query */ - pplan = SPI_prepare(sql, nkeys, argtypes); + pplan = SPI_prepare(sql.data, nkeys, argtypes); if (pplan == NULL) /* internal error */ elog(ERROR, "check_foreign_key: SPI_prepare returned %s", SPI_result_code_string(SPI_result)); @@ -545,11 +534,14 @@ plan->splan[r] = pplan; args2 += nkeys + 1; /* to the next relation */ + +#ifdef DEBUG_QUERY + elog(DEBUG4, "check_foreign_key Debug Query is : %s ", sql.data); +#endif + + pfree(sql.data); } plan->nplans = nrefs; -#ifdef DEBUG_QUERY - elog(DEBUG4, "check_foreign_key Debug Query is : %s ", sql); -#endif } /* diff -Nru postgresql-17-17.9/contrib/xml2/expected/xml2.out postgresql-17-17.10/contrib/xml2/expected/xml2.out --- postgresql-17-17.9/contrib/xml2/expected/xml2.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/contrib/xml2/expected/xml2.out 2026-05-11 19:46:41.000000000 +0000 @@ -222,3 +222,13 @@ $$); ERROR: failed to apply stylesheet +-- empty output +select xslt_process('', +$$ +$$); + xslt_process +-------------- + +(1 row) + diff -Nru postgresql-17-17.9/contrib/xml2/expected/xml2_1.out postgresql-17-17.10/contrib/xml2/expected/xml2_1.out --- postgresql-17-17.9/contrib/xml2/expected/xml2_1.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/contrib/xml2/expected/xml2_1.out 2026-05-11 19:46:41.000000000 +0000 @@ -166,3 +166,9 @@ $$); ERROR: xslt_process() is not available without libxslt +-- empty output +select xslt_process('', +$$ +$$); +ERROR: xslt_process() is not available without libxslt diff -Nru postgresql-17-17.9/contrib/xml2/sql/xml2.sql postgresql-17-17.10/contrib/xml2/sql/xml2.sql --- postgresql-17-17.9/contrib/xml2/sql/xml2.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/contrib/xml2/sql/xml2.sql 2026-05-11 19:46:41.000000000 +0000 @@ -137,3 +137,9 @@ $$); + +-- empty output +select xslt_process('', +$$ +$$); diff -Nru postgresql-17-17.9/contrib/xml2/xslt_proc.c postgresql-17-17.10/contrib/xml2/xslt_proc.c --- postgresql-17-17.9/contrib/xml2/xslt_proc.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/contrib/xml2/xslt_proc.c 2026-05-11 19:46:41.000000000 +0000 @@ -179,7 +179,14 @@ if (resstat < 0) PG_RETURN_NULL(); - result = cstring_to_text_with_len((char *) resstr, reslen); + /* + * If an empty string has been returned, resstr would be NULL. In + * this case, assume that the result is an empty string. + */ + if (reslen == 0) + result = cstring_to_text(""); + else + result = cstring_to_text_with_len((char *) resstr, reslen); if (resstr) xmlFree(resstr); diff -Nru postgresql-17-17.9/debian/changelog postgresql-17-17.10/debian/changelog --- postgresql-17-17.9/debian/changelog 2026-02-24 11:48:56.000000000 +0000 +++ postgresql-17-17.10/debian/changelog 2026-05-11 20:57:44.000000000 +0000 @@ -1,3 +1,145 @@ +postgresql-17 (17.10-0+deb13u1) trixie-security; urgency=medium + + * New upstream version 17.10. + + + Prevent unbounded recursion while processing startup packets + (Michael Paquier) + + A malicious client could crash the connected backend by alternating + rejected SSL and GSS encryption requests indefinitely. + + The PostgreSQL Project thanks Calif.io (in collaboration with Claude and + Anthropic Research) for reporting this problem. (CVE-2026-6479) + + + Fix assorted integer overflows in memory-allocation calculations + (Tom Lane, Nathan Bossart, Heikki Linnakangas) + + Various places were incautious about the possibility of integer overflow + in calculations of how much memory to allocate. Overflow would lead to + allocating a too-small buffer which the caller would then write past the + end of. This would at least trigger server crashes, and probably could + be exploited for arbitrary code execution. In many but by no means all + cases, the hazard exists only in 32-bit builds. + + The PostgreSQL Project thanks Xint Code, Bruce Dang, Sven Klemm, and + Pavel Kohout for reporting these problems. (CVE-2026-6473) + + + Properly quote subscription names in pg_createsubscriber + (Nathan Bossart) + + The given subscription name was inserted into SQL commands without + quoting, so that SQL injection could be achieved in the (perhaps + unlikely) case that the subscription name comes from an untrusted + source. + + The PostgreSQL Project thanks Yu Kunpeng for reporting this problem. + (CVE-2026-6476) + + + Properly quote object names in logical replication origin checks + (Pavel Kohout) + + ALTER SUBSCRIPTION ... REFRESH PUBLICATION interpolated schema and + relation names into SQL commands without quoting them, allowing + execution of arbitrary SQL on the publisher. + + The PostgreSQL Project thanks Pavel Kohout for reporting this problem. + (CVE-2026-6638) + + + Reject over-length options in ts_headline() (Michael Paquier) + + The StartSel, StopSel and FragmentDelimiter strings must not exceed 32Kb + in length, but this was not checked for. An over-length value would + typically crash the server. + + The PostgreSQL Project thanks Xint Code for reporting this problem. + (CVE-2026-6473) + + + Guard against malicious time zone names in timeofday() and pg_strftime() + (Tom Lane) + + A crafted time zone setting could pass % sequences to snprintf(), + potentially causing crashes or disclosure of server memory. Another + path to similar results was to overflow the limited-size output buffer + used by pg_strftime(). + + The PostgreSQL Project thanks Xint Code for reporting this problem. + (CVE-2026-6474) + + + When creating a multirange type, ensure the user has CREATE privilege on + the schema specified for the multirange type (Jelte Fennema-Nio) + + The multirange type can be put into a different schema than its parent + range type, but we neglected to apply the required privilege check when + doing so. + + The PostgreSQL Project thanks Jelte Fennema-Nio for reporting this + problem. (CVE-2026-6472) + + + Use timing-safe string comparisons in authentication code + (Michael Paquier) + + Use timingsafe_bcmp() instead of memcpy() or strcmp() when checking + passwords, hashes, etc. It is not known whether the data dependency of + those functions is usefully exploitable in any of these places, but in + the interests of safety, replace them. + + The PostgreSQL Project thanks Joe Conway for reporting this problem. + (CVE-2026-6478) + + + Mark PQfn() as unsafe, and avoid using it within libpq (Nathan Bossart) + + For a non-integral result type, PQfn() is not passed the size of the + output buffer, so it cannot check that the data returned by the server + will fit. A malicious server could therefore overwrite client memory. + This is unfixable without an API change, so mark the function as + deprecated. Internally to libpq, use a variant version that can apply + the missing check. + + The PostgreSQL Project thanks Yu Kunpeng and Martin Heistermann for + reporting this problem. (CVE-2026-6477) + + + Prevent path traversal in pg_basebackup and pg_rewind (Michael Paquier) + + These applications failed to validate output file paths read from their + input, so that a malicious source could overwrite any file writable by + these applications. Constrain where data can be written by rejecting + paths that are absolute or contain parent-directory references. + + The PostgreSQL Project thanks XlabAI Team of Tencent Xuanwu Lab and + Valery Gubanov for reporting this problem. (CVE-2026-6475) + + + Guard against field overflow within contrib/intarray's query_int type + and contrib/ltree's ltxtquery type (Tom Lane) + + Parsing of these query structures did not check for overflow of 16-bit + fields, so that construction of an invalid query tree was possible. + This can crash the server when executing the query. + + The PostgreSQL Project thanks Xint Code for reporting this problem. + (CVE-2026-6473) + + + Guard against overly long values of contrib/ltree's lquery type + (Michael Paquier) + + Values with more than 64K items caused internal overflows, potentially + resulting in stack smashes or wrong answers. + + The PostgreSQL Project thanks Vergissmeinnicht, A1ex, and Jihe Wang for + reporting this problem. (CVE-2026-6473) + + + Prevent SQL injection and buffer overruns in contrib/spi + (Nathan Bossart) + + check_foreign_key() was insufficiently careful about quoting key values, + and also used fixed-length buffers for constructing queries. While this + module is only meant as example code, it still shouldn't contain such + dangerous errors. + + The PostgreSQL Project thanks Nikolay Samokhvalov for reporting this + problem. (CVE-2026-6637) + + -- Christoph Berg Mon, 11 May 2026 22:57:44 +0200 + postgresql-17 (17.9-0+deb13u1) trixie; urgency=medium * New upstream version 17.9. diff -Nru postgresql-17-17.9/doc/src/sgml/config.sgml postgresql-17-17.10/doc/src/sgml/config.sgml --- postgresql-17-17.9/doc/src/sgml/config.sgml 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/doc/src/sgml/config.sgml 2026-05-11 19:46:41.000000000 +0000 @@ -11978,7 +11978,9 @@ If LLVM has the required functionality, register generated functions with GDB. This makes debugging easier. The default setting is off. - This parameter can only be set at server start. + Only superusers and users with the appropriate SET + privilege can change this parameter at session start, + and it cannot be changed at all within a session. @@ -12029,7 +12031,9 @@ This writes out files to ~/.debug/jit/; the user is responsible for performing cleanup when desired. The default setting is off. - This parameter can only be set at server start. + Only superusers and users with the appropriate SET + privilege can change this parameter at session start, + and it cannot be changed at all within a session. diff -Nru postgresql-17-17.9/doc/src/sgml/libpq.sgml postgresql-17-17.10/doc/src/sgml/libpq.sgml --- postgresql-17-17.9/doc/src/sgml/libpq.sgml 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/doc/src/sgml/libpq.sgml 2026-05-11 19:46:41.000000000 +0000 @@ -6772,15 +6772,20 @@ to send simple function calls to the server. - + - This interface is somewhat obsolete, as one can achieve similar + This interface is unsafe and should not be used. When + result_is_int is set to 0, + PQfn may write data beyond the end of + result_buf, regardless of whether the buffer has + enough space for the requested number of bytes. Furthermore, it is + obsolete, as one can achieve similar performance and greater functionality by setting up a prepared statement to define the function call. Then, executing the statement with binary transmission of parameters and results substitutes for a fast-path function call. - + The function PQfnPQfn diff -Nru postgresql-17-17.9/doc/src/sgml/logical-replication.sgml postgresql-17-17.10/doc/src/sgml/logical-replication.sgml --- postgresql-17-17.9/doc/src/sgml/logical-replication.sgml 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/doc/src/sgml/logical-replication.sgml 2026-05-11 19:46:41.000000000 +0000 @@ -67,7 +67,7 @@ Replicating between PostgreSQL instances on different platforms (for - example Linux to Windows) + example Linux to Windows). @@ -88,7 +88,7 @@ The subscriber database behaves in the same way as any other PostgreSQL instance and can be used as a publisher for other databases by defining its - own publications. When the subscriber is treated as read-only by + own publications. When the subscriber is treated as read-only by an application, there will be no conflicts from a single subscription. On the other hand, if there are other writes done either by an application or by other subscribers to the same set of tables, conflicts can arise. @@ -177,8 +177,8 @@ A subscription is the downstream side of logical replication. The node where a subscription is defined is referred to as the subscriber. A subscription defines the connection - to another database and set of publications (one or more) to which it wants - to subscribe. + to another database and the set of publications (one or more) to which it + wants to subscribe. @@ -982,7 +982,7 @@ - If the subscriber is in a release prior to 15, copy pre-existing data + If the subscriber is in a release prior to 15, copying pre-existing data doesn't use row filters even if they are defined in the publication. This is because old releases can only copy the entire table data. @@ -1831,7 +1831,7 @@ Initial Snapshot - The initial data in existing subscribed tables are snapshotted and + The initial data in existing subscribed tables is snapshotted and copied in a parallel instance of a special kind of apply process. This process will create its own replication slot and copy the existing data. As soon as the copy is finished the table contents will become diff -Nru postgresql-17-17.9/doc/src/sgml/ref/alter_foreign_table.sgml postgresql-17-17.10/doc/src/sgml/ref/alter_foreign_table.sgml --- postgresql-17-17.9/doc/src/sgml/ref/alter_foreign_table.sgml 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/doc/src/sgml/ref/alter_foreign_table.sgml 2026-05-11 19:46:41.000000000 +0000 @@ -32,7 +32,7 @@ where action is one of: - ADD [ COLUMN ] column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ] + ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ] DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ] ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ] ALTER [ COLUMN ] column_name SET DEFAULT expression @@ -67,11 +67,13 @@ - ADD COLUMN + ADD [ COLUMN ] [ IF NOT EXISTS ] This form adds a new column to the foreign table, using the same syntax as CREATE FOREIGN TABLE. + If IF NOT EXISTS is specified and a column already + exists with this name, no error is thrown. Unlike the case when adding a column to a regular table, nothing happens to the underlying storage: this action simply declares that some new column is now accessible through the foreign table. @@ -80,7 +82,7 @@ - DROP COLUMN [ IF EXISTS ] + DROP [ COLUMN ] [ IF EXISTS ] This form drops a column from a foreign table. diff -Nru postgresql-17-17.9/doc/src/sgml/ref/alter_index.sgml postgresql-17-17.10/doc/src/sgml/ref/alter_index.sgml --- postgresql-17-17.9/doc/src/sgml/ref/alter_index.sgml 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/doc/src/sgml/ref/alter_index.sgml 2026-05-11 19:46:41.000000000 +0000 @@ -97,6 +97,11 @@ index cannot be dropped by itself, and will automatically be dropped if its parent index is dropped. + + If the named index is already attached to the altered index, the + command will attempt to validate the parent index if the parent is + currently invalid. + diff -Nru postgresql-17-17.9/doc/src/sgml/ref/alter_table.sgml postgresql-17-17.10/doc/src/sgml/ref/alter_table.sgml --- postgresql-17-17.9/doc/src/sgml/ref/alter_table.sgml 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/doc/src/sgml/ref/alter_table.sgml 2026-05-11 19:46:41.000000000 +0000 @@ -155,7 +155,7 @@ - ADD COLUMN [ IF NOT EXISTS ] + ADD [ COLUMN ] [ IF NOT EXISTS ] This form adds a new column to the table, using the same syntax as @@ -167,7 +167,7 @@ - DROP COLUMN [ IF EXISTS ] + DROP [ COLUMN ] [ IF EXISTS ] This form drops a column from a table. Indexes and diff -Nru postgresql-17-17.9/doc/src/sgml/ref/comment.sgml postgresql-17-17.10/doc/src/sgml/ref/comment.sgml --- postgresql-17-17.9/doc/src/sgml/ref/comment.sgml 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/doc/src/sgml/ref/comment.sgml 2026-05-11 19:46:41.000000000 +0000 @@ -80,14 +80,16 @@ Description - COMMENT stores a comment about a database object. + COMMENT stores, replaces, or removes the comment on a + database object. - Only one comment string is stored for each object, so to modify a comment, - issue a new COMMENT command for the same object. To remove a - comment, write NULL in place of the text string. - Comments are automatically dropped when their object is dropped. + Only one comment string is stored for each object. Issuing a new + COMMENT command for the same object replaces the + existing comment. Specifying NULL or an empty + string ('') removes the comment. Comments are + automatically dropped when their object is dropped. @@ -266,7 +268,8 @@ string_literal - The new comment contents, written as a string literal. + The new comment contents, written as a string literal. An empty string + ('') removes the comment. @@ -275,7 +278,7 @@ NULL - Write NULL to drop the comment. + Write NULL to remove the comment. @@ -362,6 +365,7 @@ COMMENT ON TRIGGER my_trigger ON my_table IS 'Used for RI'; COMMENT ON TYPE complex IS 'Complex number data type'; COMMENT ON VIEW my_view IS 'View of departmental costs'; +COMMENT ON VIEW my_view IS NULL; diff -Nru postgresql-17-17.9/doc/src/sgml/ref/create_publication.sgml postgresql-17-17.10/doc/src/sgml/ref/create_publication.sgml --- postgresql-17-17.9/doc/src/sgml/ref/create_publication.sgml 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/doc/src/sgml/ref/create_publication.sgml 2026-05-11 19:46:41.000000000 +0000 @@ -152,7 +152,7 @@ - When a partitioned table is published via schema level publication, all + When a partitioned table is published via a schema-level publication, all of its existing and future partitions are implicitly considered to be part of the publication, regardless of whether they are from the publication schema or not. So, even operations that are performed directly on a @@ -175,7 +175,7 @@ This parameter determines which DML operations will be published by - the new publication to the subscribers. The value is + the new publication to the subscribers. The value is a comma-separated list of operations. The allowed operations are insert, update, delete, and truncate. diff -Nru postgresql-17-17.9/doc/src/sgml/ref/create_table.sgml postgresql-17-17.10/doc/src/sgml/ref/create_table.sgml --- postgresql-17-17.9/doc/src/sgml/ref/create_table.sgml 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/doc/src/sgml/ref/create_table.sgml 2026-05-11 19:46:41.000000000 +0000 @@ -667,9 +667,10 @@ INCLUDING COMMENTS - Comments for the copied columns, constraints, and indexes will be + Comments for the copied columns, check constraints, + indexes, and extended statistics will be copied. The default behavior is to exclude comments, resulting in - the copied columns and constraints in the new table having no + the corresponding objects in the new table having no comments. diff -Nru postgresql-17-17.9/doc/src/sgml/ref/drop_subscription.sgml postgresql-17-17.10/doc/src/sgml/ref/drop_subscription.sgml --- postgresql-17-17.9/doc/src/sgml/ref/drop_subscription.sgml 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/doc/src/sgml/ref/drop_subscription.sgml 2026-05-11 19:46:41.000000000 +0000 @@ -50,6 +50,16 @@ + IF EXISTS + + + Do not throw an error if the subscription does not exist. A notice is + issued in this case. + + + + + name diff -Nru postgresql-17-17.9/doc/src/sgml/ref/pg_ctl-ref.sgml postgresql-17-17.10/doc/src/sgml/ref/pg_ctl-ref.sgml --- postgresql-17-17.9/doc/src/sgml/ref/pg_ctl-ref.sgml 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/doc/src/sgml/ref/pg_ctl-ref.sgml 2026-05-11 19:46:41.000000000 +0000 @@ -299,8 +299,9 @@ Append the server log output to filename. If the file does not - exist, it is created. The umask is set to 077, - so access to the log file is disallowed to other users by default. + exist, it is created. By default, only the cluster owner can + access the log file. If group access is enabled in the cluster, + users in the same group as the cluster owner can also read it. diff -Nru postgresql-17-17.9/doc/src/sgml/ref/pg_walsummary.sgml postgresql-17-17.10/doc/src/sgml/ref/pg_walsummary.sgml --- postgresql-17-17.9/doc/src/sgml/ref/pg_walsummary.sgml 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/doc/src/sgml/ref/pg_walsummary.sgml 2026-05-11 19:46:41.000000000 +0000 @@ -31,7 +31,7 @@ Description pg_walsummary is used to print the contents of - WAL summary files. These binary files are found with the + WAL summary files. These binary files are found in the pg_wal/summaries subdirectory of the data directory, and can be converted to text using this tool. This is not ordinarily necessary, since WAL summary files primarily exist to support diff -Nru postgresql-17-17.9/doc/src/sgml/release-17.sgml postgresql-17-17.10/doc/src/sgml/release-17.sgml --- postgresql-17-17.9/doc/src/sgml/release-17.sgml 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/doc/src/sgml/release-17.sgml 2026-05-11 19:46:41.000000000 +0000 @@ -1,6 +1,1581 @@ + + Release 17.10 + + + Release date: + 2026-05-14 + + + + This release contains a variety of fixes from 17.9. + For information about new features in major release 17, see + . + + + + Migration to Version 17.10 + + + A dump/restore is not required for those running 17.X. + + + + However, if you are upgrading from a version earlier than 17.6, + see . + + + + + Changes + + + + + + + Prevent unbounded recursion while processing startup packets + (Michael Paquier) + § + § + + + + A malicious client could crash the connected backend by alternating + rejected SSL and GSS encryption requests indefinitely. + + + + The PostgreSQL Project thanks Calif.io + (in collaboration with Claude and Anthropic Research) for reporting + this problem. + (CVE-2026-6479) + + + + + + + Fix assorted integer overflows in memory-allocation calculations + (Tom Lane, Nathan Bossart, Heikki Linnakangas) + § + § + § + § + § + § + § + § + § + § + + + + Various places were incautious about the possibility of integer + overflow in calculations of how much memory to allocate. Overflow + would lead to allocating a too-small buffer which the caller would + then write past the end of. This would at least trigger server + crashes, and probably could be exploited for arbitrary code + execution. In many but by no means all cases, the hazard exists + only in 32-bit builds. + + + + The PostgreSQL Project thanks Xint Code, + Bruce Dang, Sven Klemm, and Pavel Kohout for reporting these problems. + (CVE-2026-6473) + + + + + + + Properly quote subscription names + in pg_createsubscriber (Nathan Bossart) + § + + + + The given subscription name was inserted into SQL commands without + quoting, so that SQL injection could be achieved in the (perhaps + unlikely) case that the subscription name comes from an untrusted + source. + + + + The PostgreSQL Project thanks + Yu Kunpeng for reporting this problem. + (CVE-2026-6476) + + + + + + + Properly quote object names in logical replication origin checks + (Pavel Kohout) + § + + + + ALTER SUBSCRIPTION ... REFRESH PUBLICATION + interpolated schema and relation names into SQL commands without + quoting them, allowing execution of arbitrary SQL on the publisher. + + + + The PostgreSQL Project thanks + Pavel Kohout for reporting this problem. + (CVE-2026-6638) + + + + + + + Reject over-length options in ts_headline() + (Michael Paquier) + § + + + + The StartSel, StopSel + and FragmentDelimiter strings must not exceed + 32Kb in length, but this was not checked for. An over-length value + would typically crash the server. + + + + The PostgreSQL Project thanks + Xint Code for reporting this problem. + (CVE-2026-6473) + + + + + + + Guard against malicious time zone names + in timeofday() + and pg_strftime() (Tom Lane) + § + § + + + + A crafted time zone setting could pass % + sequences to snprintf(), potentially causing + crashes or disclosure of server memory. Another path to similar + results was to overflow the limited-size output buffer used + by pg_strftime(). + + + + The PostgreSQL Project thanks + Xint Code for reporting this problem. + (CVE-2026-6474) + + + + + + + When creating a multirange type, ensure the user + has CREATE privilege on the schema specified for + the multirange type (Jelte Fennema-Nio) + § + + + + The multirange type can be put into a different schema than its + parent range type, but we neglected to apply the required privilege + check when doing so. + + + + The PostgreSQL Project thanks + Jelte Fennema-Nio for reporting this problem. + (CVE-2026-6472) + + + + + + + Use timing-safe string comparisons in authentication code + (Michael Paquier) + § + § + + + + Use timingsafe_bcmp() instead + of memcpy() or strcmp() + when checking passwords, hashes, etc. It is not known whether the + data dependency of those functions is usefully exploitable in any of + these places, but in the interests of safety, replace them. + + + + The PostgreSQL Project thanks + Joe Conway for reporting this problem. + (CVE-2026-6478) + + + + + + + Mark PQfn() as unsafe, and avoid using it + within libpq (Nathan Bossart) + § + + + + For a non-integral result type, PQfn() is not + passed the size of the output buffer, so it cannot check that the + data returned by the server will fit. A malicious server could + therefore overwrite client memory. This is unfixable without an + API change, so mark the function as deprecated. Internally + to libpq, use a variant version that can + apply the missing check. + + + + The PostgreSQL Project thanks + Yu Kunpeng and Martin Heistermann for reporting this problem. + (CVE-2026-6477) + + + + + + + Prevent path traversal in pg_basebackup + and pg_rewind (Michael Paquier) + § + + + + These applications failed to validate output file paths read from + their input, so that a malicious source could overwrite any file + writable by these applications. Constrain where data can be written + by rejecting paths that are absolute or contain parent-directory + references. + + + + The PostgreSQL Project thanks XlabAI Team + of Tencent Xuanwu Lab and Valery Gubanov for reporting this problem. + (CVE-2026-6475) + + + + + + + Guard against field overflow + within contrib/intarray's query_int + type and contrib/ltree's ltxtquery + type (Tom Lane) + § + § + + + + Parsing of these query structures did not check for overflow of + 16-bit fields, so that construction of an invalid query tree was + possible. This can crash the server when executing the query. + + + + The PostgreSQL Project thanks + Xint Code for reporting this problem. + (CVE-2026-6473) + + + + + + + Guard against overly long values + of contrib/ltree's lquery type + (Michael Paquier) + § + + + + Values with more than 64K items caused internal overflows, + potentially resulting in stack smashes or wrong answers. + + + + The PostgreSQL Project thanks + Vergissmeinnicht, A1ex, and Jihe Wang + for reporting this problem. + (CVE-2026-6473) + + + + + + + Prevent SQL injection and buffer overruns + in contrib/spi (Nathan Bossart) + § + + + + check_foreign_key() was insufficiently careful + about quoting key values, and also used fixed-length buffers for + constructing queries. While this module is only meant as example + code, it still shouldn't contain such dangerous errors. + + + + The PostgreSQL Project thanks + Nikolay Samokhvalov for reporting this problem. + (CVE-2026-6637) + + + + + + + Check for nondeterministic collations before assuming that an + equality condition on a collatable type implies uniqueness + (Richard Guo) + § + § + + + + Numerous planner optimizations assume that, for example, at most one + table row can satisfy WHERE x = 'abc' if there is + a unique index on x. However this conclusion is + unsafe in general if the index and the WHERE + clause have different collations attached. It is safe when both + collations are deterministic, because that property essentially + requires that equality of two strings means bitwise equality. But + nondeterministic collations don't act that way, so that optimizing + on the assumption of unique matches can give wrong query answers if + either the WHERE clause or the index has a + nondeterministic collation. + + + + + + + Fix incomplete removal of relation references + in RestrictInfo structs during join removal + (Tom Lane) + § + § + + + + This oversight has been shown to result in planner failures such as + unexpected FULL JOIN is only supported with merge-joinable or + hash-joinable join conditions errors. It may also have + caused failure to consider valid plans in other cases. + + + + + + + Fix incorrect handling of NEW generated columns + in rule actions and rule qualifications (Richard Guo, Dean Rasheed) + § + + + + Previously, such column references would produce NULL + in INSERT cases, or be equivalent to + the OLD value in UPDATE cases. + + + + + + + Fix spurious generated columns are not supported in COPY FROM + WHERE conditions errors (Tom Lane) + § + + + + Use of a system column in a COPY FROM WHERE + condition could sometimes incorrectly report this error. + + + + + + + Correctly report a serialization failure + when MERGE encounters a concurrently-updated + tuple in repeatable-read or serializable mode (Tender Wang) + § + + + + Previously, such cases behaved the same as in lower isolation + levels. + + + + + + + Fix CREATE TABLE ... LIKE ... INCLUDING + STATISTICS for cases where the source table has dropped + column(s) (Julien Tachoires) + § + + + + In such cases, extended statistics objects could be copied + incorrectly, or the command could give an incorrect error. + + + + + + + Allow ALTER INDEX ... ATTACH PARTITION to mark + the parent index valid if appropriate (Sami Imseih) + § + + + + There are edge cases in which a partitioned index might remain + marked as invalid even when all its leaf indexes are valid. This + change provides a mechanism whereby a user can correct such a + situation without resorting to manual catalog updates. + + + + + + + Fix ALTER FOREIGN DATA WRAPPER to not drop the + wrapper object's dependency on its handler function (Jeff Davis) + § + + + + + + + Disallow making a composite type be a member of itself via a + multirange (Heikki Linnakangas) + § + + + + We already forbade such cases when the intermediate type is a + domain, array, composite type, or range; but multiranges were + overlooked. + + + + + + + Fix datum-image comparisons to be insensitive to sign-extension + variations (David Rowley) + § + + + + This fixes some situations that previously led to could not + find memoization table entry errors or wrong query results. + + + + + + + Fix incorrect logic for hashed IN/NOT + IN with non-strict equality operator (Chengpeng Yan) + § + + + + The previous coding could crash or give wrong answers. All built-in + data types have strict equality operators, so that this issue could + only arise with an extension data type. + + + + + + + Truncate overly-long locale-specific numeric symbols + in to_char() (Tom Lane) + § + + + + If a locale specified a currency symbol, thousands separator, or + decimal or sign symbol more than 8 bytes long, a buffer overrun was + possible. No such locales exist in the real world, and it's + impractical for an unprivileged attacker to install a malicious + locale definition underneath a Postgres server; but for safety's + sake check for overlength symbols and truncate if needed. + + + + + + + Prevent buffer overruns when parsing an affix file for + an Ispell dictionary (Tom Lane) + § + § + + + + A corrupt or malicious affix file could crash the server. + This is not considered a security issue because text search + configuration files are presumed trustworthy, but it still seems + worth fixing. + + + + + + + Guard against integer overflow in calculations of frame start and + end positions for window aggregates (Richard Guo) + § + + + + Very large user-specified offsets (close to INT64_MAX) could result + in errors or incorrect query results. + + + + + + + Fix array_agg_array_combine() to combine the + arrays' null bitmaps correctly (Dmytro Astapov) + § + + + + This mistake resulted in sometimes-incorrect output from + parallelized array_agg(anyarray) calculations. + + + + + + + Retry sync_file_range() if it returns error + code EINTR (DaeMyung Kang) + § + + + + + + + Fix incorrect behavior + of pg_stat_reset_single_table_counters() on a + shared catalog (Chao Li) + § + + + + Such cases had a side-effect of resetting the + current database's stat_reset_timestamp, which + was unintended. + + + + + + + Update activity statistics when a parallel apply worker is idle + (Zhijie Hou) + § + + + + Previously, statistics from a recently-completed transaction might + go unreported for long intervals, particularly if the workload is + light. + + + + + + + Fix no relation entry for relid 0 failure while + estimating array lengths in set operations (Tender Wang) + § + + + + + + + Fix buffer overread when pglz_decompress() + receives corrupt input (Andrew Dunstan) + § + + + + It was possible to read a few bytes past the end of the input, which + in very unlucky cases might cause a crash. + + + + + + + Fix incremental JSON parser's handling of numeric tokens that cross + input buffer boundaries (Andrew Dunstan) + § + + + + It was possible to accept an incorrectly-formatted number, leading + to failures later. + + + + + + + Prevent bloating relation visibility maps during restore of an + incremental backup (Robert Haas) + § + + + + Restore could append many blocks of zeroes to a visibility map, due + to incorrect computation of the expected file length. This does not + result in data corruption, but it could waste a substantial amount + of disk space. + + + + + + + Use C collation, not the database's default collation, in catalog + cache lookups on text columns (Jeff Davis) + § + + + + This avoids failures in edge cases such as physical replication + startup, where there is no identified database so that a default + collation cannot be determined. + + + + + + + Prevent stuck slotsync worker processes from blocking promotion of a + standby server (Nisha Moond, Ajin Cherian) + § + § + § + + + + A worker process that was vainly waiting for a response from the + primary would delay promotion for an unreasonable amount of time. + + + + + + + Fix excessive log output from idle slotsync worker processes + (Zhijie Hou) + § + + + + + + + Ensure that tuplestore data structures are internally consistent + even after an error (Tom Lane) + § + + + + The code was previously careless about this, which is fine most of + the time but is problematic for the tuplestore backing + a WITH HOLD cursor. In v15 and before this + leads to easily-reproducible crashes; later branches are not known + to be vulnerable, but it seems best to preserve consistency in all. + + + + + + + Fix premature NULL lag reporting + in pg_stat_replication (Shinya Kato) + § + + + + The lag columns frequently read as NULL even while replication + activity was happening. + + + + + + + Avoid rare flush failure when working with non-WAL-logged GiST + indexes (Tomas Vondra) + § + + + + A non-logged GiST index could nonetheless sometimes + produce xlog flush request n/nnnn + is not satisfied errors, due to incorrect selection of + a fake LSN to represent an insertion point. + + + + + + + Fix underestimate of required size of DSA page maps for odd-size + segments (Paul Bunn) + § + + + + This miscalculation led to out-of-bounds accesses and hence server + crashes. + + + + + + + Fix indexing of oldest-multixact arrays in shared memory + (Yura Sokolov) + § + § + + + + This mistake could cause a prepared-but-not-yet-committed + transaction's row locks to appear invisible to other sessions, or + other visibility issues for the results of such a transaction. + With a very small max_connections setting, memory stomps were also + possible. + + + + + + + Fix possible server crash when processing extended statistics on + expressions of extension data types (Michael Paquier) + § + + + + NULL pointer dereferences were possible if the data type's + typanalyze function does not compute any useful statistics. + No in-core typanalyze function behaves that way, but extensions + could. + + + + + + + Fix minor memory leaks in ICU-based string processing (Jeff Davis) + § + + + + + + + If the startup process fails, properly shut down other child + processes before exiting the postmaster (Ayush Tiwari) + § + + + + The handling of this situation relied on a long-obsolete assumption + that no other postmaster children exist while the startup process is + running, so that immediate postmaster exit is acceptable. + Orphaned children would eventually notice the postmaster's death and + exit on their own, but a cleaner shutdown procedure is desirable. + + + + + + + Fix race condition between WAL replay of checkpoints and multixact + ID creations (Heikki Linnakangas) + § + + + + A standby server following WAL from a primary of an older minor + version could get into a crash-and-restart loop complaining + about could not access status of transaction. + + + + + + + Prevent indefinite wait in shutdown of a walsender process + (Anthonin Bonnefoy) + § + § + + + + At shutdown of a cluster that is publishing logical replication + data, the walsender waits for all pending WAL to be written out. + But it did not correctly request that to happen, so that in some + cases this could become an indefinite wait. + + + + + + + Ensure that changes to tables' free space maps are persisted during + recovery (Alexey Makhmutov) + § + + + + Previously, while WAL replay did update the free space map while + replaying operations that should change it, the map page buffer did + not get marked dirty if checksums are enabled, so that the changes + might never get written out. On a standby server, over time this + would result in a map wildly at variance with the table's actual + contents. While the map is only used as a hint, this condition + could cause significant performance degradation for some period of + time after the standby server is promoted to be active, until most + of the map has been repaired by updates. + + + + + + + Fix crashes in some ecpg functions when + called without any established connection (Shruthi Gowda) + § + + + + + + + Fix assorted bugs in backup decompression and tar-parsing code + (Andrew Dunstan, Tom Lane, Chao Li) + § + § + § + + + + The decompression and tar-file reading code used + in pg_basebackup + and pg_verifybackup mishandled tar-file + padding data, could corrupt LZ4-compressed data in edge cases, + failed to check for some unusual error conditions, failed to exit + after compression/decompression errors (leading to cascading error + reports), and leaked memory. + + + + + + + In pg_dumpall, don't skip + role GRANTs with dangling grantor OIDs + (Tom Lane) + § + + + + Instead, handle such cases by emitting GRANT + without any GRANTED BY clause, as we did before + v16. This avoids losing the grant in foreseeable cases, since + pre-v16 servers didn't prevent dropping the grantor role. Continue + to emit a warning about the missing grantor, but only if the source + server is v16 or later. + + + + + + + In pg_upgrade, take care to use the + correct protocol version when connecting to older source servers + (Jacob Champion) + § + + + + This could be problematic when attempting to upgrade from a pre-2018 + server. + + + + + + + In contrib/basic_archive, allow the archive + directory to be missing at startup (Nathan Bossart) + § + + + + Previously, the setting + of basic_archive.archive_directory was rejected + if it didn't point to an existing directory. This is undesirable + because archiving will be stuck indefinitely, even if the directory + appears later. + + + + + + + Fix contrib/ltree to cope when case-folding + changes a string's byte length (Jeff Davis) + § + + + + Previously, lquery patterns specifying case-insensitive + matching might fail to match labels they should match. + + + + + + + In contrib/pg_stat_statements, don't leak + memory if an error occurs while parsing the + pgss_query_texts.stat file (Heikki Linnakangas) + § + + + + + + + In contrib/postgres_fdw, avoid crash due to + premature cleanup of a failed connection (Etsuro Fujita) + § + + + + If a remote connection fails abort cleanup, we can't use it any + longer. But delay closing the connection object until end of + transaction, because there might still be references to it within + data structures such as open cursors. + + + + + + + Update time zone data files to tzdata + release 2026b (Tom Lane) + § + + + + British Columbia (America/Vancouver) will be on year-round UTC-07 + (effectively, permanent DST) beginning in November 2026. This + release assumes that their TZ abbreviation will + be MST from that time forward. That seems likely + to change, but it's unclear what new abbreviation will be used. + Also a historical correction for Moldova: they have followed EU DST + transition times since 2022. + + + + + + + + Release 17.9 diff -Nru postgresql-17-17.9/meson.build postgresql-17-17.10/meson.build --- postgresql-17-17.9/meson.build 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/meson.build 2026-05-11 19:46:41.000000000 +0000 @@ -8,7 +8,7 @@ project('postgresql', ['c'], - version: '17.9', + version: '17.10', license: 'PostgreSQL', # We want < 0.56 for python 3.5 compatibility on old platforms. EPEL for @@ -1806,6 +1806,8 @@ endif +# Select the format archetype to be used to check printf-type functions. +# # Need to check a call with %m because netbsd supports gnu_printf but emits a # warning for each use of %m. printf_attributes = ['gnu_printf', '__syslog__', 'printf'] @@ -1820,11 +1822,24 @@ foreach a : printf_attributes if cc.compiles(testsrc.format(a), args: test_c_args + attrib_error_args, name: 'format ' + a) - cdata.set('PG_PRINTF_ATTRIBUTE', a) + cdata.set('PG_C_PRINTF_ATTRIBUTE', a) break endif endforeach +# We need to repeat the test for C++ because gcc and clang prefer different +# format archetypes. +if llvm.found() + attrib_error_args = cpp.get_supported_arguments('-Werror=format', '-Werror=ignored-attributes') + foreach a : printf_attributes + if cpp.compiles(testsrc.format(a), + args: attrib_error_args, name: 'cppformat ' + a) + cdata.set('PG_CXX_PRINTF_ATTRIBUTE', a) + break + endif + endforeach +endif + if cc.has_function_attribute('visibility:default') and \ cc.has_function_attribute('visibility:hidden') @@ -2469,6 +2484,7 @@ ['strlcat', 'string.h'], ['strlcpy', 'string.h'], ['strnlen', 'string.h'], + ['timingsafe_bcmp', 'string.h'], ] # Need to check for function declarations for these functions, because @@ -2757,6 +2773,7 @@ ['strsignal'], ['sync_file_range'], ['syncfs'], + ['timingsafe_bcmp'], ['uselocale'], ['wcstombs_l'], ] diff -Nru postgresql-17-17.9/src/backend/access/gist/gistutil.c postgresql-17-17.10/src/backend/access/gist/gistutil.c --- postgresql-17-17.9/src/backend/access/gist/gistutil.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/access/gist/gistutil.c 2026-05-11 19:46:41.000000000 +0000 @@ -1033,7 +1033,7 @@ * last call. */ static XLogRecPtr lastlsn = InvalidXLogRecPtr; - XLogRecPtr currlsn = GetXLogInsertRecPtr(); + XLogRecPtr currlsn = GetXLogInsertEndRecPtr(); /* Shouldn't be called for WAL-logging relations */ Assert(!RelationNeedsWAL(rel)); diff -Nru postgresql-17-17.9/src/backend/access/heap/visibilitymap.c postgresql-17-17.10/src/backend/access/heap/visibilitymap.c --- postgresql-17-17.9/src/backend/access/heap/visibilitymap.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/access/heap/visibilitymap.c 2026-05-11 19:46:41.000000000 +0000 @@ -115,6 +115,8 @@ /* Mapping from heap block number to the right bit in the visibility map */ #define HEAPBLK_TO_MAPBLOCK(x) ((x) / HEAPBLOCKS_PER_PAGE) +#define HEAPBLK_TO_MAPBLOCK_LIMIT(x) \ + (((x) + HEAPBLOCKS_PER_PAGE - 1) / HEAPBLOCKS_PER_PAGE) #define HEAPBLK_TO_MAPBYTE(x) (((x) % HEAPBLOCKS_PER_PAGE) / HEAPBLOCKS_PER_BYTE) #define HEAPBLK_TO_OFFSET(x) (((x) % HEAPBLOCKS_PER_BYTE) * BITS_PER_HEAPBLOCK) @@ -529,6 +531,21 @@ } /* + * visibilitymap_truncation_length - + * compute truncation length for visibility map + * + * Given a proposed truncation length for the main fork, compute the + * correct truncation length for the visibility map. Should return the + * same answer as visibilitymap_prepare_truncate(), but without modifying + * anything. + */ +BlockNumber +visibilitymap_truncation_length(BlockNumber nheapblocks) +{ + return HEAPBLK_TO_MAPBLOCK_LIMIT(nheapblocks); +} + +/* * Read a visibility map page. * * If the page doesn't exist, InvalidBuffer is returned, or if 'extend' is diff -Nru postgresql-17-17.9/src/backend/access/transam/multixact.c postgresql-17-17.10/src/backend/access/transam/multixact.c --- postgresql-17-17.9/src/backend/access/transam/multixact.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/access/transam/multixact.c 2026-05-11 19:46:41.000000000 +0000 @@ -276,12 +276,7 @@ /* * Per-backend data starts here. We have two arrays stored in the area - * immediately following the MultiXactStateData struct. Each is indexed by - * ProcNumber. - * - * In both arrays, there's a slot for all normal backends - * (0..MaxBackends-1) followed by a slot for max_prepared_xacts prepared - * transactions. + * immediately following the MultiXactStateData struct: * * OldestMemberMXactId[k] is the oldest MultiXactId each backend's current * transaction(s) could possibly be a member of, or InvalidMultiXactId @@ -293,6 +288,10 @@ * member of a MultiXact, and that MultiXact would have to be created * during or after the lock acquisition.) * + * In the OldestMemberMXactId array, there's a slot for all normal + * backends (0..MaxBackends-1) followed by a slot for max_prepared_xacts + * prepared transactions. + * * OldestVisibleMXactId[k] is the oldest MultiXactId each backend's * current transaction(s) think is potentially live, or InvalidMultiXactId * when not in a transaction or not in a transaction that's paid any @@ -304,6 +303,9 @@ * than its own OldestVisibleMXactId[] setting; this is necessary because * the relevant SLRU data can be concurrently truncated away. * + * In the OldestVisibleMXactId array, there's a slot for all normal + * backends (0..MaxBackends-1) only. No slots for prepared transactions. + * * The oldest valid value among all of the OldestMemberMXactId[] and * OldestVisibleMXactId[] entries is considered by vacuum as the earliest * possible value still having any live member transaction -- OldestMxact. @@ -325,9 +327,10 @@ } MultiXactStateData; /* - * Size of OldestMemberMXactId and OldestVisibleMXactId arrays. + * Sizes of OldestMemberMXactId and OldestVisibleMXactId arrays. */ -#define MaxOldestSlot (MaxBackends + max_prepared_xacts) +#define NumMemberSlots (MaxBackends + max_prepared_xacts) +#define NumVisibleSlots MaxBackends /* Pointers to the state data in shared memory */ static MultiXactStateData *MultiXactState; @@ -335,6 +338,41 @@ static MultiXactId *OldestVisibleMXactId; +static inline MultiXactId * +MyOldestMemberMXactIdSlot(void) +{ + /* + * The first MaxBackends entries in the OldestMemberMXactId array are + * reserved for regular backends. MyProcNumber should index into one of + * them. + */ + Assert(MyProcNumber >= 0 && MyProcNumber < MaxBackends); + return &OldestMemberMXactId[MyProcNumber]; +} + +static inline MultiXactId * +PreparedXactOldestMemberMXactIdSlot(ProcNumber procno) +{ + int prepared_xact_idx; + + Assert(procno >= FIRST_PREPARED_XACT_PROC_NUMBER); + prepared_xact_idx = procno - FIRST_PREPARED_XACT_PROC_NUMBER; + + /* + * The first MaxBackends entries in the OldestMemberMXactId array are + * reserved for regular backends. Prepared xacts come after them. + */ + Assert(MaxBackends + prepared_xact_idx < NumMemberSlots); + return &OldestMemberMXactId[MaxBackends + prepared_xact_idx]; +} + +static inline MultiXactId * +MyOldestVisibleMXactIdSlot(void) +{ + Assert(MyProcNumber >= 0 && MyProcNumber < NumVisibleSlots); + return &OldestVisibleMXactId[MyProcNumber]; +} + /* * Definitions for the backend-local MultiXactId cache. * @@ -378,7 +416,17 @@ #define debug_elog6(a,b,c,d,e,f) #endif -/* hack to deal with WAL generated with older minor versions */ +/* + * Hack to deal with WAL generated with older minor versions. + * + * last_initialized_offsets_page is the XLOG_MULTIXACT_ZERO_OFF_PAGE record + * that we saw during WAL replay, or -1 if we haven't seen any yet. + * + * pre_initialized_offsets_page is the last page that was implicitly + * initialized by replaying a XLOG_MULTIXACT_CREATE_ID record, when we had not + * seen a XLOG_MULTIXACT_ZERO_OFF_PAGE record for the page yet. + */ +static int64 last_initialized_offsets_page = -1; static int64 pre_initialized_offsets_page = -1; /* internal MultiXactId management */ @@ -439,7 +487,7 @@ Assert(!TransactionIdEquals(xid1, xid2) || (status1 != status2)); /* MultiXactIdSetOldestMember() must have been called already. */ - Assert(MultiXactIdIsValid(OldestMemberMXactId[MyProcNumber])); + Assert(MultiXactIdIsValid(*MyOldestMemberMXactIdSlot())); /* * Note: unlike MultiXactIdExpand, we don't bother to check that both XIDs @@ -493,7 +541,7 @@ Assert(TransactionIdIsValid(xid)); /* MultiXactIdSetOldestMember() must have been called already. */ - Assert(MultiXactIdIsValid(OldestMemberMXactId[MyProcNumber])); + Assert(MultiXactIdIsValid(*MyOldestMemberMXactIdSlot())); debug_elog5(DEBUG2, "Expand: received multi %u, xid %u status %s", multi, xid, mxstatus_to_string(status)); @@ -668,7 +716,7 @@ void MultiXactIdSetOldestMember(void) { - if (!MultiXactIdIsValid(OldestMemberMXactId[MyProcNumber])) + if (!MultiXactIdIsValid(*MyOldestMemberMXactIdSlot())) { MultiXactId nextMXact; @@ -697,7 +745,7 @@ if (nextMXact < FirstMultiXactId) nextMXact = FirstMultiXactId; - OldestMemberMXactId[MyProcNumber] = nextMXact; + *MyOldestMemberMXactIdSlot() = nextMXact; LWLockRelease(MultiXactGenLock); @@ -725,7 +773,7 @@ static void MultiXactIdSetOldestVisible(void) { - if (!MultiXactIdIsValid(OldestVisibleMXactId[MyProcNumber])) + if (!MultiXactIdIsValid(*MyOldestVisibleMXactIdSlot())) { MultiXactId oldestMXact; int i; @@ -741,7 +789,7 @@ if (oldestMXact < FirstMultiXactId) oldestMXact = FirstMultiXactId; - for (i = 0; i < MaxOldestSlot; i++) + for (i = 0; i < NumMemberSlots; i++) { MultiXactId thisoldest = OldestMemberMXactId[i]; @@ -750,7 +798,7 @@ oldestMXact = thisoldest; } - OldestVisibleMXactId[MyProcNumber] = oldestMXact; + *MyOldestVisibleMXactIdSlot() = oldestMXact; LWLockRelease(MultiXactGenLock); @@ -938,29 +986,68 @@ * such a version, the next page might not be initialized yet. Initialize * it now. */ - if (InRecovery && - next_pageno != pageno && - pg_atomic_read_u64(&MultiXactOffsetCtl->shared->latest_page_number) == pageno) + if (InRecovery && next_pageno != pageno) { - elog(DEBUG1, "next offsets page is not initialized, initializing it now"); + bool init_needed; - lock = SimpleLruGetBankLock(MultiXactOffsetCtl, next_pageno); - LWLockAcquire(lock, LW_EXCLUSIVE); + /*---------- + * Check if the page exists, and if not, initialize it now. + * + * The straightforward way to check if the page exists is to call + * SimpleLruDoesPhysicalPageExist(). However, there two problems with + * that: + * + * 1. It's somewhat expensive to call on every page switch. + * + * 2. It does not take into account pages that have been initialized + * in the SLRU buffer cache but not yet flushed to disk. For such + * pages, it will incorrectly return false. + * + * To fix both of those problems, if we have replayed any + * XLOG_MULTIXACT_ZERO_OFF_PAGE records, we assume that the last page + * that was zeroed by XLOG_MULTIXACT_ZERO_OFF_PAGE is the last page + * that exists. This works because the XLOG_MULTIXACT_ZERO_OFF_PAGE + * records must appear in the WAL in order, unlike CREATE_ID records. + * We only resort to SimpleLruDoesPhysicalPageExist() if we haven't + * seen any XLOG_MULTIXACT_ZERO_OFF_PAGE records yet, which should + * happen at most once after starting WAL recovery. + * + * As an extra safety measure, if we do resort to + * SimpleLruDoesPhysicalPageExist(), flush the SLRU buffers first so + * that it will return an accurate result. + *---------- + */ + if (last_initialized_offsets_page == -1) + { + SimpleLruWriteAll(MultiXactOffsetCtl, false); + init_needed = !SimpleLruDoesPhysicalPageExist(MultiXactOffsetCtl, next_pageno); + } + else + init_needed = (last_initialized_offsets_page == pageno); - /* Create and zero the page */ - slotno = SimpleLruZeroPage(MultiXactOffsetCtl, next_pageno); + if (init_needed) + { + elog(DEBUG1, "next offsets page is not initialized, initializing it now"); - /* Make sure it's written out */ - SimpleLruWritePage(MultiXactOffsetCtl, slotno); - Assert(!MultiXactOffsetCtl->shared->page_dirty[slotno]); + lock = SimpleLruGetBankLock(MultiXactOffsetCtl, next_pageno); + LWLockAcquire(lock, LW_EXCLUSIVE); - LWLockRelease(lock); + /* Create and zero the page */ + slotno = SimpleLruZeroPage(MultiXactOffsetCtl, next_pageno); - /* - * Remember that we initialized the page, so that we don't zero it - * again at the XLOG_MULTIXACT_ZERO_OFF_PAGE record. - */ - pre_initialized_offsets_page = next_pageno; + /* Make sure it's written out */ + SimpleLruWritePage(MultiXactOffsetCtl, slotno); + Assert(!MultiXactOffsetCtl->shared->page_dirty[slotno]); + + LWLockRelease(lock); + + /* + * Remember that we initialized the page, so that we don't zero it + * again at the XLOG_MULTIXACT_ZERO_OFF_PAGE record. + */ + pre_initialized_offsets_page = next_pageno; + last_initialized_offsets_page = next_pageno; + } } /* @@ -1419,7 +1506,7 @@ * multi. It cannot possibly still be running. */ if (isLockOnly && - MultiXactIdPrecedes(multi, OldestVisibleMXactId[MyProcNumber])) + MultiXactIdPrecedes(multi, *MyOldestVisibleMXactIdSlot())) { debug_elog2(DEBUG2, "GetMembers: a locker-only multi is too old"); *members = NULL; @@ -1871,8 +1958,8 @@ * We assume that storing a MultiXactId is atomic and so we need not take * MultiXactGenLock to do this. */ - OldestMemberMXactId[MyProcNumber] = InvalidMultiXactId; - OldestVisibleMXactId[MyProcNumber] = InvalidMultiXactId; + *MyOldestMemberMXactIdSlot() = InvalidMultiXactId; + *MyOldestVisibleMXactIdSlot() = InvalidMultiXactId; /* * Discard the local MultiXactId cache. Since MXactContext was created as @@ -1892,7 +1979,7 @@ void AtPrepare_MultiXact(void) { - MultiXactId myOldestMember = OldestMemberMXactId[MyProcNumber]; + MultiXactId myOldestMember = *MyOldestMemberMXactIdSlot(); if (MultiXactIdIsValid(myOldestMember)) RegisterTwoPhaseRecord(TWOPHASE_RM_MULTIXACT_ID, 0, @@ -1912,7 +1999,7 @@ * Transfer our OldestMemberMXactId value to the slot reserved for the * prepared transaction. */ - myOldestMember = OldestMemberMXactId[MyProcNumber]; + myOldestMember = *MyOldestMemberMXactIdSlot(); if (MultiXactIdIsValid(myOldestMember)) { ProcNumber dummyProcNumber = TwoPhaseGetDummyProcNumber(xid, false); @@ -1925,8 +2012,8 @@ */ LWLockAcquire(MultiXactGenLock, LW_EXCLUSIVE); - OldestMemberMXactId[dummyProcNumber] = myOldestMember; - OldestMemberMXactId[MyProcNumber] = InvalidMultiXactId; + *PreparedXactOldestMemberMXactIdSlot(dummyProcNumber) = myOldestMember; + *MyOldestMemberMXactIdSlot() = InvalidMultiXactId; LWLockRelease(MultiXactGenLock); } @@ -1939,7 +2026,7 @@ * We assume that storing a MultiXactId is atomic and so we need not take * MultiXactGenLock to do this. */ - OldestVisibleMXactId[MyProcNumber] = InvalidMultiXactId; + *MyOldestVisibleMXactIdSlot() = InvalidMultiXactId; /* * Discard the local MultiXactId cache like in AtEOXact_MultiXact. @@ -1966,7 +2053,7 @@ Assert(len == sizeof(MultiXactId)); oldestMember = *((MultiXactId *) recdata); - OldestMemberMXactId[dummyProcNumber] = oldestMember; + *PreparedXactOldestMemberMXactIdSlot(dummyProcNumber) = oldestMember; } /* @@ -1981,7 +2068,7 @@ Assert(len == sizeof(MultiXactId)); - OldestMemberMXactId[dummyProcNumber] = InvalidMultiXactId; + *PreparedXactOldestMemberMXactIdSlot(dummyProcNumber) = InvalidMultiXactId; } /* @@ -1996,21 +2083,32 @@ } /* - * Initialization of shared memory for MultiXact. We use two SLRU areas, - * thus double memory. Also, reserve space for the shared MultiXactState - * struct and the per-backend MultiXactId arrays (two of those, too). + * Initialization of shared memory for MultiXact. + * + * MultiXactSharedStateShmemSize() calculates the size of the MultiXactState + * struct, and the two per-backend MultiXactId arrays. They are carved out of + * the same allocation. MultiXactShmemSize() additionally includes the memory + * needed for the two SLRU areas. */ +static Size +MultiXactSharedStateShmemSize(void) +{ + Size size; + + size = offsetof(MultiXactStateData, perBackendXactIds); + size = add_size(size, + mul_size(sizeof(MultiXactId), NumMemberSlots)); + size = add_size(size, + mul_size(sizeof(MultiXactId), NumVisibleSlots)); + return size; +} + Size MultiXactShmemSize(void) { Size size; - /* We need 2*MaxOldestSlot perBackendXactIds[] entries */ -#define SHARED_MULTIXACT_STATE_SIZE \ - add_size(offsetof(MultiXactStateData, perBackendXactIds), \ - mul_size(sizeof(MultiXactId) * 2, MaxOldestSlot)) - - size = SHARED_MULTIXACT_STATE_SIZE; + size = MultiXactSharedStateShmemSize(); size = add_size(size, SimpleLruShmemSize(multixact_offset_buffers, 0)); size = add_size(size, SimpleLruShmemSize(multixact_member_buffers, 0)); @@ -2044,14 +2142,14 @@ /* Initialize our shared state struct */ MultiXactState = ShmemInitStruct("Shared MultiXact State", - SHARED_MULTIXACT_STATE_SIZE, + MultiXactSharedStateShmemSize(), &found); if (!IsUnderPostmaster) { Assert(!found); /* Make sure we zero out the per-backend state */ - MemSet(MultiXactState, 0, SHARED_MULTIXACT_STATE_SIZE); + MemSet(MultiXactState, 0, MultiXactSharedStateShmemSize()); } else Assert(found); @@ -2060,7 +2158,7 @@ * Set up array pointers. */ OldestMemberMXactId = MultiXactState->perBackendXactIds; - OldestVisibleMXactId = OldestMemberMXactId + MaxOldestSlot; + OldestVisibleMXactId = OldestMemberMXactId + NumMemberSlots; } /* @@ -2725,7 +2823,6 @@ { MultiXactId oldestMXact; MultiXactId nextMXact; - int i; /* * This is the oldest valid value among all the OldestMemberMXactId[] and @@ -2743,7 +2840,7 @@ nextMXact = FirstMultiXactId; oldestMXact = nextMXact; - for (i = 0; i < MaxOldestSlot; i++) + for (int i = 0; i < NumMemberSlots; i++) { MultiXactId thisoldest; @@ -2751,6 +2848,11 @@ if (MultiXactIdIsValid(thisoldest) && MultiXactIdPrecedes(thisoldest, oldestMXact)) oldestMXact = thisoldest; + } + for (int i = 0; i < NumVisibleSlots; i++) + { + MultiXactId thisoldest; + thisoldest = OldestVisibleMXactId[i]; if (MultiXactIdIsValid(thisoldest) && MultiXactIdPrecedes(thisoldest, oldestMXact)) @@ -3501,6 +3603,8 @@ Assert(!MultiXactOffsetCtl->shared->page_dirty[slotno]); LWLockRelease(lock); + + last_initialized_offsets_page = pageno; } else elog(DEBUG1, "skipping initialization of offsets page " INT64_FORMAT " because it was already initialized on multixid creation", pageno); diff -Nru postgresql-17-17.9/src/backend/access/transam/twophase.c postgresql-17-17.10/src/backend/access/transam/twophase.c --- postgresql-17-17.9/src/backend/access/transam/twophase.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/access/transam/twophase.c 2026-05-11 19:46:41.000000000 +0000 @@ -895,9 +895,10 @@ * Get the dummy proc number for prepared transaction specified by XID * * Dummy proc numbers are similar to proc numbers of real backends. They - * start at MaxBackends, and are unique across all currently active real - * backends and prepared transactions. If lock_held is set to true, - * TwoPhaseStateLock will not be taken, so the caller had better hold it. + * start at FIRST_PREPARED_XACT_PROC_NUMBER, and are unique across all + * currently active real backends and prepared transactions. If lock_held is + * set to true, TwoPhaseStateLock will not be taken, so the caller had better + * hold it. */ ProcNumber TwoPhaseGetDummyProcNumber(TransactionId xid, bool lock_held) diff -Nru postgresql-17-17.9/src/backend/access/transam/xlog.c postgresql-17-17.10/src/backend/access/transam/xlog.c --- postgresql-17-17.9/src/backend/access/transam/xlog.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/access/transam/xlog.c 2026-05-11 19:46:41.000000000 +0000 @@ -9501,6 +9501,22 @@ } /* + * Get latest WAL record end pointer + */ +XLogRecPtr +GetXLogInsertEndRecPtr(void) +{ + XLogCtlInsert *Insert = &XLogCtl->Insert; + uint64 current_bytepos; + + SpinLockAcquire(&Insert->insertpos_lck); + current_bytepos = Insert->CurrBytePos; + SpinLockRelease(&Insert->insertpos_lck); + + return XLogBytePosToEndRecPtr(current_bytepos); +} + +/* * Get latest WAL write pointer */ XLogRecPtr diff -Nru postgresql-17-17.9/src/backend/catalog/heap.c postgresql-17-17.10/src/backend/catalog/heap.c --- postgresql-17-17.9/src/backend/catalog/heap.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/catalog/heap.c 2026-05-11 19:46:41.000000000 +0000 @@ -509,9 +509,13 @@ */ for (i = 0; i < natts; i++) { - CheckAttributeType(NameStr(TupleDescAttr(tupdesc, i)->attname), - TupleDescAttr(tupdesc, i)->atttypid, - TupleDescAttr(tupdesc, i)->attcollation, + Form_pg_attribute attr = TupleDescAttr(tupdesc, i); + + if (attr->attisdropped) + continue; + CheckAttributeType(NameStr(attr->attname), + attr->atttypid, + attr->attcollation, NIL, /* assume we're creating a new rowtype */ flags); } @@ -648,6 +652,16 @@ containing_rowtypes, flags); } + else if (att_typtype == TYPTYPE_MULTIRANGE) + { + /* + * If it's a multirange, recurse to check its plain range type. + */ + CheckAttributeType(attname, get_multirange_range(atttypid), + InvalidOid, /* range types are not collatable */ + containing_rowtypes, + flags); + } else if (OidIsValid((att_typelem = get_element_type(atttypid)))) { /* diff -Nru postgresql-17-17.9/src/backend/catalog/pg_type.c postgresql-17-17.10/src/backend/catalog/pg_type.c --- postgresql-17-17.9/src/backend/catalog/pg_type.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/catalog/pg_type.c 2026-05-11 19:46:41.000000000 +0000 @@ -950,7 +950,7 @@ makeMultirangeTypeName(const char *rangeTypeName, Oid typeNamespace) { char *buf; - char *rangestr; + const char *rangestr; /* * If the range type name contains "range" then change that to diff -Nru postgresql-17-17.9/src/backend/commands/copy.c postgresql-17-17.10/src/backend/commands/copy.c --- postgresql-17-17.9/src/backend/commands/copy.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/commands/copy.c 2026-05-11 19:46:41.000000000 +0000 @@ -174,7 +174,8 @@ * generated columns are not yet computed when the filtering * happens. */ - if (TupleDescAttr(RelationGetDescr(rel), attno - 1)->attgenerated) + if (attno > 0 && + TupleDescAttr(RelationGetDescr(rel), attno - 1)->attgenerated) ereport(ERROR, errcode(ERRCODE_INVALID_COLUMN_REFERENCE), errmsg("generated columns are not supported in COPY FROM WHERE conditions"), diff -Nru postgresql-17-17.9/src/backend/commands/event_trigger.c postgresql-17-17.10/src/backend/commands/event_trigger.c --- postgresql-17-17.9/src/backend/commands/event_trigger.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/commands/event_trigger.c 2026-05-11 19:46:41.000000000 +0000 @@ -2004,8 +2004,11 @@ command->in_extension = creating_extension; ObjectAddressSet(command->d.atscfg.address, TSConfigRelationId, cfgId); - command->d.atscfg.dictIds = palloc(sizeof(Oid) * ndicts); - memcpy(command->d.atscfg.dictIds, dictIds, sizeof(Oid) * ndicts); + if (ndicts > 0) + { + command->d.atscfg.dictIds = palloc_array(Oid, ndicts); + memcpy(command->d.atscfg.dictIds, dictIds, sizeof(Oid) * ndicts); + } command->d.atscfg.ndicts = ndicts; command->parsetree = (Node *) copyObject(stmt); diff -Nru postgresql-17-17.9/src/backend/commands/foreigncmds.c postgresql-17-17.10/src/backend/commands/foreigncmds.c --- postgresql-17-17.9/src/backend/commands/foreigncmds.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/commands/foreigncmds.c 2026-05-11 19:46:41.000000000 +0000 @@ -740,6 +740,11 @@ ereport(WARNING, (errmsg("changing the foreign-data wrapper handler can change behavior of existing foreign tables"))); } + else + { + /* handler unchanged */ + fdwhandler = fdwForm->fdwhandler; + } if (validator_given) { diff -Nru postgresql-17-17.9/src/backend/commands/subscriptioncmds.c postgresql-17-17.10/src/backend/commands/subscriptioncmds.c --- postgresql-17-17.9/src/backend/commands/subscriptioncmds.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/commands/subscriptioncmds.c 2026-05-11 19:46:41.000000000 +0000 @@ -2067,9 +2067,14 @@ Oid relid = subrel_local_oids[i]; char *schemaname = get_namespace_name(get_rel_namespace(relid)); char *tablename = get_rel_name(relid); + char *schemaname_lit = quote_literal_cstr(schemaname); + char *tablename_lit = quote_literal_cstr(tablename); - appendStringInfo(&cmd, "AND NOT (N.nspname = '%s' AND C.relname = '%s')\n", - schemaname, tablename); + appendStringInfo(&cmd, "AND NOT (N.nspname = %s AND C.relname = %s)\n", + schemaname_lit, tablename_lit); + + pfree(schemaname_lit); + pfree(tablename_lit); } res = walrcv_exec(wrconn, cmd.data, 1, tableRow); diff -Nru postgresql-17-17.9/src/backend/commands/tablecmds.c postgresql-17-17.10/src/backend/commands/tablecmds.c --- postgresql-17-17.9/src/backend/commands/tablecmds.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/commands/tablecmds.c 2026-05-11 19:46:41.000000000 +0000 @@ -19899,7 +19899,10 @@ ObjectAddressSet(address, RelationRelationId, RelationGetRelid(partIdx)); - /* Silently do nothing if already in the right state */ + /* + * Check if the index is already attached to the correct parent, + * ultimately attempting one round of validation if already the case. + */ currParent = partIdx->rd_rel->relispartition ? get_partition_parent(partIdxId, false) : InvalidOid; if (currParent != RelationGetRelid(parentIdx)) @@ -20001,6 +20004,14 @@ validatePartitionedIndex(parentIdx, parentTbl); } + else if (!parentIdx->rd_index->indisvalid) + { + /* + * The index is attached, but the parent is still invalid; see if it + * can be validated now. + */ + validatePartitionedIndex(parentIdx, parentTbl); + } relation_close(parentTbl, AccessShareLock); /* keep these locks till commit */ diff -Nru postgresql-17-17.9/src/backend/commands/typecmds.c postgresql-17-17.10/src/backend/commands/typecmds.c --- postgresql-17-17.9/src/backend/commands/typecmds.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/commands/typecmds.c 2026-05-11 19:46:41.000000000 +0000 @@ -1453,6 +1453,13 @@ /* we can look up the subtype name immediately */ multirangeNamespace = QualifiedNameGetCreationNamespace(defGetQualifiedName(defel), &multirangeTypeName); + + /* Check we have creation rights in target namespace */ + aclresult = object_aclcheck(NamespaceRelationId, multirangeNamespace, + GetUserId(), ACL_CREATE); + if (aclresult != ACLCHECK_OK) + aclcheck_error(aclresult, OBJECT_SCHEMA, + get_namespace_name(multirangeNamespace)); } else ereport(ERROR, diff -Nru postgresql-17-17.9/src/backend/executor/execExprInterp.c postgresql-17-17.10/src/backend/executor/execExprInterp.c --- postgresql-17-17.9/src/backend/executor/execExprInterp.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/executor/execExprInterp.c 2026-05-11 19:46:41.000000000 +0000 @@ -170,6 +170,14 @@ static Datum ExecJustAssignScanVarVirt(ExprState *state, ExprContext *econtext, bool *isnull); /* execution helper functions */ +static pg_attribute_always_inline void ExecEvalArrayCompareInternal(FunctionCallInfo fcinfo, + ArrayType *arr, + int16 typlen, + bool typbyval, + char typalign, + bool useOr, + Datum *result, + bool *resultnull); static pg_attribute_always_inline void ExecAggPlainTransByVal(AggState *aggstate, AggStatePerTrans pertrans, AggStatePerGroup pergroup, @@ -3473,12 +3481,6 @@ int nitems; Datum result; bool resultnull; - int16 typlen; - bool typbyval; - char typalign; - char *s; - bits8 *bitmap; - int bitmask; /* * If the array is NULL then we return NULL --- it's not very meaningful @@ -3527,13 +3529,42 @@ op->d.scalararrayop.element_type = ARR_ELEMTYPE(arr); } - typlen = op->d.scalararrayop.typlen; - typbyval = op->d.scalararrayop.typbyval; - typalign = op->d.scalararrayop.typalign; + ExecEvalArrayCompareInternal(fcinfo, + arr, + op->d.scalararrayop.typlen, + op->d.scalararrayop.typbyval, + op->d.scalararrayop.typalign, + useOr, + &result, + &resultnull); + + *op->resvalue = result; + *op->resnull = resultnull; +} + +/* + * Shared helper for ExecEvalScalarArrayOp() and the NULL-LHS fallback for + * non-strict ExecEvalHashedScalarArrayOp(). + * + * Callers must handle the strict LHS-is-NULL; return NULL fast path prior to + * calling this. + */ +static pg_attribute_always_inline void +ExecEvalArrayCompareInternal(FunctionCallInfo fcinfo, ArrayType *arr, + int16 typlen, bool typbyval, char typalign, + bool useOr, Datum *result, bool *resultnull) +{ + int nitems; + char *s; + bits8 *bitmap; + int bitmask; + bool strictfunc = fcinfo->flinfo->fn_strict; + + nitems = ArrayGetNItems(ARR_NDIM(arr), ARR_DIMS(arr)); /* Initialize result appropriately depending on useOr */ - result = BoolGetDatum(!useOr); - resultnull = false; + *result = BoolGetDatum(!useOr); + *resultnull = false; /* Loop over the array elements */ s = (char *) ARR_DATA_PTR(arr); @@ -3569,18 +3600,18 @@ else { fcinfo->isnull = false; - thisresult = op->d.scalararrayop.fn_addr(fcinfo); + thisresult = fcinfo->flinfo->fn_addr(fcinfo); } /* Combine results per OR or AND semantics */ if (fcinfo->isnull) - resultnull = true; + *resultnull = true; else if (useOr) { if (DatumGetBool(thisresult)) { - result = BoolGetDatum(true); - resultnull = false; + *result = BoolGetDatum(true); + *resultnull = false; break; /* needn't look at any more elements */ } } @@ -3588,8 +3619,8 @@ { if (!DatumGetBool(thisresult)) { - result = BoolGetDatum(false); - resultnull = false; + *result = BoolGetDatum(false); + *resultnull = false; break; /* needn't look at any more elements */ } } @@ -3605,9 +3636,6 @@ } } } - - *op->resvalue = result; - *op->resnull = resultnull; } /* @@ -3686,7 +3714,7 @@ * If the scalar is NULL, and the function is strict, return NULL; no * point in executing the search. */ - if (fcinfo->args[0].isnull && strictfunc) + if (scalar_isnull && strictfunc) { *op->resnull = true; return; @@ -3784,8 +3812,51 @@ * non-strict functions with a null lhs value if no match is found. */ op->d.hashedscalararrayop.has_nulls = has_nulls; + + /* + * When we have a non-strict equality function, check and cache the + * result from looking up a NULL. Non-strict functions are free to + * treat a NULL as equal to any other value, e.g. a 0 or an empty + * string. Here we perform a linear search over the array and cache + * the outcome so that we can use that result any time we receive a + * NULL. + */ + if (!strictfunc) + { + bool null_lhs_result; + + fcinfo->args[0].value = (Datum) 0; + fcinfo->args[0].isnull = true; + + ExecEvalArrayCompareInternal(fcinfo, arr, typlen, typbyval, + typalign, true, &result, + &resultnull); + + null_lhs_result = DatumGetBool(result); + + /* invert non-NULL results for NOT IN */ + if (!resultnull && !inclause) + null_lhs_result = !null_lhs_result; + + op->d.hashedscalararrayop.null_lhs_isnull = resultnull; + op->d.hashedscalararrayop.null_lhs_result = null_lhs_result; + } + } + + /* + * When looking up an SQL NULL value with non-strict functions, we defer + * to the value we cached when building the hash table. + */ + if (scalar_isnull) + { + Assert(!strictfunc); + + *op->resnull = op->d.hashedscalararrayop.null_lhs_isnull; + *op->resvalue = BoolGetDatum(op->d.hashedscalararrayop.null_lhs_result); + return; } + /* Check the hash to see if we have a match. */ hashfound = NULL != saophash_lookup(elements_tab->hashtab, scalar); diff -Nru postgresql-17-17.9/src/backend/executor/nodeAgg.c postgresql-17-17.10/src/backend/executor/nodeAgg.c --- postgresql-17-17.9/src/backend/executor/nodeAgg.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/executor/nodeAgg.c 2026-05-11 19:46:41.000000000 +0000 @@ -4317,7 +4317,7 @@ { AggregateInstrumentation *si; - Assert(ParallelWorkerNumber <= node->shared_info->num_workers); + Assert(ParallelWorkerNumber < node->shared_info->num_workers); si = &node->shared_info->sinstrument[ParallelWorkerNumber]; si->hash_batches_used = node->hash_batches_used; si->hash_disk_used = node->hash_disk_used; diff -Nru postgresql-17-17.9/src/backend/executor/nodeIncrementalSort.c postgresql-17-17.10/src/backend/executor/nodeIncrementalSort.c --- postgresql-17-17.9/src/backend/executor/nodeIncrementalSort.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/executor/nodeIncrementalSort.c 2026-05-11 19:46:41.000000000 +0000 @@ -102,7 +102,7 @@ if ((node)->shared_info && (node)->am_worker) \ { \ Assert(IsParallelWorker()); \ - Assert(ParallelWorkerNumber <= (node)->shared_info->num_workers); \ + Assert(ParallelWorkerNumber < (node)->shared_info->num_workers); \ instrumentSortedGroup(&(node)->shared_info->sinfo[ParallelWorkerNumber].groupName##GroupInfo, \ (node)->groupName##_state); \ } \ diff -Nru postgresql-17-17.9/src/backend/executor/nodeMemoize.c postgresql-17-17.10/src/backend/executor/nodeMemoize.c --- postgresql-17-17.9/src/backend/executor/nodeMemoize.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/executor/nodeMemoize.c 2026-05-11 19:46:41.000000000 +0000 @@ -1122,7 +1122,7 @@ if (node->stats.mem_peak == 0) node->stats.mem_peak = node->mem_used; - Assert(ParallelWorkerNumber <= node->shared_info->num_workers); + Assert(ParallelWorkerNumber < node->shared_info->num_workers); si = &node->shared_info->sinstrument[ParallelWorkerNumber]; memcpy(si, &node->stats, sizeof(MemoizeInstrumentation)); } diff -Nru postgresql-17-17.9/src/backend/executor/nodeModifyTable.c postgresql-17-17.10/src/backend/executor/nodeModifyTable.c --- postgresql-17-17.9/src/backend/executor/nodeModifyTable.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/executor/nodeModifyTable.c 2026-05-11 19:46:41.000000000 +0000 @@ -3178,6 +3178,11 @@ *inputslot; LockTupleMode lockmode; + if (IsolationUsesXactSnapshot()) + ereport(ERROR, + (errcode(ERRCODE_T_R_SERIALIZATION_FAILURE), + errmsg("could not serialize access due to concurrent update"))); + /* * The target tuple was concurrently updated by some other * transaction. If we are currently processing a MATCHED diff -Nru postgresql-17-17.9/src/backend/executor/nodeSort.c postgresql-17-17.10/src/backend/executor/nodeSort.c --- postgresql-17-17.9/src/backend/executor/nodeSort.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/executor/nodeSort.c 2026-05-11 19:46:41.000000000 +0000 @@ -175,7 +175,7 @@ TuplesortInstrumentation *si; Assert(IsParallelWorker()); - Assert(ParallelWorkerNumber <= node->shared_info->num_workers); + Assert(ParallelWorkerNumber < node->shared_info->num_workers); si = &node->shared_info->sinstrument[ParallelWorkerNumber]; tuplesort_get_stats(tuplesortstate, si); } diff -Nru postgresql-17-17.9/src/backend/executor/nodeWindowAgg.c postgresql-17-17.10/src/backend/executor/nodeWindowAgg.c --- postgresql-17-17.9/src/backend/executor/nodeWindowAgg.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/executor/nodeWindowAgg.c 2026-05-11 19:46:41.000000000 +0000 @@ -37,6 +37,7 @@ #include "catalog/objectaccess.h" #include "catalog/pg_aggregate.h" #include "catalog/pg_proc.h" +#include "common/int.h" #include "executor/executor.h" #include "executor/nodeWindowAgg.h" #include "miscadmin.h" @@ -1424,12 +1425,21 @@ if (frameOptions & FRAMEOPTION_ROWS) { int64 offset = DatumGetInt64(winstate->endOffsetValue); + int64 frameendpos = 0; /* rows after current row + offset are out of frame */ if (frameOptions & FRAMEOPTION_END_OFFSET_PRECEDING) offset = -offset; - if (pos > winstate->currentpos + offset) + /* + * If we have an overflow, it means the frame end is beyond the + * range of int64. Since currentpos >= 0, this can only be a + * positive overflow. We treat this as meaning that the frame + * extends to end of partition. + */ + if (!pg_add_s64_overflow(winstate->currentpos, offset, + &frameendpos) && + pos > frameendpos) return -1; } else if (frameOptions & (FRAMEOPTION_RANGE | FRAMEOPTION_GROUPS)) @@ -1564,7 +1574,16 @@ if (frameOptions & FRAMEOPTION_START_OFFSET_PRECEDING) offset = -offset; - winstate->frameheadpos = winstate->currentpos + offset; + /* + * If we have an overflow, it means the frame head is beyond the + * range of int64. Since currentpos >= 0, this can only be a + * positive overflow. We treat this as being beyond end of + * partition. + */ + if (pg_add_s64_overflow(winstate->currentpos, offset, + &winstate->frameheadpos)) + winstate->frameheadpos = PG_INT64_MAX; + /* frame head can't go before first row */ if (winstate->frameheadpos < 0) winstate->frameheadpos = 0; @@ -1676,12 +1695,21 @@ * framehead_slot empty. */ int64 offset = DatumGetInt64(winstate->startOffsetValue); - int64 minheadgroup; + int64 minheadgroup = 0; if (frameOptions & FRAMEOPTION_START_OFFSET_PRECEDING) minheadgroup = winstate->currentgroup - offset; else - minheadgroup = winstate->currentgroup + offset; + { + /* + * If we have an overflow, it means the target group is beyond + * the range of int64. We treat this as "infinity", which + * ensures the loop below advances to end of partition. + */ + if (pg_add_s64_overflow(winstate->currentgroup, offset, + &minheadgroup)) + minheadgroup = PG_INT64_MAX; + } tuplestore_select_read_pointer(winstate->buffer, winstate->framehead_ptr); @@ -1818,7 +1846,18 @@ if (frameOptions & FRAMEOPTION_END_OFFSET_PRECEDING) offset = -offset; - winstate->frametailpos = winstate->currentpos + offset + 1; + /* + * If we have an overflow, it means the frame tail is beyond the + * range of int64. Since currentpos >= 0, this can only be a + * positive overflow. We treat this as being beyond end of + * partition. + */ + if (pg_add_s64_overflow(winstate->currentpos, offset, + &winstate->frametailpos) || + pg_add_s64_overflow(winstate->frametailpos, 1, + &winstate->frametailpos)) + winstate->frametailpos = PG_INT64_MAX; + /* smallest allowable value of frametailpos is 0 */ if (winstate->frametailpos < 0) winstate->frametailpos = 0; @@ -1930,12 +1969,21 @@ * leave frametailpos = end+1 and frametail_slot empty. */ int64 offset = DatumGetInt64(winstate->endOffsetValue); - int64 maxtailgroup; + int64 maxtailgroup = 0; if (frameOptions & FRAMEOPTION_END_OFFSET_PRECEDING) maxtailgroup = winstate->currentgroup - offset; else - maxtailgroup = winstate->currentgroup + offset; + { + /* + * If we have an overflow, it means the target group is beyond + * the range of int64. We treat this as "infinity", which + * ensures the loop below advances to end of partition. + */ + if (pg_add_s64_overflow(winstate->currentgroup, offset, + &maxtailgroup)) + maxtailgroup = PG_INT64_MAX; + } tuplestore_select_read_pointer(winstate->buffer, winstate->frametail_ptr); diff -Nru postgresql-17-17.9/src/backend/jit/llvm/Makefile postgresql-17-17.10/src/backend/jit/llvm/Makefile --- postgresql-17-17.9/src/backend/jit/llvm/Makefile 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/jit/llvm/Makefile 2026-05-11 19:46:41.000000000 +0000 @@ -39,7 +39,7 @@ # Because this module includes C++ files, we need to use a C++ # compiler for linking. Makefile.shlib uses $(COMPILER) to build # loadable modules. -override COMPILER = $(CXX) $(CFLAGS) +override COMPILER = $(CXX) $(CXXFLAGS) OBJS = \ $(WIN32RES) diff -Nru postgresql-17-17.9/src/backend/jit/llvm/SectionMemoryManager.cpp postgresql-17-17.10/src/backend/jit/llvm/SectionMemoryManager.cpp --- postgresql-17-17.9/src/backend/jit/llvm/SectionMemoryManager.cpp 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/jit/llvm/SectionMemoryManager.cpp 2026-05-11 19:46:41.000000000 +0000 @@ -1,18 +1,11 @@ /* - * This file is from https://github.com/llvm/llvm-project/pull/71968 - * with minor modifications to avoid name clash and work with older - * LLVM versions. The llvm::backport::SectionMemoryManager class is a - * drop-in replacement for llvm::SectionMemoryManager, for use with - * llvm::RuntimeDyld. It fixes a memory layout bug on large memory - * ARM systems (see pull request for details). If the LLVM project - * eventually commits the change, we may need to resynchronize our - * copy with any further modifications, but they would be unlikely to - * backport it into the LLVM versions that we target so we would still - * need this copy. + * This file is from LLVM 22 (originally pull request #71968), with minor + * modifications to avoid name clash and work with older LLVM versions. It + * replaces llvm::SectionMemoryManager, and is injected into llvm::RuntimeDyld + * to fix a memory layout bug on large memory ARM systems on LLVM < 22. * - * In the future we will switch to using JITLink instead of - * RuntimeDyld where possible, and later remove this code (.cpp, .h, - * .LICENSE) after all LLVM versions that we target allow it. + * We can remove this code (.cpp, .h, .LICENSE) once LLVM 22 is our minimum + * supported version or we've switched to JITLink for at least Aarch64. * * This file is a modified copy of a part of the LLVM source code that * we would normally access from the LLVM library. It is therefore diff -Nru postgresql-17-17.9/src/backend/jit/llvm/llvmjit.c postgresql-17-17.10/src/backend/jit/llvm/llvmjit.c --- postgresql-17-17.9/src/backend/jit/llvm/llvmjit.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/jit/llvm/llvmjit.c 2026-05-11 19:46:41.000000000 +0000 @@ -1278,7 +1278,10 @@ static LLVMOrcObjectLayerRef llvm_create_object_layer(void *Ctx, LLVMOrcExecutionSessionRef ES, const char *Triple) { -#ifdef USE_LLVM_BACKPORT_SECTION_MEMORY_MANAGER +#if LLVM_VERSION_MAJOR >= 22 + LLVMOrcObjectLayerRef objlayer = + LLVMOrcCreateRTDyldObjectLinkingLayerWithSectionMemoryManagerReserveAlloc(ES, true); +#elif defined(USE_LLVM_BACKPORT_SECTION_MEMORY_MANAGER) LLVMOrcObjectLayerRef objlayer = LLVMOrcCreateRTDyldObjectLinkingLayerWithSafeSectionMemoryManager(ES); #else diff -Nru postgresql-17-17.9/src/backend/jit/llvm/llvmjit_expr.c postgresql-17-17.10/src/backend/jit/llvm/llvmjit_expr.c --- postgresql-17-17.9/src/backend/jit/llvm/llvmjit_expr.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/jit/llvm/llvmjit_expr.c 2026-05-11 19:46:41.000000000 +0000 @@ -62,7 +62,9 @@ LLVMValueRef v_state, ExprEvalStep *op, int natts, LLVMValueRef *v_args); +#if LLVM_VERSION_MAJOR < 22 static LLVMValueRef create_LifetimeEnd(LLVMModuleRef mod); +#endif /* macro making it easier to call ExecEval* functions */ #define build_EvalXFunc(b, mod, funcname, v_state, op, ...) \ @@ -2705,14 +2707,11 @@ LLVMModuleRef mod, FunctionCallInfo fcinfo, LLVMValueRef *v_fcinfo_isnull) { - LLVMContextRef lc; LLVMValueRef v_fn; LLVMValueRef v_fcinfo_isnullp; LLVMValueRef v_retval; LLVMValueRef v_fcinfo; - lc = LLVMGetModuleContext(mod); - v_fn = llvm_function_reference(context, b, mod, fcinfo); v_fcinfo = l_ptr_const(fcinfo, l_ptr(StructFunctionCallInfoData)); @@ -2728,11 +2727,14 @@ if (v_fcinfo_isnull) *v_fcinfo_isnull = l_load(b, TypeStorageBool, v_fcinfo_isnullp, ""); +#if LLVM_VERSION_MAJOR < 22 + /* * Add lifetime-end annotation, signaling that writes to memory don't have * to be retained (important for inlining potential). */ { + LLVMContextRef lc = LLVMGetModuleContext(mod); LLVMValueRef v_lifetime = create_LifetimeEnd(mod); LLVMValueRef params[2]; @@ -2744,6 +2746,7 @@ params[1] = l_ptr_const(&fcinfo->isnull, l_ptr(LLVMInt8TypeInContext(lc))); l_call(b, LLVMGetFunctionType(v_lifetime), v_lifetime, params, lengthof(params), ""); } +#endif return v_retval; } @@ -2781,6 +2784,7 @@ return v_ret; } +#if LLVM_VERSION_MAJOR < 22 static LLVMValueRef create_LifetimeEnd(LLVMModuleRef mod) { @@ -2810,3 +2814,4 @@ return fn; } +#endif diff -Nru postgresql-17-17.9/src/backend/libpq/auth-scram.c postgresql-17-17.10/src/backend/libpq/auth-scram.c --- postgresql-17-17.9/src/backend/libpq/auth-scram.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/libpq/auth-scram.c 2026-05-11 19:46:41.000000000 +0000 @@ -570,7 +570,7 @@ * Compare the secret's Server Key with the one computed from the * user-supplied password. */ - return memcmp(computed_key, server_key, key_length) == 0; + return timingsafe_bcmp(computed_key, server_key, key_length) == 0; } @@ -1118,9 +1118,9 @@ if (final_nonce_len != client_nonce_len + server_nonce_len) return false; - if (memcmp(state->client_final_nonce, state->client_nonce, client_nonce_len) != 0) + if (timingsafe_bcmp(state->client_final_nonce, state->client_nonce, client_nonce_len) != 0) return false; - if (memcmp(state->client_final_nonce + client_nonce_len, state->server_nonce, server_nonce_len) != 0) + if (timingsafe_bcmp(state->client_final_nonce + client_nonce_len, state->server_nonce, server_nonce_len) != 0) return false; return true; @@ -1175,7 +1175,7 @@ client_StoredKey, &errstr) < 0) elog(ERROR, "could not hash stored key: %s", errstr); - if (memcmp(client_StoredKey, state->StoredKey, state->key_length) != 0) + if (timingsafe_bcmp(client_StoredKey, state->StoredKey, state->key_length) != 0) return false; return true; diff -Nru postgresql-17-17.9/src/backend/libpq/auth.c postgresql-17-17.10/src/backend/libpq/auth.c --- postgresql-17-17.9/src/backend/libpq/auth.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/libpq/auth.c 2026-05-11 19:46:41.000000000 +0000 @@ -3232,7 +3232,7 @@ } pfree(cryptvector); - if (memcmp(receivepacket->vector, encryptedpassword, RADIUS_VECTOR_LENGTH) != 0) + if (timingsafe_bcmp(receivepacket->vector, encryptedpassword, RADIUS_VECTOR_LENGTH) != 0) { ereport(LOG, (errmsg("RADIUS response from %s has incorrect MD5 signature", diff -Nru postgresql-17-17.9/src/backend/libpq/crypt.c postgresql-17-17.10/src/backend/libpq/crypt.c --- postgresql-17-17.9/src/backend/libpq/crypt.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/libpq/crypt.c 2026-05-11 19:46:41.000000000 +0000 @@ -196,7 +196,8 @@ return STATUS_ERROR; } - if (strcmp(client_pass, crypt_pwd) == 0) + if (strlen(client_pass) == strlen(crypt_pwd) && + timingsafe_bcmp(client_pass, crypt_pwd, strlen(crypt_pwd)) == 0) retval = STATUS_OK; else { @@ -258,7 +259,8 @@ *logdetail = errstr; return STATUS_ERROR; } - if (strcmp(crypt_client_pass, shadow_pass) == 0) + if (strlen(crypt_client_pass) == strlen(shadow_pass) && + timingsafe_bcmp(crypt_client_pass, shadow_pass, strlen(shadow_pass)) == 0) return STATUS_OK; else { diff -Nru postgresql-17-17.9/src/backend/optimizer/path/indxpath.c postgresql-17-17.10/src/backend/optimizer/path/indxpath.c --- postgresql-17-17.9/src/backend/optimizer/path/indxpath.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/optimizer/path/indxpath.c 2026-05-11 19:46:41.000000000 +0000 @@ -3536,16 +3536,19 @@ * The condition's equality operator must be a member of the * index opfamily, else it is not asserting the right kind of * equality behavior for this index. We check this first - * since it's probably cheaper than match_index_to_operand(). + * since it's probably the cheapest test. */ if (!list_member_oid(rinfo->mergeopfamilies, ind->opfamily[c])) continue; /* - * XXX at some point we may need to check collations here too. - * For the moment we assume all collations reduce to the same - * notion of equality. + * The index's collation must agree with the clause's input + * collation on equality, else the index's uniqueness does not + * imply uniqueness under the clause's equality semantics. */ + if (!collations_agree_on_equality(ind->indexcollations[c], + exprInputCollation((Node *) rinfo->clause))) + continue; /* OK, see if the condition operand matches the index key */ if (rinfo->outer_is_left) @@ -3583,10 +3586,13 @@ continue; /* - * XXX at some point we may need to check collations here too. - * For the moment we assume all collations reduce to the same - * notion of equality. + * The index's collation must agree with the operand's + * collation on equality, else the index's uniqueness does not + * imply uniqueness under the operator's equality semantics. */ + if (!collations_agree_on_equality(ind->indexcollations[c], + exprCollation(expr))) + continue; matched = true; /* column is unique */ break; diff -Nru postgresql-17-17.9/src/backend/optimizer/plan/analyzejoins.c postgresql-17-17.10/src/backend/optimizer/plan/analyzejoins.c --- postgresql-17-17.9/src/backend/optimizer/plan/analyzejoins.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/optimizer/plan/analyzejoins.c 2026-05-11 19:46:41.000000000 +0000 @@ -31,6 +31,20 @@ #include "optimizer/restrictinfo.h" #include "utils/lsyscache.h" +/* + * One element of the list passed to query_is_distinct_for_with_collations(). + * Each entry names a subquery output column that the caller needs to be + * distinct over, plus the upper-level equality operator and its input + * collation, so that the subquery's own DISTINCT/GROUP BY/set-op clauses can + * be compared for compatibility. + */ +typedef struct DistinctColInfo +{ + int colno; /* subquery output column resno */ + Oid opid; /* upper-level equality operator */ + Oid collid; /* input collation of opid */ +} DistinctColInfo; + /* local functions */ static bool join_is_removable(PlannerInfo *root, SpecialJoinInfo *sjinfo); static void remove_rel_from_query(PlannerInfo *root, int relid, @@ -43,7 +57,9 @@ static bool rel_supports_distinctness(PlannerInfo *root, RelOptInfo *rel); static bool rel_is_distinct_for(PlannerInfo *root, RelOptInfo *rel, List *clause_list); -static Oid distinct_col_search(int colno, List *colnos, List *opids); +static bool query_is_distinct_for_with_collations(Query *query, + List *distinct_cols); +static DistinctColInfo *distinct_col_search(int colno, List *distinct_cols); static bool is_innerrel_unique_for(PlannerInfo *root, Relids joinrelids, Relids outerrelids, @@ -553,7 +569,7 @@ /* * Remove any references to relid or ojrelid from the RestrictInfo. * - * We only bother to clean out bits in clause_relids and required_relids, + * We only bother to clean out bits in the RestrictInfo's various relid sets, * not nullingrel bits in contained Vars and PHVs. (This might have to be * improved sometime.) However, if the RestrictInfo contains an OR clause * we have to also clean up the sub-clauses. @@ -575,6 +591,22 @@ rinfo->required_relids = bms_copy(rinfo->required_relids); rinfo->required_relids = bms_del_member(rinfo->required_relids, relid); rinfo->required_relids = bms_del_member(rinfo->required_relids, ojrelid); + /* Likewise for incompatible_relids */ + rinfo->incompatible_relids = bms_copy(rinfo->incompatible_relids); + rinfo->incompatible_relids = bms_del_member(rinfo->incompatible_relids, relid); + rinfo->incompatible_relids = bms_del_member(rinfo->incompatible_relids, ojrelid); + /* Likewise for outer_relids */ + rinfo->outer_relids = bms_copy(rinfo->outer_relids); + rinfo->outer_relids = bms_del_member(rinfo->outer_relids, relid); + rinfo->outer_relids = bms_del_member(rinfo->outer_relids, ojrelid); + /* Likewise for left_relids */ + rinfo->left_relids = bms_copy(rinfo->left_relids); + rinfo->left_relids = bms_del_member(rinfo->left_relids, relid); + rinfo->left_relids = bms_del_member(rinfo->left_relids, ojrelid); + /* Likewise for right_relids */ + rinfo->right_relids = bms_copy(rinfo->right_relids); + rinfo->right_relids = bms_del_member(rinfo->right_relids, relid); + rinfo->right_relids = bms_del_member(rinfo->right_relids, ojrelid); /* If it's an OR, recurse to clean up sub-clauses */ if (restriction_is_or_clause(rinfo)) @@ -640,6 +672,8 @@ bms_is_member(ojrelid, cur_em->em_relids)) { Assert(!cur_em->em_is_const); + /* em_relids is likely to be shared with some RestrictInfo */ + cur_em->em_relids = bms_copy(cur_em->em_relids); cur_em->em_relids = bms_del_member(cur_em->em_relids, relid); cur_em->em_relids = bms_del_member(cur_em->em_relids, ojrelid); if (bms_is_empty(cur_em->em_relids)) @@ -881,15 +915,17 @@ { Index relid = rel->relid; Query *subquery = root->simple_rte_array[relid]->subquery; - List *colnos = NIL; - List *opids = NIL; + List *distinct_cols = NIL; ListCell *l; /* - * Build the argument lists for query_is_distinct_for: a list of - * output column numbers that the query needs to be distinct over, and - * a list of equality operators that the output columns need to be - * distinct according to. + * Build the argument list for query_is_distinct_for_with_collations: + * a list of DistinctColInfo entries, each holding an output column + * number that the query needs to be distinct over, the equality + * operator that the column needs to be distinct according to, and + * that operator's input collation. The collation matters because the + * subquery's own DISTINCT / GROUP BY / set-op proves uniqueness under + * its own collation, which need not agree with the operator's. * * (XXX we are not considering restriction clauses attached to the * subquery; is that worth doing?) @@ -897,18 +933,18 @@ foreach(l, clause_list) { RestrictInfo *rinfo = lfirst_node(RestrictInfo, l); - Oid op; + OpExpr *opexpr; Var *var; + DistinctColInfo *dcinfo; /* - * Get the equality operator we need uniqueness according to. - * (This might be a cross-type operator and thus not exactly the - * same operator the subquery would consider; that's all right - * since query_is_distinct_for can resolve such cases.) The - * caller's mergejoinability test should have selected only - * OpExprs. + * The caller's mergejoinability test should have selected only + * OpExprs. The operator might be a cross-type operator and thus + * not exactly the same operator the subquery would consider; + * that's all right since query_is_distinct_for_with_collations + * can resolve such cases. */ - op = castNode(OpExpr, rinfo->clause)->opno; + opexpr = castNode(OpExpr, rinfo->clause); /* caller identified the inner side for us */ if (rinfo->outer_is_left) @@ -932,11 +968,14 @@ var->varno != relid || var->varlevelsup != 0) continue; - colnos = lappend_int(colnos, var->varattno); - opids = lappend_oid(opids, op); + dcinfo = palloc(sizeof(DistinctColInfo)); + dcinfo->colno = var->varattno; + dcinfo->opid = opexpr->opno; + dcinfo->collid = opexpr->inputcollid; + distinct_cols = lappend(distinct_cols, dcinfo); } - if (query_is_distinct_for(subquery, colnos, opids)) + if (query_is_distinct_for_with_collations(subquery, distinct_cols)) return true; } return false; @@ -974,31 +1013,71 @@ } /* - * query_is_distinct_for - does query never return duplicates of the - * specified columns? + * query_is_distinct_for - ABI-preserving wrapper around + * query_is_distinct_for_with_collations(). * - * query is a not-yet-planned subquery (in current usage, it's always from - * a subquery RTE, which the planner avoids scribbling on). - * - * colnos is an integer list of output column numbers (resno's). We are - * interested in whether rows consisting of just these columns are certain - * to be distinct. "Distinctness" is defined according to whether the - * corresponding upper-level equality operators listed in opids would think - * the values are distinct. (Note: the opids entries could be cross-type - * operators, and thus not exactly the equality operators that the subquery - * would use itself. We use equality_ops_are_compatible() to check - * compatibility. That looks at btree or hash opfamily membership, and so - * should give trustworthy answers for all operators that we might need - * to deal with here.) + * The original signature took parallel colnos/opids lists and did not + * consider collations. External callers built against earlier minor + * releases continue to call it with the historical (collation-blind) + * semantics; we forward with InvalidOid collations, which makes the + * collation check a no-op (see collations_agree_on_equality()). */ bool query_is_distinct_for(Query *query, List *colnos, List *opids) { - ListCell *l; - Oid opid; + List *distinct_cols = NIL; + ListCell *lc1; + ListCell *lc2; Assert(list_length(colnos) == list_length(opids)); + forboth(lc1, colnos, lc2, opids) + { + DistinctColInfo *dcinfo = palloc(sizeof(DistinctColInfo)); + + dcinfo->colno = lfirst_int(lc1); + dcinfo->opid = lfirst_oid(lc2); + dcinfo->collid = InvalidOid; + distinct_cols = lappend(distinct_cols, dcinfo); + } + + return query_is_distinct_for_with_collations(query, distinct_cols); +} + +/* + * query_is_distinct_for_with_collations - does query never return duplicates + * of the specified columns? + * + * query is a not-yet-planned subquery (in current usage, it's always from + * a subquery RTE, which the planner avoids scribbling on). + * + * distinct_cols is a list of DistinctColInfo, one per requested output column. + * Each entry names the subquery output column number we want distinct, the + * upper-level equality operator we'll compare values with, and that operator's + * input collation. We are interested in whether rows consisting of just these + * columns are certain to be distinct. + * + * "Distinctness" is defined according to whether the corresponding upper-level + * equality operators would think the values are distinct. (Note: each opid + * could be a cross-type operator, and thus not exactly the equality operator + * that the subquery would use itself. We use equality_ops_are_compatible() to + * check compatibility. That looks at opfamily membership for index AMs that + * have declared that they support consistent equality semantics within an + * opfamily, and so should give trustworthy answers for all operators that we + * might need to deal with here.) + * + * The collid must also agree on equality with the collation the subquery's own + * DISTINCT/GROUP BY/set-op uses to deduplicate the column, else the subquery's + * distinctness does not carry over to the caller's equality semantics. Two + * collations agree on equality if they match or if both are deterministic (in + * which case both reduce equality to byte-equality; see CREATE COLLATION). + */ +static bool +query_is_distinct_for_with_collations(Query *query, List *distinct_cols) +{ + ListCell *l; + DistinctColInfo *dcinfo; + /* * DISTINCT (including DISTINCT ON) guarantees uniqueness if all the * columns in the DISTINCT clause appear in colnos and operator semantics @@ -1013,9 +1092,11 @@ TargetEntry *tle = get_sortgroupclause_tle(sgc, query->targetList); - opid = distinct_col_search(tle->resno, colnos, opids); - if (!OidIsValid(opid) || - !equality_ops_are_compatible(opid, sgc->eqop)) + dcinfo = distinct_col_search(tle->resno, distinct_cols); + if (dcinfo == NULL || + !equality_ops_are_compatible(dcinfo->opid, sgc->eqop) || + !collations_agree_on_equality(dcinfo->collid, + exprCollation((Node *) tle->expr))) break; /* exit early if no match */ } if (l == NULL) /* had matches for all? */ @@ -1044,9 +1125,11 @@ TargetEntry *tle = get_sortgroupclause_tle(sgc, query->targetList); - opid = distinct_col_search(tle->resno, colnos, opids); - if (!OidIsValid(opid) || - !equality_ops_are_compatible(opid, sgc->eqop)) + dcinfo = distinct_col_search(tle->resno, distinct_cols); + if (dcinfo == NULL || + !equality_ops_are_compatible(dcinfo->opid, sgc->eqop) || + !collations_agree_on_equality(dcinfo->collid, + exprCollation((Node *) tle->expr))) break; /* exit early if no match */ } if (l == NULL) /* had matches for all? */ @@ -1112,9 +1195,11 @@ sgc = (SortGroupClause *) lfirst(lg); lg = lnext(topop->groupClauses, lg); - opid = distinct_col_search(tle->resno, colnos, opids); - if (!OidIsValid(opid) || - !equality_ops_are_compatible(opid, sgc->eqop)) + dcinfo = distinct_col_search(tle->resno, distinct_cols); + if (dcinfo == NULL || + !equality_ops_are_compatible(dcinfo->opid, sgc->eqop) || + !collations_agree_on_equality(dcinfo->collid, + exprCollation((Node *) tle->expr))) break; /* exit early if no match */ } if (l == NULL) /* had matches for all? */ @@ -1134,24 +1219,23 @@ } /* - * distinct_col_search - subroutine for query_is_distinct_for + * distinct_col_search - subroutine for query_is_distinct_for_with_collations * - * If colno is in colnos, return the corresponding element of opids, - * else return InvalidOid. (Ordinarily colnos would not contain duplicates, - * but if it does, we arbitrarily select the first match.) + * If colno matches the colno field of an entry in distinct_cols, return a + * pointer to that entry; else return NULL. (Ordinarily distinct_cols would + * not contain duplicate colnos, but if it does, we arbitrarily select the + * first match.) */ -static Oid -distinct_col_search(int colno, List *colnos, List *opids) +static DistinctColInfo * +distinct_col_search(int colno, List *distinct_cols) { - ListCell *lc1, - *lc2; - - forboth(lc1, colnos, lc2, opids) + foreach_ptr(DistinctColInfo, dcinfo, distinct_cols) { - if (colno == lfirst_int(lc1)) - return lfirst_oid(lc2); + if (dcinfo->colno == colno) + return dcinfo; } - return InvalidOid; + + return NULL; } diff -Nru postgresql-17-17.9/src/backend/parser/parse_utilcmd.c postgresql-17-17.10/src/backend/parser/parse_utilcmd.c --- postgresql-17-17.9/src/backend/parser/parse_utilcmd.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/parser/parse_utilcmd.c 2026-05-11 19:46:41.000000000 +0000 @@ -1859,7 +1859,10 @@ * extended statistic "source_statsid", for the rel identified by heapRel and * heapRelid. * - * Attribute numbers in expression Vars are adjusted according to attmap. + * stxkeys in the source statistic holds attribute numbers from the parent + * relation. Those attnums, along with the attribute numbers referenced by + * Vars inside the expression tree, are remapped to the new relation's + * numbering according to attmap. */ static CreateStatsStmt * generateClonedExtStatsStmt(RangeVar *heapRel, Oid heapRelid, @@ -1917,7 +1920,8 @@ StatsElem *selem = makeNode(StatsElem); AttrNumber attnum = statsrec->stxkeys.values[i]; - selem->name = get_attname(heapRelid, attnum, false); + selem->name = + get_attname(heapRelid, attmap->attnums[attnum - 1], false); selem->expr = NULL; def_names = lappend(def_names, selem); diff -Nru postgresql-17-17.9/src/backend/po/de.po postgresql-17-17.10/src/backend/po/de.po --- postgresql-17-17.9/src/backend/po/de.po 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/po/de.po 2026-05-11 19:46:41.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2026-02-18 17:58+0000\n" +"POT-Creation-Date: 2026-05-05 10:21+0000\n" "PO-Revision-Date: 2025-11-07 08:48+0100\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" @@ -88,7 +88,7 @@ #: ../common/controldata_utils.c:108 ../common/controldata_utils.c:110 #: access/transam/timeline.c:143 access/transam/timeline.c:362 -#: access/transam/twophase.c:1353 access/transam/xlog.c:3458 +#: access/transam/twophase.c:1354 access/transam/xlog.c:3458 #: access/transam/xlog.c:4322 access/transam/xlogrecovery.c:1248 #: access/transam/xlogrecovery.c:1346 access/transam/xlogrecovery.c:1383 #: access/transam/xlogrecovery.c:1450 backup/basebackup.c:2123 @@ -117,8 +117,8 @@ #: ../common/controldata_utils.c:277 ../common/controldata_utils.c:280 #: access/heap/rewriteheap.c:1141 access/heap/rewriteheap.c:1246 #: access/transam/timeline.c:392 access/transam/timeline.c:438 -#: access/transam/timeline.c:512 access/transam/twophase.c:1365 -#: access/transam/twophase.c:1784 access/transam/xlog.c:3304 +#: access/transam/timeline.c:512 access/transam/twophase.c:1366 +#: access/transam/twophase.c:1785 access/transam/xlog.c:3304 #: access/transam/xlog.c:3498 access/transam/xlog.c:3503 #: access/transam/xlog.c:3639 access/transam/xlog.c:4292 #: access/transam/xlog.c:5227 commands/copyfrom.c:1799 commands/copyto.c:325 @@ -157,7 +157,7 @@ #: ../common/file_utils.c:406 ../common/file_utils.c:480 #: access/heap/rewriteheap.c:1229 access/transam/timeline.c:111 #: access/transam/timeline.c:251 access/transam/timeline.c:348 -#: access/transam/twophase.c:1309 access/transam/xlog.c:3211 +#: access/transam/twophase.c:1310 access/transam/xlog.c:3211 #: access/transam/xlog.c:3374 access/transam/xlog.c:3413 #: access/transam/xlog.c:3606 access/transam/xlog.c:4312 #: access/transam/xlogrecovery.c:4285 access/transam/xlogrecovery.c:4388 @@ -169,7 +169,7 @@ #: replication/logical/reorderbuffer.c:5223 #: replication/logical/snapbuild.c:1821 replication/logical/snapbuild.c:1931 #: replication/slot.c:2253 replication/walsender.c:646 -#: replication/walsender.c:3099 storage/file/copydir.c:151 +#: replication/walsender.c:3108 storage/file/copydir.c:151 #: storage/file/fd.c:803 storage/file/fd.c:3510 storage/file/fd.c:3740 #: storage/file/fd.c:3830 storage/smgr/md.c:672 utils/cache/relmapper.c:818 #: utils/cache/relmapper.c:935 utils/error/elog.c:2124 @@ -180,10 +180,10 @@ msgstr "konnte Datei »%s« nicht öffnen: %m" #: ../common/controldata_utils.c:246 ../common/controldata_utils.c:249 -#: access/transam/twophase.c:1757 access/transam/twophase.c:1766 +#: access/transam/twophase.c:1758 access/transam/twophase.c:1767 #: access/transam/xlog.c:9346 access/transam/xlogfuncs.c:698 #: backup/basebackup_server.c:173 backup/basebackup_server.c:266 -#: backup/walsummary.c:304 postmaster/postmaster.c:4129 +#: backup/walsummary.c:304 postmaster/postmaster.c:4115 #: postmaster/syslogger.c:1522 postmaster/syslogger.c:1535 #: postmaster/syslogger.c:1548 utils/cache/relmapper.c:947 #, c-format @@ -194,7 +194,7 @@ #: ../common/file_utils.c:418 ../common/file_utils.c:488 #: access/heap/rewriteheap.c:925 access/heap/rewriteheap.c:1135 #: access/heap/rewriteheap.c:1240 access/transam/timeline.c:432 -#: access/transam/timeline.c:506 access/transam/twophase.c:1778 +#: access/transam/timeline.c:506 access/transam/twophase.c:1779 #: access/transam/xlog.c:3297 access/transam/xlog.c:3492 #: access/transam/xlog.c:4285 access/transam/xlog.c:8721 #: access/transam/xlog.c:8766 backup/basebackup_server.c:207 @@ -213,21 +213,21 @@ #: ../common/md5_common.c:156 ../common/parse_manifest.c:157 #: ../common/parse_manifest.c:852 ../common/psprintf.c:143 #: ../common/scram-common.c:268 ../common/stringinfo.c:314 ../port/path.c:828 -#: ../port/path.c:865 ../port/path.c:882 access/transam/twophase.c:1418 +#: ../port/path.c:865 ../port/path.c:882 access/transam/twophase.c:1419 #: access/transam/xlogrecovery.c:564 lib/dshash.c:253 libpq/auth.c:1360 #: libpq/auth.c:1404 libpq/auth.c:1961 libpq/be-secure-gssapi.c:534 #: libpq/be-secure-gssapi.c:714 postmaster/bgworker.c:355 -#: postmaster/bgworker.c:945 postmaster/postmaster.c:3562 -#: postmaster/postmaster.c:4023 postmaster/postmaster.c:4385 -#: postmaster/walsummarizer.c:935 +#: postmaster/bgworker.c:945 postmaster/postmaster.c:3548 +#: postmaster/postmaster.c:4009 postmaster/postmaster.c:4371 +#: postmaster/walsummarizer.c:936 #: replication/libpqwalreceiver/libpqwalreceiver.c:400 #: replication/logical/logical.c:212 replication/walsender.c:853 #: storage/buffer/localbuf.c:606 storage/file/fd.c:912 storage/file/fd.c:1443 #: storage/file/fd.c:1604 storage/file/fd.c:2531 storage/ipc/procarray.c:1465 #: storage/ipc/procarray.c:2219 storage/ipc/procarray.c:2226 #: storage/ipc/procarray.c:2731 storage/ipc/procarray.c:3435 -#: utils/activity/pgstat_shmem.c:508 utils/adt/formatting.c:1725 -#: utils/adt/formatting.c:1873 utils/adt/formatting.c:2075 +#: utils/activity/pgstat_shmem.c:508 utils/adt/formatting.c:1727 +#: utils/adt/formatting.c:1875 utils/adt/formatting.c:2077 #: utils/adt/pg_locale.c:533 utils/adt/pg_locale.c:697 utils/fmgr/dfmgr.c:229 #: utils/hash/dynahash.c:517 utils/hash/dynahash.c:617 #: utils/hash/dynahash.c:1100 utils/mb/mbutils.c:410 utils/mb/mbutils.c:438 @@ -319,7 +319,7 @@ msgstr "konnte Dateisystem für Datei »%s« nicht synchronisieren: %m" #: ../common/file_utils.c:120 ../common/file_utils.c:566 -#: ../common/file_utils.c:570 access/transam/twophase.c:1321 +#: ../common/file_utils.c:570 access/transam/twophase.c:1322 #: access/transam/xlogarchive.c:111 access/transam/xlogarchive.c:235 #: backup/basebackup.c:355 backup/basebackup.c:553 backup/basebackup.c:624 #: backup/walsummary.c:247 commands/copyfrom.c:1749 commands/copyto.c:700 @@ -340,7 +340,7 @@ #: ../common/file_utils.c:151 ../common/file_utils.c:281 #: ../common/pgfnames.c:48 ../common/rmtree.c:63 commands/tablespace.c:728 -#: commands/tablespace.c:738 postmaster/postmaster.c:1472 +#: commands/tablespace.c:738 postmaster/postmaster.c:1473 #: storage/file/fd.c:2933 storage/file/reinit.c:126 utils/adt/misc.c:256 #: utils/misc/tzparser.c:339 #, c-format @@ -366,101 +366,101 @@ msgid "internal error" msgstr "interner Fehler" -#: ../common/jsonapi.c:2124 +#: ../common/jsonapi.c:2175 msgid "Recursive descent parser cannot use incremental lexer." msgstr "Parser mit rekursivem Abstieg kann inkrementellen Lexer nicht benutzen." -#: ../common/jsonapi.c:2126 +#: ../common/jsonapi.c:2177 msgid "Incremental parser requires incremental lexer." msgstr "Inkrementeller Parser benötigt inkrementellen Lexer." -#: ../common/jsonapi.c:2128 +#: ../common/jsonapi.c:2179 msgid "JSON nested too deep, maximum permitted depth is 6400." msgstr "JSON zu tief geschachtelt, maximale erlaubte Tiefe ist 6400." -#: ../common/jsonapi.c:2130 +#: ../common/jsonapi.c:2181 #, c-format msgid "Escape sequence \"\\%.*s\" is invalid." msgstr "Escape-Sequenz »\\%.*s« ist nicht gültig." -#: ../common/jsonapi.c:2134 +#: ../common/jsonapi.c:2185 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Zeichen mit Wert 0x%02x muss escapt werden." -#: ../common/jsonapi.c:2138 +#: ../common/jsonapi.c:2189 #, c-format msgid "Expected end of input, but found \"%.*s\"." msgstr "Ende der Eingabe erwartet, aber »%.*s« gefunden." -#: ../common/jsonapi.c:2141 +#: ../common/jsonapi.c:2192 #, c-format msgid "Expected array element or \"]\", but found \"%.*s\"." msgstr "Array-Element oder »]« erwartet, aber »%.*s« gefunden." -#: ../common/jsonapi.c:2144 +#: ../common/jsonapi.c:2195 #, c-format msgid "Expected \",\" or \"]\", but found \"%.*s\"." msgstr "»,« oder »]« erwartet, aber »%.*s« gefunden." -#: ../common/jsonapi.c:2147 +#: ../common/jsonapi.c:2198 #, c-format msgid "Expected \":\", but found \"%.*s\"." msgstr "»:« erwartet, aber »%.*s« gefunden." -#: ../common/jsonapi.c:2150 +#: ../common/jsonapi.c:2201 #, c-format msgid "Expected JSON value, but found \"%.*s\"." msgstr "JSON-Wert erwartet, aber »%.*s« gefunden." -#: ../common/jsonapi.c:2153 +#: ../common/jsonapi.c:2204 msgid "The input string ended unexpectedly." msgstr "Die Eingabezeichenkette endete unerwartet." -#: ../common/jsonapi.c:2155 +#: ../common/jsonapi.c:2206 #, c-format msgid "Expected string or \"}\", but found \"%.*s\"." msgstr "Zeichenkette oder »}« erwartet, aber »%.*s« gefunden." -#: ../common/jsonapi.c:2158 +#: ../common/jsonapi.c:2209 #, c-format msgid "Expected \",\" or \"}\", but found \"%.*s\"." msgstr "»,« oder »}« erwartet, aber »%.*s« gefunden." -#: ../common/jsonapi.c:2161 +#: ../common/jsonapi.c:2212 #, c-format msgid "Expected string, but found \"%.*s\"." msgstr "Zeichenkette erwartet, aber »%.*s« gefunden." -#: ../common/jsonapi.c:2164 +#: ../common/jsonapi.c:2215 #, c-format msgid "Token \"%.*s\" is invalid." msgstr "Token »%.*s« ist ungültig." -#: ../common/jsonapi.c:2167 jsonpath_scan.l:608 +#: ../common/jsonapi.c:2218 jsonpath_scan.l:608 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 kann nicht in »text« umgewandelt werden." -#: ../common/jsonapi.c:2169 +#: ../common/jsonapi.c:2220 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "Nach »\\u« müssen vier Hexadezimalziffern folgen." -#: ../common/jsonapi.c:2172 +#: ../common/jsonapi.c:2223 msgid "Unicode escape values cannot be used for code point values above 007F when the encoding is not UTF8." msgstr "Unicode-Escape-Werte können nicht für Code-Punkt-Werte über 007F verwendet werden, wenn die Kodierung nicht UTF8 ist." -#: ../common/jsonapi.c:2181 +#: ../common/jsonapi.c:2232 #, c-format msgid "Unicode escape value could not be translated to the server's encoding %s." msgstr "Unicode-Escape-Wert konnte nicht in die Serverkodierung %s umgewandelt werden." -#: ../common/jsonapi.c:2188 jsonpath_scan.l:641 +#: ../common/jsonapi.c:2239 jsonpath_scan.l:641 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "Unicode-High-Surrogate darf nicht auf ein High-Surrogate folgen." -#: ../common/jsonapi.c:2190 jsonpath_scan.l:652 jsonpath_scan.l:662 +#: ../common/jsonapi.c:2241 jsonpath_scan.l:652 jsonpath_scan.l:662 #: jsonpath_scan.l:713 #, c-format msgid "Unicode low surrogate must follow a high surrogate." @@ -708,9 +708,9 @@ msgstr "konnte Statuscode des Subprozesses nicht ermitteln: Fehlercode %lu" #: ../common/rmtree.c:97 access/heap/rewriteheap.c:1214 -#: access/transam/twophase.c:1717 access/transam/xlogarchive.c:119 +#: access/transam/twophase.c:1718 access/transam/xlogarchive.c:119 #: access/transam/xlogarchive.c:399 backup/walsummary.c:254 -#: postmaster/postmaster.c:1050 postmaster/syslogger.c:1488 +#: postmaster/postmaster.c:1051 postmaster/syslogger.c:1488 #: replication/logical/origin.c:591 replication/logical/reorderbuffer.c:4719 #: replication/logical/snapbuild.c:1759 replication/logical/snapbuild.c:2193 #: replication/slot.c:2237 storage/file/fd.c:878 storage/file/fd.c:3378 @@ -923,7 +923,7 @@ msgstr "konnte Basistabelle von Index »%s« nicht öffnen" #: access/brin/brin.c:1463 access/brin/brin.c:1559 access/gin/ginfast.c:1085 -#: parser/parse_utilcmd.c:2277 +#: parser/parse_utilcmd.c:2281 #, c-format msgid "index \"%s\" is not valid" msgstr "Index »%s« ist nicht gültig" @@ -1055,7 +1055,7 @@ msgstr "Indexzeile benötigt %zu Bytes, Maximalgröße ist %zu" #: access/common/printtup.c:292 commands/explain.c:5376 tcop/fastpath.c:107 -#: tcop/fastpath.c:454 tcop/postgres.c:1956 +#: tcop/fastpath.c:454 tcop/postgres.c:1957 #, c-format msgid "unsupported format code: %d" msgstr "nicht unterstützter Formatcode: %d" @@ -1284,11 +1284,11 @@ msgid "could not determine which collation to use for string hashing" msgstr "konnte die für das Zeichenketten-Hashing zu verwendende Sortierfolge nicht bestimmen" -#: access/hash/hashfunc.c:281 access/hash/hashfunc.c:337 catalog/heap.c:673 -#: catalog/heap.c:679 commands/createas.c:201 commands/createas.c:508 +#: access/hash/hashfunc.c:281 access/hash/hashfunc.c:337 catalog/heap.c:687 +#: catalog/heap.c:693 commands/createas.c:201 commands/createas.c:508 #: commands/indexcmds.c:2021 commands/tablecmds.c:18252 commands/view.c:81 -#: regex/regc_pg_locale.c:245 utils/adt/formatting.c:1653 -#: utils/adt/formatting.c:1801 utils/adt/formatting.c:1991 utils/adt/like.c:189 +#: regex/regc_pg_locale.c:245 utils/adt/formatting.c:1655 +#: utils/adt/formatting.c:1803 utils/adt/formatting.c:1993 utils/adt/like.c:189 #: utils/adt/like_support.c:1024 utils/adt/varchar.c:738 #: utils/adt/varchar.c:1009 utils/adt/varchar.c:1066 utils/adt/varlena.c:1566 #, c-format @@ -1399,8 +1399,8 @@ #: access/transam/xlog.c:4264 access/transam/xlog.c:9335 #: access/transam/xlogfuncs.c:692 backup/basebackup_server.c:149 #: backup/basebackup_server.c:242 commands/dbcommands.c:494 -#: postmaster/launch_backend.c:340 postmaster/postmaster.c:4116 -#: postmaster/walsummarizer.c:1212 replication/logical/origin.c:603 +#: postmaster/launch_backend.c:340 postmaster/postmaster.c:4102 +#: postmaster/walsummarizer.c:1213 replication/logical/origin.c:603 #: replication/slot.c:2097 storage/file/copydir.c:157 storage/smgr/md.c:230 #: utils/time/snapmgr.c:1234 #, c-format @@ -1691,7 +1691,7 @@ msgstr "Das kann daran liegen, dass der Indexausdruck nicht »immutable« ist." #: access/nbtree/nbtpage.c:157 access/nbtree/nbtpage.c:611 -#: parser/parse_utilcmd.c:2323 +#: parser/parse_utilcmd.c:2327 #, c-format msgid "index \"%s\" is not a btree" msgstr "Index »%s« ist kein B-Tree" @@ -1811,13 +1811,13 @@ msgid "Make sure the configuration parameter \"%s\" is set." msgstr "Stellen Sie sicher, dass der Konfigurationsparameter »%s« gesetzt ist." -#: access/transam/multixact.c:1173 +#: access/transam/multixact.c:1260 #, c-format msgid "database is not accepting commands that assign new MultiXactIds to avoid wraparound data loss in database \"%s\"" msgstr "Datenbank nimmt keine Befehle an, die neue MultiXactIds zuweisen, um Datenverlust wegen Transaktionsnummernüberlauf in Datenbank »%s« zu vermeiden" -#: access/transam/multixact.c:1175 access/transam/multixact.c:1182 -#: access/transam/multixact.c:1206 access/transam/multixact.c:1215 +#: access/transam/multixact.c:1262 access/transam/multixact.c:1269 +#: access/transam/multixact.c:1293 access/transam/multixact.c:1302 #: access/transam/varsup.c:158 access/transam/varsup.c:165 #, c-format msgid "" @@ -1827,70 +1827,70 @@ "Führen Sie ein datenbankweites VACUUM in dieser Datenbank aus.\n" "Eventuell müssen Sie auch alte vorbereitete Transaktionen committen oder zurückrollen oder unbenutzte Replikations-Slots löschen." -#: access/transam/multixact.c:1180 +#: access/transam/multixact.c:1267 #, c-format msgid "database is not accepting commands that assign new MultiXactIds to avoid wraparound data loss in database with OID %u" msgstr "Datenbank nimmt keine Befehle an, die neue MultiXactIds zuweisen, um Datenverlust wegen Transaktionsnummernüberlauf in Datenbank mit OID %u zu vermeiden" -#: access/transam/multixact.c:1201 access/transam/multixact.c:2546 +#: access/transam/multixact.c:1288 access/transam/multixact.c:2644 #, c-format msgid "database \"%s\" must be vacuumed before %u more MultiXactId is used" msgid_plural "database \"%s\" must be vacuumed before %u more MultiXactIds are used" msgstr[0] "Datenbank »%s« muss gevacuumt werden, bevor %u weitere MultiXactId aufgebraucht ist" msgstr[1] "Datenbank »%s« muss gevacuumt werden, bevor %u weitere MultiXactIds aufgebraucht sind" -#: access/transam/multixact.c:1210 access/transam/multixact.c:2555 +#: access/transam/multixact.c:1297 access/transam/multixact.c:2653 #, c-format msgid "database with OID %u must be vacuumed before %u more MultiXactId is used" msgid_plural "database with OID %u must be vacuumed before %u more MultiXactIds are used" msgstr[0] "Datenbank mit OID %u muss gevacuumt werden, bevor %u weitere MultiXactId aufgebraucht ist" msgstr[1] "Datenbank mit OID %u muss gevacuumt werden, bevor %u weitere MultiXactIds aufgebraucht sind" -#: access/transam/multixact.c:1274 +#: access/transam/multixact.c:1361 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "Grenzwert für Multixact-»Members« überschritten" -#: access/transam/multixact.c:1275 +#: access/transam/multixact.c:1362 #, c-format msgid "This command would create a multixact with %u members, but the remaining space is only enough for %u member." msgid_plural "This command would create a multixact with %u members, but the remaining space is only enough for %u members." msgstr[0] "Dieser Befehl würde eine Multixact mit %u Mitgliedern erzeugen, aber es ist nur genug Platz für %u Mitglied." msgstr[1] "Dieser Befehl würde eine Multixact mit %u Mitgliedern erzeugen, aber es ist nur genug Platz für %u Mitglieder." -#: access/transam/multixact.c:1280 +#: access/transam/multixact.c:1367 #, c-format msgid "Execute a database-wide VACUUM in database with OID %u with reduced \"vacuum_multixact_freeze_min_age\" and \"vacuum_multixact_freeze_table_age\" settings." msgstr "Führen Sie ein datenbankweites VACUUM in der Datenbank mit OID %u aus, mit reduzierten Einstellungen für »vacuum_multixact_freeze_min_age« und »vacuum_multixact_freeze_table_age«." -#: access/transam/multixact.c:1311 +#: access/transam/multixact.c:1398 #, c-format msgid "database with OID %u must be vacuumed before %d more multixact member is used" msgid_plural "database with OID %u must be vacuumed before %d more multixact members are used" msgstr[0] "Datenbank mit OID %u muss gevacuumt werden, bevor %d weiteres Multixact-Mitglied aufgebraucht ist" msgstr[1] "Datenbank mit OID %u muss gevacuumt werden, bevor %d weitere Multixact-Mitglieder aufgebraucht sind" -#: access/transam/multixact.c:1316 +#: access/transam/multixact.c:1403 #, c-format msgid "Execute a database-wide VACUUM in that database with reduced \"vacuum_multixact_freeze_min_age\" and \"vacuum_multixact_freeze_table_age\" settings." msgstr "Führen Sie ein datenbankweites VACUUM in dieser Datenbank aus, mit reduzierten Einstellungen für »vacuum_multixact_freeze_min_age« und »vacuum_multixact_freeze_table_age«." -#: access/transam/multixact.c:1455 +#: access/transam/multixact.c:1542 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "MultiXactId %u existiert nicht mehr -- anscheinender Überlauf" -#: access/transam/multixact.c:1461 +#: access/transam/multixact.c:1548 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "MultiXactId %u wurde noch nicht erzeugt -- anscheinender Überlauf" -#: access/transam/multixact.c:1554 +#: access/transam/multixact.c:1641 #, c-format msgid "MultiXact %u has invalid next offset" msgstr "MultiXact %u hat ungültiges nächstes Offset" -#: access/transam/multixact.c:2551 access/transam/multixact.c:2560 +#: access/transam/multixact.c:2649 access/transam/multixact.c:2658 #, c-format msgid "" "To avoid MultiXactId assignment failures, execute a database-wide VACUUM in that database.\n" @@ -1899,32 +1899,32 @@ "Um Scheitern von MultiXactId-Zuweisungen zu vermeiden, führen Sie ein komplettes VACUUM über diese Datenbank aus.\n" "Eventuell müssen Sie auch alte vorbereitete Transaktionen committen oder zurückrollen oder unbenutzte Replikations-Slots löschen." -#: access/transam/multixact.c:2839 +#: access/transam/multixact.c:2941 #, c-format msgid "MultiXact member wraparound protections are disabled because oldest checkpointed MultiXact %u does not exist on disk" msgstr "MultiXact-Member-Wraparound-Schutz ist deaktiviert, weil die älteste gecheckpointete MultiXact %u nicht auf der Festplatte existiert" -#: access/transam/multixact.c:2861 +#: access/transam/multixact.c:2963 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "MultiXact-Member-Wraparound-Schutz ist jetzt aktiviert" -#: access/transam/multixact.c:3252 +#: access/transam/multixact.c:3354 #, c-format msgid "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" msgstr "älteste MultiXact %u nicht gefunden, älteste ist MultiXact %u, Truncate wird ausgelassen" -#: access/transam/multixact.c:3270 +#: access/transam/multixact.c:3372 #, c-format msgid "cannot truncate up to MultiXact %u because it does not exist on disk, skipping truncation" msgstr "kann nicht bis MultiXact %u trunkieren, weil sie nicht auf der Festplatte existiert, Trunkierung wird ausgelassen" -#: access/transam/multixact.c:3287 +#: access/transam/multixact.c:3389 #, c-format msgid "cannot truncate up to MultiXact %u because it has invalid offset, skipping truncation" msgstr "kann nicht bis MultiXact %u trunkieren, weil es ein ungültiges Offset hat, Trunkierung wird ausgelassen" -#: access/transam/multixact.c:3622 +#: access/transam/multixact.c:3726 #, c-format msgid "invalid MultiXactId: %u" msgstr "ungültige MultiXactId: %u" @@ -1953,12 +1953,12 @@ msgid "parallel worker" msgstr "paralleler Arbeitsprozess" -#: access/transam/parallel.c:1351 replication/logical/applyparallelworker.c:897 +#: access/transam/parallel.c:1351 replication/logical/applyparallelworker.c:906 #, c-format msgid "could not map dynamic shared memory segment" msgstr "konnte dynamisches Shared-Memory-Segment nicht mappen" -#: access/transam/parallel.c:1356 replication/logical/applyparallelworker.c:903 +#: access/transam/parallel.c:1356 replication/logical/applyparallelworker.c:912 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "ungültige magische Zahl in dynamischem Shared-Memory-Segment" @@ -2142,12 +2142,12 @@ msgid "transaction identifier \"%s\" is already in use" msgstr "Transaktionsbezeichner »%s« wird bereits verwendet" -#: access/transam/twophase.c:404 access/transam/twophase.c:2531 +#: access/transam/twophase.c:404 access/transam/twophase.c:2532 #, c-format msgid "maximum number of prepared transactions reached" msgstr "maximale Anzahl vorbereiteter Transaktionen erreicht" -#: access/transam/twophase.c:405 access/transam/twophase.c:2532 +#: access/transam/twophase.c:405 access/transam/twophase.c:2533 #, c-format msgid "Increase \"max_prepared_transactions\" (currently %d)." msgstr "Erhöhen Sie »max_prepared_transactions« (aktuell %d)." @@ -2182,123 +2182,123 @@ msgid "prepared transaction with identifier \"%s\" does not exist" msgstr "vorbereitete Transaktion mit Bezeichner »%s« existiert nicht" -#: access/transam/twophase.c:1174 +#: access/transam/twophase.c:1175 #, c-format msgid "two-phase state file maximum length exceeded" msgstr "maximale Länge der Zweiphasen-Statusdatei überschritten" -#: access/transam/twophase.c:1329 +#: access/transam/twophase.c:1330 #, c-format msgid "incorrect size of file \"%s\": %lld byte" msgid_plural "incorrect size of file \"%s\": %lld bytes" msgstr[0] "falsche Größe von Datei »%s«: %lld Byte" msgstr[1] "falsche Größe von Datei »%s«: %lld Bytes" -#: access/transam/twophase.c:1338 +#: access/transam/twophase.c:1339 #, c-format msgid "incorrect alignment of CRC offset for file \"%s\"" msgstr "falsche Ausrichtung des CRC-Offsets für Datei »%s«" -#: access/transam/twophase.c:1356 +#: access/transam/twophase.c:1357 #, c-format msgid "could not read file \"%s\": read %d of %lld" msgstr "konnte Datei »%s« nicht lesen: %d von %lld gelesen" -#: access/transam/twophase.c:1371 +#: access/transam/twophase.c:1372 #, c-format msgid "invalid magic number stored in file \"%s\"" msgstr "ungültige magische Zahl in Datei »%s gespeichert«" -#: access/transam/twophase.c:1377 +#: access/transam/twophase.c:1378 #, c-format msgid "invalid size stored in file \"%s\"" msgstr "ungültige Größe in Datei »%s« gespeichert" -#: access/transam/twophase.c:1389 +#: access/transam/twophase.c:1390 #, c-format msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "berechnete CRC-Prüfsumme stimmt nicht mit dem Wert in Datei »%s« überein" -#: access/transam/twophase.c:1419 access/transam/xlogrecovery.c:565 -#: postmaster/walsummarizer.c:936 replication/logical/logical.c:213 +#: access/transam/twophase.c:1420 access/transam/xlogrecovery.c:565 +#: postmaster/walsummarizer.c:937 replication/logical/logical.c:213 #: replication/walsender.c:854 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Fehlgeschlagen beim Anlegen eines WAL-Leseprozessors." -#: access/transam/twophase.c:1429 +#: access/transam/twophase.c:1430 #, c-format msgid "could not read two-phase state from WAL at %X/%X: %s" msgstr "konnte Zweiphasen-Status nicht aus dem WAL bei %X/%X lesen: %s" -#: access/transam/twophase.c:1434 +#: access/transam/twophase.c:1435 #, c-format msgid "could not read two-phase state from WAL at %X/%X" msgstr "konnte Zweiphasen-Status nicht aus dem WAL bei %X/%X lesen" -#: access/transam/twophase.c:1442 +#: access/transam/twophase.c:1443 #, c-format msgid "expected two-phase state data is not present in WAL at %X/%X" msgstr "erwartete Zweiphasen-Status-Daten sind nicht im WAL bei %X/%X vorhanden" -#: access/transam/twophase.c:1745 +#: access/transam/twophase.c:1746 #, c-format msgid "could not recreate file \"%s\": %m" msgstr "konnte Datei »%s« nicht neu erzeugen: %m" -#: access/transam/twophase.c:1872 +#: access/transam/twophase.c:1873 #, c-format msgid "%u two-phase state file was written for a long-running prepared transaction" msgid_plural "%u two-phase state files were written for long-running prepared transactions" msgstr[0] "%u Zweiphasen-Statusdatei wurde für eine lange laufende vorbereitete Transaktion geschrieben" msgstr[1] "%u Zweiphasen-Statusdateien wurden für lange laufende vorbereitete Transaktionen geschrieben" -#: access/transam/twophase.c:2107 +#: access/transam/twophase.c:2108 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "Wiederherstellung der vorbereiteten Transaktion %u aus dem Shared Memory" -#: access/transam/twophase.c:2200 +#: access/transam/twophase.c:2201 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "entferne abgelaufene Zweiphasen-Statusdatei für Transaktion %u" -#: access/transam/twophase.c:2207 +#: access/transam/twophase.c:2208 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "entferne abgelaufenen Zweiphasen-Status aus dem Speicher für Transaktion %u" -#: access/transam/twophase.c:2220 +#: access/transam/twophase.c:2221 #, c-format msgid "removing future two-phase state file for transaction %u" msgstr "entferne zukünftige Zweiphasen-Statusdatei für Transaktion %u" -#: access/transam/twophase.c:2227 +#: access/transam/twophase.c:2228 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "entferne zukünftigen Zweiphasen-Status aus dem Speicher für Transaktion %u" -#: access/transam/twophase.c:2252 +#: access/transam/twophase.c:2253 #, c-format msgid "corrupted two-phase state file for transaction %u" msgstr "verfälschte Zweiphasen-Statusdatei für Transaktion %u" -#: access/transam/twophase.c:2257 +#: access/transam/twophase.c:2258 #, c-format msgid "corrupted two-phase state in memory for transaction %u" msgstr "verfälschter Zweiphasen-Status im Speicher für Transaktion %u" -#: access/transam/twophase.c:2514 +#: access/transam/twophase.c:2515 #, c-format msgid "could not recover two-phase state file for transaction %u" msgstr "konnte Zweiphasen-Statusdatei für Transaktion %u nicht wiederherstellen" -#: access/transam/twophase.c:2516 +#: access/transam/twophase.c:2517 #, c-format msgid "Two-phase state file has been found in WAL record %X/%X, but this transaction has already been restored from disk." msgstr "Zweiphasen-Statusdatei wurde in WAL-Eintrag %X/%X gefunden, aber diese Transaktion wurde schon von der Festplatte wiederhergestellt." -#: access/transam/twophase.c:2524 storage/file/fd.c:514 utils/fmgr/dfmgr.c:209 +#: access/transam/twophase.c:2525 storage/file/fd.c:514 utils/fmgr/dfmgr.c:209 #, c-format msgid "could not access file \"%s\": %m" msgstr "konnte nicht auf Datei »%s« zugreifen: %m" @@ -2483,7 +2483,7 @@ msgstr "konnte nicht in Logdatei »%s« bei Position %u, Länge %zu schreiben: %m" #: access/transam/xlog.c:3720 access/transam/xlogutils.c:831 -#: replication/walsender.c:3093 +#: replication/walsender.c:3102 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "das angeforderte WAL-Segment %s wurde schon entfernt" @@ -2641,13 +2641,13 @@ #: access/transam/xlog.c:4643 catalog/namespace.c:4699 #: commands/tablespace.c:1210 commands/user.c:2529 commands/variable.c:72 -#: replication/slot.c:2487 tcop/postgres.c:3715 utils/error/elog.c:2247 +#: replication/slot.c:2487 tcop/postgres.c:3719 utils/error/elog.c:2247 #, c-format msgid "List syntax is invalid." msgstr "Die Listensyntax ist ungültig." #: access/transam/xlog.c:4689 commands/user.c:2545 commands/variable.c:173 -#: tcop/postgres.c:3731 utils/error/elog.c:2273 +#: tcop/postgres.c:3735 utils/error/elog.c:2273 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Unbekanntes Schlüsselwort: »%s«." @@ -3675,9 +3675,9 @@ #: catalog/dependency.c:1153 catalog/dependency.c:1160 #: catalog/dependency.c:1171 commands/tablecmds.c:1459 #: commands/tablecmds.c:15152 commands/tablespace.c:460 commands/user.c:1302 -#: commands/vacuum.c:213 commands/view.c:441 executor/execExprInterp.c:4655 -#: executor/execExprInterp.c:4663 libpq/auth.c:332 -#: replication/logical/applyparallelworker.c:1048 replication/slot.c:261 +#: commands/vacuum.c:213 commands/view.c:441 executor/execExprInterp.c:4726 +#: executor/execExprInterp.c:4734 libpq/auth.c:332 +#: replication/logical/applyparallelworker.c:1057 replication/slot.c:261 #: replication/slot.c:2502 replication/slot.c:2504 replication/syncrep.c:1078 #: storage/lmgr/deadlock.c:1134 storage/lmgr/proc.c:1432 utils/misc/guc.c:3169 #: utils/misc/guc.c:3210 utils/misc/guc.c:3285 utils/misc/guc.c:6836 @@ -3739,7 +3739,7 @@ msgid "archive command was terminated by exception 0x%X" msgstr "Archivbefehl wurde durch Ausnahme 0x%X beendet" -#: archive/shell_archive.c:109 postmaster/postmaster.c:3097 +#: archive/shell_archive.c:109 postmaster/postmaster.c:3083 #, 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." @@ -4069,18 +4069,18 @@ msgid "invalid timeline %lld" msgstr "ungültige Zeitleiste %lld" -#: bootstrap/bootstrap.c:239 postmaster/postmaster.c:623 tcop/postgres.c:3946 +#: bootstrap/bootstrap.c:239 postmaster/postmaster.c:624 tcop/postgres.c:3950 #, c-format msgid "--%s requires a value" msgstr "--%s benötigt einen Wert" -#: bootstrap/bootstrap.c:244 postmaster/postmaster.c:628 tcop/postgres.c:3951 +#: bootstrap/bootstrap.c:244 postmaster/postmaster.c:629 tcop/postgres.c:3955 #, c-format msgid "-c %s requires a value" msgstr "-c %s benötigt einen Wert" -#: bootstrap/bootstrap.c:282 postmaster/postmaster.c:746 -#: postmaster/postmaster.c:759 +#: bootstrap/bootstrap.c:282 postmaster/postmaster.c:747 +#: postmaster/postmaster.c:760 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" @@ -4242,7 +4242,7 @@ msgstr "Klausel IN SCHEMA kann nicht verwendet werden, wenn GRANT/REVOKE ON SCHEMAS verwendet wird" #: catalog/aclchk.c:1617 catalog/catalog.c:659 catalog/objectaddress.c:1523 -#: catalog/pg_publication.c:528 commands/analyze.c:380 commands/copy.c:988 +#: catalog/pg_publication.c:528 commands/analyze.c:380 commands/copy.c:989 #: commands/sequence.c:1655 commands/tablecmds.c:7574 commands/tablecmds.c:7728 #: commands/tablecmds.c:7778 commands/tablecmds.c:7852 #: commands/tablecmds.c:7922 commands/tablecmds.c:8052 @@ -4254,8 +4254,8 @@ #: commands/tablecmds.c:13030 commands/tablecmds.c:13191 #: commands/tablecmds.c:14403 commands/tablecmds.c:17030 commands/trigger.c:943 #: parser/analyze.c:2530 parser/parse_relation.c:737 parser/parse_target.c:1067 -#: parser/parse_type.c:144 parser/parse_utilcmd.c:3409 -#: parser/parse_utilcmd.c:3449 parser/parse_utilcmd.c:3491 utils/adt/acl.c:2940 +#: parser/parse_type.c:144 parser/parse_utilcmd.c:3413 +#: parser/parse_utilcmd.c:3453 parser/parse_utilcmd.c:3495 utils/adt/acl.c:2940 #: utils/adt/ruleutils.c:2812 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" @@ -4737,7 +4737,7 @@ msgid "pg_nextoid() can only be used on system catalogs" msgstr "pg_nextoid() kann nur mit Systemkatalogen verwendet werden" -#: catalog/catalog.c:651 parser/parse_utilcmd.c:2270 +#: catalog/catalog.c:651 parser/parse_utilcmd.c:2274 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "Index »%s« gehört nicht zu Tabelle »%s«" @@ -4852,39 +4852,39 @@ msgstr "Spaltenname »%s« mehrmals angegeben" #. translator: first %s is an integer not a name -#: catalog/heap.c:580 +#: catalog/heap.c:584 #, c-format msgid "partition key column %s has pseudo-type %s" msgstr "Partitionierungsschlüsselspalte %s hat Pseudotyp %s" -#: catalog/heap.c:585 +#: catalog/heap.c:589 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "Spalte »%s« hat Pseudotyp %s" -#: catalog/heap.c:616 +#: catalog/heap.c:620 #, c-format msgid "composite type %s cannot be made a member of itself" msgstr "zusammengesetzter Typ %s kann nicht Teil von sich selbst werden" #. translator: first %s is an integer not a name -#: catalog/heap.c:671 +#: catalog/heap.c:685 #, c-format msgid "no collation was derived for partition key column %s with collatable type %s" msgstr "für Partitionierungsschlüsselspalte %s mit sortierbarem Typ %s wurde keine Sortierfolge abgeleitet" -#: catalog/heap.c:677 commands/createas.c:198 commands/createas.c:505 +#: catalog/heap.c:691 commands/createas.c:198 commands/createas.c:505 #, c-format msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "für Spalte »%s« mit sortierbarem Typ %s wurde keine Sortierfolge abgeleitet" -#: catalog/heap.c:1162 catalog/index.c:899 commands/createas.c:401 +#: catalog/heap.c:1176 catalog/index.c:899 commands/createas.c:401 #: commands/tablecmds.c:4171 #, c-format msgid "relation \"%s\" already exists" msgstr "Relation »%s« existiert bereits" -#: catalog/heap.c:1178 catalog/pg_type.c:434 catalog/pg_type.c:805 +#: catalog/heap.c:1192 catalog/pg_type.c:434 catalog/pg_type.c:805 #: catalog/pg_type.c:977 commands/typecmds.c:253 commands/typecmds.c:265 #: commands/typecmds.c:758 commands/typecmds.c:1179 commands/typecmds.c:1405 #: commands/typecmds.c:1585 commands/typecmds.c:2556 @@ -4892,137 +4892,137 @@ msgid "type \"%s\" already exists" msgstr "Typ »%s« existiert bereits" -#: catalog/heap.c:1179 +#: catalog/heap.c:1193 #, c-format msgid "A relation has an associated type of the same name, so you must use a name that doesn't conflict with any existing type." msgstr "Eine Relation hat einen zugehörigen Typ mit dem selben Namen, daher müssen Sie einen Namen wählen, der nicht mit einem bestehenden Typ kollidiert." -#: catalog/heap.c:1219 +#: catalog/heap.c:1233 #, c-format msgid "toast relfilenumber value not set when in binary upgrade mode" msgstr "TOAST-Relfile-Nummer-Wert ist im Binary-Upgrade-Modus nicht gesetzt" -#: catalog/heap.c:1230 +#: catalog/heap.c:1244 #, c-format msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "Heap-OID-Wert für pg_class ist im Binary-Upgrade-Modus nicht gesetzt" -#: catalog/heap.c:1240 +#: catalog/heap.c:1254 #, c-format msgid "relfilenumber value not set when in binary upgrade mode" msgstr "Relfile-Nummer-Wert ist im Binary-Upgrade-Modus nicht gesetzt" -#: catalog/heap.c:2185 +#: catalog/heap.c:2199 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "zur partitionierten Tabelle »%s« kann kein NO-INHERIT-Constraint hinzugefügt werden" -#: catalog/heap.c:2452 +#: catalog/heap.c:2466 #, c-format msgid "check constraint \"%s\" already exists" msgstr "Check-Constraint »%s« existiert bereits" -#: catalog/heap.c:2624 catalog/index.c:913 catalog/pg_constraint.c:725 +#: catalog/heap.c:2638 catalog/index.c:913 catalog/pg_constraint.c:725 #: commands/tablecmds.c:9389 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "Constraint »%s« existiert bereits für Relation »%s«" -#: catalog/heap.c:2631 +#: catalog/heap.c:2645 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "Constraint »%s« kollidiert mit nicht vererbtem Constraint für Relation »%s«" -#: catalog/heap.c:2642 +#: catalog/heap.c:2656 #, c-format msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "Constraint »%s« kollidiert mit vererbtem Constraint für Relation »%s«" -#: catalog/heap.c:2652 +#: catalog/heap.c:2666 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" msgstr "Constraint »%s« kollidiert mit NOT-VALID-Constraint für Relation »%s«" -#: catalog/heap.c:2657 +#: catalog/heap.c:2671 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "Constraint »%s« wird mit geerbter Definition zusammengeführt" -#: catalog/heap.c:2683 catalog/pg_constraint.c:854 commands/tablecmds.c:3074 +#: catalog/heap.c:2697 catalog/pg_constraint.c:854 commands/tablecmds.c:3074 #: commands/tablecmds.c:3377 commands/tablecmds.c:7089 #: commands/tablecmds.c:15971 commands/tablecmds.c:16102 #, c-format msgid "too many inheritance parents" msgstr "zu viele Elterntabellen" -#: catalog/heap.c:2767 +#: catalog/heap.c:2781 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "generierte Spalte »%s« kann nicht im Spaltengenerierungsausdruck verwendet werden" -#: catalog/heap.c:2769 +#: catalog/heap.c:2783 #, c-format msgid "A generated column cannot reference another generated column." msgstr "Eine generierte Spalte kann nicht auf eine andere generierte Spalte verweisen." -#: catalog/heap.c:2775 +#: catalog/heap.c:2789 #, c-format msgid "cannot use whole-row variable in column generation expression" msgstr "Variable mit Verweis auf die ganze Zeile kann nicht im Spaltengenerierungsausdruck verwendet werden" -#: catalog/heap.c:2776 +#: catalog/heap.c:2790 #, c-format msgid "This would cause the generated column to depend on its own value." msgstr "Dadurch würde die generierte Spalte von ihrem eigenen Wert abhängen." -#: catalog/heap.c:2831 +#: catalog/heap.c:2845 #, c-format msgid "generation expression is not immutable" msgstr "Generierungsausdruck ist nicht »immutable«" -#: catalog/heap.c:2859 rewrite/rewriteHandler.c:1279 +#: catalog/heap.c:2873 rewrite/rewriteHandler.c:1313 #, 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:2864 commands/prepare.c:331 parser/analyze.c:2758 +#: catalog/heap.c:2878 commands/prepare.c:331 parser/analyze.c:2758 #: parser/parse_target.c:592 parser/parse_target.c:882 -#: parser/parse_target.c:892 rewrite/rewriteHandler.c:1284 +#: parser/parse_target.c:892 rewrite/rewriteHandler.c:1318 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Sie müssen den Ausdruck umschreiben oder eine Typumwandlung vornehmen." -#: catalog/heap.c:2911 +#: catalog/heap.c:2925 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "nur Verweise auf Tabelle »%s« sind im Check-Constraint zugelassen" -#: catalog/heap.c:3217 +#: catalog/heap.c:3231 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "nicht unterstützte Kombination aus ON COMMIT und Fremdschlüssel" -#: catalog/heap.c:3218 +#: catalog/heap.c:3232 #, c-format msgid "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT setting." msgstr "Tabelle »%s« verweist auf »%s«, aber sie haben nicht die gleiche ON-COMMIT-Einstellung." -#: catalog/heap.c:3223 +#: catalog/heap.c:3237 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "kann eine Tabelle, die in einen Fremdschlüssel-Constraint eingebunden ist, nicht leeren" -#: catalog/heap.c:3224 +#: catalog/heap.c:3238 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "Tabelle »%s« verweist auf »%s«." -#: catalog/heap.c:3226 +#: catalog/heap.c:3240 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Leeren Sie die Tabelle »%s« gleichzeitig oder verwenden Sie TRUNCATE ... CASCADE." -#: catalog/index.c:219 parser/parse_utilcmd.c:2176 +#: catalog/index.c:219 parser/parse_utilcmd.c:2180 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "mehrere Primärschlüssel für Tabelle »%s« nicht erlaubt" @@ -5314,7 +5314,7 @@ msgstr "Benutzerabbildung für Benutzer »%s« auf Server »%s« existiert nicht" #: catalog/objectaddress.c:1834 commands/foreigncmds.c:441 -#: commands/foreigncmds.c:1004 commands/foreigncmds.c:1367 +#: commands/foreigncmds.c:1009 commands/foreigncmds.c:1372 #: foreign/foreign.c:713 #, c-format msgid "server \"%s\" does not exist" @@ -5776,7 +5776,7 @@ msgid "return type of inverse transition function %s is not %s" msgstr "Rückgabetyp der inversen Übergangsfunktion %s ist nicht %s" -#: catalog/pg_aggregate.c:352 executor/nodeWindowAgg.c:2991 +#: catalog/pg_aggregate.c:352 executor/nodeWindowAgg.c:3039 #, c-format msgid "strictness of aggregate's forward and inverse transition functions must match" msgstr "Striktheit der vorwärtigen und inversen Übergangsfunktionen einer Aggregatfunktion müssen übereinstimmen" @@ -6543,7 +6543,7 @@ msgid "foreign-data wrapper \"%s\" already exists" msgstr "Fremddaten-Wrapper »%s« existiert bereits" -#: commands/alter.c:89 commands/foreigncmds.c:895 +#: commands/alter.c:89 commands/foreigncmds.c:900 #, c-format msgid "server \"%s\" already exists" msgstr "Server »%s« existiert bereits" @@ -7033,160 +7033,160 @@ msgid "Only roles with privileges of the \"%s\" role may COPY to a file." msgstr "Nur Rollen mit den Privilegien der Rolle »%s« können mit COPY in eine Datei schreiben." -#: commands/copy.c:180 +#: commands/copy.c:181 #, c-format msgid "generated columns are not supported in COPY FROM WHERE conditions" msgstr "generierte Spalten werden in COPY-FROM-WHERE-Bedingungen nicht unterstützt" -#: commands/copy.c:181 commands/tablecmds.c:12858 commands/tablecmds.c:18092 +#: commands/copy.c:182 commands/tablecmds.c:12858 commands/tablecmds.c:18092 #: commands/tablecmds.c:18171 commands/trigger.c:657 -#: rewrite/rewriteHandler.c:944 rewrite/rewriteHandler.c:979 +#: rewrite/rewriteHandler.c:978 rewrite/rewriteHandler.c:1013 #, c-format msgid "Column \"%s\" is a generated column." msgstr "Spalte »%s« ist eine generierte Spalte." -#: commands/copy.c:230 +#: commands/copy.c:231 #, c-format msgid "COPY FROM not supported with row-level security" msgstr "COPY FROM wird nicht unterstützt mit Sicherheit auf Zeilenebene" -#: commands/copy.c:231 +#: commands/copy.c:232 #, c-format msgid "Use INSERT statements instead." msgstr "Verwenden Sie stattdessen INSERT-Anweisungen." -#: commands/copy.c:412 +#: commands/copy.c:413 #, c-format msgid "cannot use \"%s\" with HEADER in COPY TO" msgstr "»%s« kann nicht mit HEADER in COPY TO verwendet werden" -#: commands/copy.c:421 +#: commands/copy.c:422 #, c-format msgid "%s requires a Boolean value or \"match\"" msgstr "%s erfordert einen Boole’schen Wert oder »match«" #. translator: first %s is the name of a COPY option, e.g. ON_ERROR, #. second %s is a COPY with direction, e.g. COPY TO -#: commands/copy.c:439 commands/copy.c:819 commands/copy.c:835 -#: commands/copy.c:852 commands/copy.c:878 commands/copy.c:888 +#: commands/copy.c:440 commands/copy.c:820 commands/copy.c:836 +#: commands/copy.c:853 commands/copy.c:879 commands/copy.c:889 #, c-format msgid "COPY %s cannot be used with %s" msgstr "COPY %s kann nicht mit %s verwendet werden" #. translator: first %s is the name of a COPY option, e.g. ON_ERROR -#: commands/copy.c:453 commands/copy.c:478 +#: commands/copy.c:454 commands/copy.c:479 #, c-format msgid "COPY %s \"%s\" not recognized" msgstr "COPY %s »%s« nicht erkannt" -#: commands/copy.c:539 +#: commands/copy.c:540 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "COPY-Format »%s« nicht erkannt" -#: commands/copy.c:597 commands/copy.c:612 commands/copy.c:627 -#: commands/copy.c:646 +#: commands/copy.c:598 commands/copy.c:613 commands/copy.c:628 +#: commands/copy.c:647 #, c-format msgid "argument to option \"%s\" must be a list of column names" msgstr "Argument von Option »%s« muss eine Liste aus Spaltennamen sein" -#: commands/copy.c:658 +#: commands/copy.c:659 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "Argument von Option »%s« muss ein gültiger Kodierungsname sein" -#: commands/copy.c:679 commands/dbcommands.c:866 commands/dbcommands.c:2381 +#: commands/copy.c:680 commands/dbcommands.c:866 commands/dbcommands.c:2381 #, c-format msgid "option \"%s\" not recognized" msgstr "Option »%s« nicht erkannt" #. translator: %s is the name of a COPY option, e.g. ON_ERROR -#: commands/copy.c:692 commands/copy.c:697 commands/copy.c:702 -#: commands/copy.c:777 +#: commands/copy.c:693 commands/copy.c:698 commands/copy.c:703 +#: commands/copy.c:778 #, c-format msgid "cannot specify %s in BINARY mode" msgstr "%s kann nicht im BINARY-Modus angegeben werden" -#: commands/copy.c:707 +#: commands/copy.c:708 #, c-format msgid "only ON_ERROR STOP is allowed in BINARY mode" msgstr "nur ON_ERROR STOP ist im BINARY-Modus erlaubt" -#: commands/copy.c:729 +#: commands/copy.c:730 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "DELIMITER für COPY muss ein einzelnes Ein-Byte-Zeichen sein" -#: commands/copy.c:736 +#: commands/copy.c:737 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "COPY-Trennzeichen kann nicht Newline oder Carriage Return sein" -#: commands/copy.c:742 +#: commands/copy.c:743 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "COPY NULL-Darstellung kann nicht Newline oder Carriage Return enthalten" -#: commands/copy.c:752 +#: commands/copy.c:753 #, c-format msgid "COPY default representation cannot use newline or carriage return" msgstr "COPY DEFAULT-Darstellung kann nicht Newline oder Carriage Return enthalten" -#: commands/copy.c:770 +#: commands/copy.c:771 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "DELIMITER für COPY darf nicht »%s« sein" #. translator: %s is the name of a COPY option, e.g. ON_ERROR -#: commands/copy.c:784 commands/copy.c:801 commands/copy.c:813 -#: commands/copy.c:828 commands/copy.c:844 +#: commands/copy.c:785 commands/copy.c:802 commands/copy.c:814 +#: commands/copy.c:829 commands/copy.c:845 #, c-format msgid "COPY %s requires CSV mode" msgstr "COPY %s benötigt CSV-Modus" -#: commands/copy.c:789 +#: commands/copy.c:790 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "Quote-Zeichen für COPY muss ein einzelnes Ein-Byte-Zeichen sein" -#: commands/copy.c:794 +#: commands/copy.c:795 #, c-format msgid "COPY delimiter and quote must be different" msgstr "DELIMITER und QUOTE für COPY müssen verschieden sein" -#: commands/copy.c:806 +#: commands/copy.c:807 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "Escape-Zeichen für COPY muss ein einzelnes Ein-Byte-Zeichen sein" #. translator: %s is the name of a COPY option, e.g. NULL -#: commands/copy.c:860 commands/copy.c:896 +#: commands/copy.c:861 commands/copy.c:897 #, c-format msgid "COPY delimiter character must not appear in the %s specification" msgstr "Trennzeichen für COPY darf nicht in der %s-Darstellung erscheinen" #. translator: %s is the name of a COPY option, e.g. NULL -#: commands/copy.c:869 commands/copy.c:905 +#: commands/copy.c:870 commands/copy.c:906 #, c-format msgid "CSV quote character must not appear in the %s specification" msgstr "CSV-Quote-Zeichen darf nicht in der %s-Darstellung erscheinen" -#: commands/copy.c:914 +#: commands/copy.c:915 #, c-format msgid "NULL specification and DEFAULT specification cannot be the same" msgstr "NULL-Darstellung und DEFAULT-Darstellung können nicht gleich sein" -#: commands/copy.c:976 +#: commands/copy.c:977 #, c-format msgid "column \"%s\" is a generated column" msgstr "Spalte »%s« ist eine generierte Spalte" -#: commands/copy.c:978 +#: commands/copy.c:979 #, c-format msgid "Generated columns cannot be used in COPY." msgstr "Generierte Spalten können nicht in COPY verwendet werden." -#: commands/copy.c:993 commands/indexcmds.c:1890 commands/statscmds.c:260 +#: commands/copy.c:994 commands/indexcmds.c:1890 commands/statscmds.c:260 #: commands/tablecmds.c:2526 commands/tablecmds.c:2997 #: commands/tablecmds.c:3808 parser/parse_relation.c:3692 #: parser/parse_relation.c:3702 parser/parse_relation.c:3720 @@ -7196,7 +7196,7 @@ msgid "column \"%s\" does not exist" msgstr "Spalte »%s« existiert nicht" -#: commands/copy.c:1000 commands/tablecmds.c:2552 commands/trigger.c:952 +#: commands/copy.c:1001 commands/tablecmds.c:2552 commands/trigger.c:952 #: parser/parse_target.c:1083 parser/parse_target.c:1094 #, c-format msgid "column \"%s\" specified more than once" @@ -7347,7 +7347,7 @@ msgstr "konnte nicht aus COPY-Datei lesen: %m" #: commands/copyfromparse.c:278 commands/copyfromparse.c:303 -#: replication/walsender.c:774 replication/walsender.c:800 tcop/postgres.c:381 +#: replication/walsender.c:774 replication/walsender.c:800 tcop/postgres.c:382 #, c-format msgid "unexpected EOF on client connection with an open transaction" msgstr "unerwartetes EOF auf Client-Verbindung mit einer offenen Transaktion" @@ -7832,7 +7832,7 @@ msgstr "Datenverzeichnis mit der angegebenen OID %u existiert bereits" #: commands/dbcommands.c:1571 commands/dbcommands.c:1586 -#: utils/adt/pg_locale.c:2591 +#: utils/adt/pg_locale.c:2597 #, c-format msgid "encoding \"%s\" does not match locale \"%s\"" msgstr "Kodierung »%s« stimmt nicht mit Locale »%s« überein" @@ -8153,7 +8153,7 @@ msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "Fremddaten-Wrapper »%s« existiert nicht, wird übersprungen" -#: commands/dropcmds.c:448 commands/foreigncmds.c:1371 +#: commands/dropcmds.c:448 commands/foreigncmds.c:1376 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "Server »%s« existiert nicht, wird übersprungen" @@ -8245,7 +8245,7 @@ msgid "%s can only be called in a table_rewrite event trigger function" msgstr "%s kann nur in einer table_rewrite-Ereignistriggerfunktion aufgerufen werden" -#: commands/event_trigger.c:2063 +#: commands/event_trigger.c:2066 #, c-format msgid "%s can only be called in an event trigger function" msgstr "%s kann nur in einer Ereignistriggerfunktion aufgerufen werden" @@ -8628,47 +8628,47 @@ msgid "changing the foreign-data wrapper handler can change behavior of existing foreign tables" msgstr "das Ändern des Handlers des Fremddaten-Wrappers kann das Verhalten von bestehenden Fremdtabellen verändern" -#: commands/foreigncmds.c:756 +#: commands/foreigncmds.c:761 #, c-format msgid "changing the foreign-data wrapper validator can cause the options for dependent objects to become invalid" msgstr "durch Ändern des Validators des Fremddaten-Wrappers können die Optionen von abhängigen Objekten ungültig werden" -#: commands/foreigncmds.c:887 +#: commands/foreigncmds.c:892 #, c-format msgid "server \"%s\" already exists, skipping" msgstr "Server »%s« existiert bereits, wird übersprungen" -#: commands/foreigncmds.c:1155 +#: commands/foreigncmds.c:1160 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\", skipping" msgstr "Benutzerabbildung für »%s« existiert bereits für Server »%s«, wird übersprungen" -#: commands/foreigncmds.c:1165 +#: commands/foreigncmds.c:1170 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\"" msgstr "Benutzerabbildung für »%s« existiert bereits für Server »%s«" -#: commands/foreigncmds.c:1265 commands/foreigncmds.c:1385 +#: commands/foreigncmds.c:1270 commands/foreigncmds.c:1390 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\"" msgstr "Benutzerabbildung für »%s« existiert nicht für Server »%s«" -#: commands/foreigncmds.c:1390 +#: commands/foreigncmds.c:1395 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "Benutzerabbildung für »%s« existiert nicht für Server »%s«, wird übersprungen" -#: commands/foreigncmds.c:1518 foreign/foreign.c:404 +#: commands/foreigncmds.c:1523 foreign/foreign.c:404 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "Fremddaten-Wrapper »%s« hat keinen Handler" -#: commands/foreigncmds.c:1524 +#: commands/foreigncmds.c:1529 #, c-format msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" msgstr "Fremddaten-Wrapper »%s« unterstützt IMPORT FOREIGN SCHEMA nicht" -#: commands/foreigncmds.c:1626 +#: commands/foreigncmds.c:1631 #, c-format msgid "importing foreign table \"%s\"" msgstr "importiere Fremdtabelle »%s«" @@ -9151,8 +9151,8 @@ msgid "functions in index predicate must be marked IMMUTABLE" msgstr "Funktionen im Indexprädikat müssen als IMMUTABLE markiert sein" -#: commands/indexcmds.c:1885 parser/parse_utilcmd.c:2519 -#: parser/parse_utilcmd.c:2654 +#: commands/indexcmds.c:1885 parser/parse_utilcmd.c:2523 +#: parser/parse_utilcmd.c:2658 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "Spalte »%s«, die im Schlüssel verwendet wird, existiert nicht" @@ -9193,7 +9193,7 @@ msgstr "konnte die für den Indexausdruck zu verwendende Sortierfolge nicht bestimmen" #: commands/indexcmds.c:2028 commands/tablecmds.c:18259 commands/typecmds.c:811 -#: parser/parse_expr.c:2794 parser/parse_type.c:568 parser/parse_utilcmd.c:3771 +#: parser/parse_expr.c:2794 parser/parse_type.c:568 parser/parse_utilcmd.c:3775 #: utils/adt/misc.c:630 #, c-format msgid "collations are not supported by type %s" @@ -9778,8 +9778,8 @@ msgid "must be superuser to create custom procedural language" msgstr "nur Superuser können maßgeschneiderte prozedurale Sprachen erzeugen" -#: commands/publicationcmds.c:129 postmaster/postmaster.c:1110 -#: postmaster/postmaster.c:1212 utils/init/miscinit.c:1866 +#: commands/publicationcmds.c:129 postmaster/postmaster.c:1111 +#: postmaster/postmaster.c:1213 utils/init/miscinit.c:1866 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "ungültige Listensyntax für Parameter »%s«" @@ -9920,7 +9920,7 @@ msgstr "In einer FOR-ALL-TABLES-Publikation können keine Tabellen hinzugefügt oder entfernt werden." #: commands/publicationcmds.c:1390 commands/publicationcmds.c:1429 -#: commands/publicationcmds.c:1966 utils/cache/lsyscache.c:3634 +#: commands/publicationcmds.c:1966 utils/cache/lsyscache.c:3672 #, c-format msgid "publication \"%s\" does not exist" msgstr "Publikation »%s« existiert nicht" @@ -10290,7 +10290,7 @@ msgstr "Um die Replikation einzuleiten, müssen Sie den Replikations-Slot manuell erzeugen, die Subskription aktivieren und die Subskription auffrischen." #: commands/subscriptioncmds.c:1109 commands/subscriptioncmds.c:1592 -#: commands/subscriptioncmds.c:1975 utils/cache/lsyscache.c:3684 +#: commands/subscriptioncmds.c:1975 utils/cache/lsyscache.c:3722 #, c-format msgid "subscription \"%s\" does not exist" msgstr "Subskription »%s« existiert nicht" @@ -10497,7 +10497,7 @@ msgstr "Verwenden Sie DROP MATERIALIZED VIEW, um eine materialisierte Sicht zu löschen." #: commands/tablecmds.c:279 commands/tablecmds.c:303 commands/tablecmds.c:19891 -#: parser/parse_utilcmd.c:2251 +#: parser/parse_utilcmd.c:2255 #, c-format msgid "index \"%s\" does not exist" msgstr "Index »%s« existiert nicht" @@ -10631,8 +10631,8 @@ msgid "cannot inherit from partition \"%s\"" msgstr "von Partition »%s« kann nicht geerbt werden" -#: commands/tablecmds.c:2619 parser/parse_utilcmd.c:2481 -#: parser/parse_utilcmd.c:2623 +#: commands/tablecmds.c:2619 parser/parse_utilcmd.c:2485 +#: parser/parse_utilcmd.c:2627 #, c-format msgid "inherited relation \"%s\" is not a table or foreign table" msgstr "geerbte Relation »%s« ist keine Tabelle oder Fremdtabelle" @@ -11886,54 +11886,54 @@ msgid "partition \"%s\" was removed concurrently" msgstr "Partition »%s« wurde nebenläufig entfernt" -#: commands/tablecmds.c:19925 commands/tablecmds.c:19945 -#: commands/tablecmds.c:19966 commands/tablecmds.c:19985 -#: commands/tablecmds.c:20027 +#: commands/tablecmds.c:19928 commands/tablecmds.c:19948 +#: commands/tablecmds.c:19969 commands/tablecmds.c:19988 +#: commands/tablecmds.c:20038 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "kann Index »%s« nicht als Partition an Index »%s« anfügen" -#: commands/tablecmds.c:19928 +#: commands/tablecmds.c:19931 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "Index »%s« ist bereits an einen anderen Index angefügt." -#: commands/tablecmds.c:19948 +#: commands/tablecmds.c:19951 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "Index »%s« ist kein Index irgendeiner Partition von Tabelle »%s«." -#: commands/tablecmds.c:19969 +#: commands/tablecmds.c:19972 #, c-format msgid "The index definitions do not match." msgstr "Die Indexdefinitionen stimmen nicht überein." -#: commands/tablecmds.c:19988 +#: commands/tablecmds.c:19991 #, c-format msgid "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint exists for index \"%s\"." msgstr "Der Index »%s« gehört zu einem Constraint in Tabelle »%s«, aber kein Constraint existiert für Index »%s«." -#: commands/tablecmds.c:20030 +#: commands/tablecmds.c:20041 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "Ein anderer Index ist bereits für Partition »%s« angefügt." -#: commands/tablecmds.c:20266 +#: commands/tablecmds.c:20277 #, c-format msgid "column data type %s does not support compression" msgstr "Spaltendatentyp %s unterstützt keine Komprimierung" -#: commands/tablecmds.c:20273 +#: commands/tablecmds.c:20284 #, c-format msgid "invalid compression method \"%s\"" msgstr "ungültige Komprimierungsmethode »%s«" -#: commands/tablecmds.c:20299 +#: commands/tablecmds.c:20310 #, c-format msgid "invalid storage type \"%s\"" msgstr "ungültiger Storage-Typ »%s«" -#: commands/tablecmds.c:20309 +#: commands/tablecmds.c:20320 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "Spaltendatentyp %s kann nur Storage-Typ PLAIN" @@ -12309,7 +12309,7 @@ #: commands/trigger.c:3428 executor/nodeModifyTable.c:1563 #: executor/nodeModifyTable.c:1637 executor/nodeModifyTable.c:2400 #: executor/nodeModifyTable.c:2491 executor/nodeModifyTable.c:3146 -#: executor/nodeModifyTable.c:3338 +#: executor/nodeModifyTable.c:3343 #, c-format msgid "Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows." msgstr "Verwenden Sie einen AFTER-Trigger anstelle eines BEFORE-Triggers, um Änderungen an andere Zeilen zu propagieren." @@ -12317,7 +12317,7 @@ #: commands/trigger.c:3470 executor/nodeLockRows.c:228 #: executor/nodeLockRows.c:237 executor/nodeModifyTable.c:335 #: executor/nodeModifyTable.c:1579 executor/nodeModifyTable.c:2417 -#: executor/nodeModifyTable.c:2641 +#: executor/nodeModifyTable.c:2641 executor/nodeModifyTable.c:3184 #, c-format msgid "could not serialize access due to concurrent update" msgstr "konnte Zugriff nicht serialisieren wegen gleichzeitiger Aktualisierung" @@ -13490,19 +13490,19 @@ 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:2555 +#: executor/execCurrent.c:280 executor/execExprInterp.c:2563 #, 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:2567 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2575 #, c-format msgid "no value found for parameter %d" msgstr "kein Wert für Parameter %d gefunden" #: executor/execExpr.c:642 executor/execExpr.c:649 executor/execExpr.c:655 -#: executor/execExprInterp.c:4851 executor/execExprInterp.c:4868 -#: executor/execExprInterp.c:4967 executor/nodeModifyTable.c:204 +#: executor/execExprInterp.c:4922 executor/execExprInterp.c:4939 +#: executor/execExprInterp.c:5038 executor/nodeModifyTable.c:204 #: executor/nodeModifyTable.c:223 executor/nodeModifyTable.c:240 #: executor/nodeModifyTable.c:250 executor/nodeModifyTable.c:260 #, c-format @@ -13519,7 +13519,7 @@ 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:656 executor/execExprInterp.c:4869 +#: executor/execExpr.c:656 executor/execExprInterp.c:4940 #: executor/nodeModifyTable.c:251 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." @@ -13564,23 +13564,23 @@ msgid "type %s does not support subscripted assignment" msgstr "Typ %s unterstützt Wertzuweisungen in Elemente nicht" -#: executor/execExprInterp.c:2019 +#: executor/execExprInterp.c:2027 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "Attribut %d von Typ %s wurde gelöscht" -#: executor/execExprInterp.c:2025 +#: executor/execExprInterp.c:2033 #, c-format msgid "attribute %d of type %s has wrong type" msgstr "Attribut %d von Typ %s hat falschen Typ" -#: executor/execExprInterp.c:2027 executor/execExprInterp.c:3226 -#: executor/execExprInterp.c:3272 +#: executor/execExprInterp.c:2035 executor/execExprInterp.c:3234 +#: executor/execExprInterp.c:3280 #, c-format msgid "Table has type %s, but query expects %s." msgstr "Tabelle hat Typ %s, aber Anfrage erwartet %s." -#: executor/execExprInterp.c:2107 utils/adt/expandedrecord.c:99 +#: executor/execExprInterp.c:2115 utils/adt/expandedrecord.c:99 #: utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1752 #: utils/cache/typcache.c:1911 utils/cache/typcache.c:2058 #: utils/fmgr/funcapi.c:569 @@ -13588,22 +13588,22 @@ msgid "type %s is not composite" msgstr "Typ %s ist kein zusammengesetzter Typ" -#: executor/execExprInterp.c:2710 +#: executor/execExprInterp.c:2718 #, 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:2923 +#: executor/execExprInterp.c:2931 #, c-format msgid "cannot merge incompatible arrays" msgstr "kann inkompatible Arrays nicht verschmelzen" -#: executor/execExprInterp.c:2924 +#: executor/execExprInterp.c:2932 #, 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:2945 utils/adt/arrayfuncs.c:1305 +#: executor/execExprInterp.c:2953 utils/adt/arrayfuncs.c:1305 #: utils/adt/arrayfuncs.c:3503 utils/adt/arrayfuncs.c:5599 #: utils/adt/arrayfuncs.c:6118 utils/adt/arraysubs.c:150 #: utils/adt/arraysubs.c:488 @@ -13611,12 +13611,12 @@ msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "Anzahl der Arraydimensionen (%d) überschreitet erlaubtes Maximum (%d)" -#: executor/execExprInterp.c:2965 executor/execExprInterp.c:3000 +#: executor/execExprInterp.c:2973 executor/execExprInterp.c:3008 #, 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:2977 utils/adt/array_expanded.c:274 +#: executor/execExprInterp.c:2985 utils/adt/array_expanded.c:274 #: utils/adt/arrayfuncs.c:335 utils/adt/arrayfuncs.c:494 #: utils/adt/arrayfuncs.c:727 utils/adt/arrayfuncs.c:1533 #: utils/adt/arrayfuncs.c:2341 utils/adt/arrayfuncs.c:2356 @@ -13631,45 +13631,45 @@ msgid "array size exceeds the maximum allowed (%d)" msgstr "Arraygröße überschreitet erlaubtes Maximum (%d)" -#: executor/execExprInterp.c:3225 executor/execExprInterp.c:3271 +#: executor/execExprInterp.c:3233 executor/execExprInterp.c:3279 #, c-format msgid "attribute %d has wrong type" msgstr "Attribut %d hat falschen Typ" -#: executor/execExprInterp.c:3857 utils/adt/domains.c:158 +#: executor/execExprInterp.c:3928 utils/adt/domains.c:158 #, c-format msgid "domain %s does not allow null values" msgstr "Domäne %s erlaubt keine NULL-Werte" -#: executor/execExprInterp.c:3872 utils/adt/domains.c:196 +#: executor/execExprInterp.c:3943 utils/adt/domains.c:196 #, 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:4447 +#: executor/execExprInterp.c:4518 #, c-format msgid "no SQL/JSON item found for specified path of column \"%s\"" msgstr "kein SQL/JSON-Item für angegebenen Pfad von Spalte »%s« gefunden" -#: executor/execExprInterp.c:4452 +#: executor/execExprInterp.c:4523 #, c-format msgid "no SQL/JSON item found for specified path" msgstr "kein SQL/JSON-Item für angegebenen Pfad gefunden" #. translator: first %s is a SQL/JSON clause (e.g. ON ERROR) -#: executor/execExprInterp.c:4652 executor/execExprInterp.c:4660 +#: executor/execExprInterp.c:4723 executor/execExprInterp.c:4731 #, c-format msgid "could not coerce %s expression (%s) to the RETURNING type" msgstr "konnte %s-Ausdruck (%s) nicht in RETURNING-Typ umwandeln" -#: executor/execExprInterp.c:4852 +#: executor/execExprInterp.c:4923 #, 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:4968 executor/execSRF.c:977 +#: executor/execExprInterp.c:5039 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." @@ -13872,8 +13872,8 @@ msgstr "gleichzeitiges Löschen, versuche erneut" #: executor/execReplication.c:352 parser/parse_cte.c:303 -#: parser/parse_oper.c:221 utils/adt/array_userfuncs.c:1334 -#: utils/adt/array_userfuncs.c:1477 utils/adt/arrayfuncs.c:3858 +#: parser/parse_oper.c:221 utils/adt/array_userfuncs.c:1343 +#: utils/adt/array_userfuncs.c:1486 utils/adt/arrayfuncs.c:3858 #: utils/adt/arrayfuncs.c:4413 utils/adt/arrayfuncs.c:6434 #: utils/adt/rowtypes.c:1220 #, c-format @@ -14072,7 +14072,7 @@ msgid "return type %s is not supported for SQL functions" msgstr "Rückgabetyp %s wird von SQL-Funktionen nicht unterstützt" -#: executor/nodeAgg.c:3936 executor/nodeWindowAgg.c:2975 +#: executor/nodeAgg.c:3936 executor/nodeWindowAgg.c:3023 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "Aggregatfunktion %u muss kompatiblen Eingabe- und Übergangstyp haben" @@ -14159,7 +14159,7 @@ #. translator: %s is a SQL command name #: executor/nodeModifyTable.c:2619 executor/nodeModifyTable.c:3152 -#: executor/nodeModifyTable.c:3344 +#: executor/nodeModifyTable.c:3349 #, c-format msgid "%s command cannot affect row a second time" msgstr "Befehl in %s kann eine Zeile nicht ein zweites Mal ändern" @@ -14169,17 +14169,17 @@ msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." msgstr "Stellen Sie sicher, dass keine im selben Befehl fürs Einfügen vorgesehene Zeilen doppelte Werte haben, die einen Constraint verletzen würden." -#: executor/nodeModifyTable.c:3145 executor/nodeModifyTable.c:3337 +#: executor/nodeModifyTable.c:3145 executor/nodeModifyTable.c:3342 #, c-format msgid "tuple to be updated or deleted was already modified by an operation triggered by the current command" msgstr "das zu aktualisierende oder zu löschende Tupel wurde schon durch eine vom aktuellen Befehl ausgelöste Operation verändert" -#: executor/nodeModifyTable.c:3154 executor/nodeModifyTable.c:3346 +#: executor/nodeModifyTable.c:3154 executor/nodeModifyTable.c:3351 #, c-format msgid "Ensure that not more than one source row matches any one target row." msgstr "Stellen Sie sicher, dass nicht mehr als eine Quellzeile auf jede Zielzeile passt." -#: executor/nodeModifyTable.c:3223 +#: executor/nodeModifyTable.c:3228 #, c-format msgid "tuple to be merged was already moved to another partition due to concurrent update" msgstr "das zu mergende Tupel wurde schon durch ein gleichzeitiges Update in eine andere Partition verschoben" @@ -14225,32 +14225,32 @@ msgid "null is not allowed in column \"%s\"" msgstr "NULL ist in Spalte »%s« nicht erlaubt" -#: executor/nodeWindowAgg.c:356 +#: executor/nodeWindowAgg.c:357 #, c-format msgid "moving-aggregate transition function must not return null" msgstr "Moving-Aggregat-Übergangsfunktion darf nicht NULL zurückgeben" -#: executor/nodeWindowAgg.c:2083 +#: executor/nodeWindowAgg.c:2131 #, c-format msgid "frame starting offset must not be null" msgstr "Frame-Start-Offset darf nicht NULL sein" -#: executor/nodeWindowAgg.c:2096 +#: executor/nodeWindowAgg.c:2144 #, c-format msgid "frame starting offset must not be negative" msgstr "Frame-Start-Offset darf nicht negativ sein" -#: executor/nodeWindowAgg.c:2108 +#: executor/nodeWindowAgg.c:2156 #, c-format msgid "frame ending offset must not be null" msgstr "Frame-Ende-Offset darf nicht NULL sein" -#: executor/nodeWindowAgg.c:2121 +#: executor/nodeWindowAgg.c:2169 #, c-format msgid "frame ending offset must not be negative" msgstr "Frame-Ende-Offset darf nicht negativ sein" -#: executor/nodeWindowAgg.c:2891 +#: executor/nodeWindowAgg.c:2939 #, c-format msgid "aggregate function %s does not support use as a window function" msgstr "Aggregatfunktion %s unterstützt die Verwendung als Fensterfunktion nicht" @@ -14477,7 +14477,7 @@ msgid "duplicate trigger events specified" msgstr "mehrere Trigger-Ereignisse angegeben" -#: gram.y:6114 parser/parse_utilcmd.c:3692 parser/parse_utilcmd.c:3718 +#: gram.y:6114 parser/parse_utilcmd.c:3696 parser/parse_utilcmd.c:3722 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "Constraint, der als INITIALLY DEFERRED deklariert wurde, muss DEFERRABLE sein" @@ -14661,8 +14661,8 @@ msgid "improper use of \"*\"" msgstr "unzulässige Verwendung von »*«" -#: gram.y:18742 gram.y:18759 tsearch/spell.c:962 tsearch/spell.c:978 -#: tsearch/spell.c:994 tsearch/spell.c:1010 tsearch/spell.c:1075 +#: gram.y:18742 gram.y:18759 tsearch/spell.c:971 tsearch/spell.c:988 +#: tsearch/spell.c:1005 tsearch/spell.c:1022 tsearch/spell.c:1087 #, c-format msgid "syntax error" msgstr "Syntaxfehler" @@ -16455,7 +16455,7 @@ msgid "could not receive data from client: %m" msgstr "konnte Daten vom Client nicht empfangen: %m" -#: libpq/pqcomm.c:1149 tcop/postgres.c:4533 +#: libpq/pqcomm.c:1149 tcop/postgres.c:4537 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "Verbindung wird abgebrochen, weil Protokollsynchronisierung verloren wurde" @@ -16501,7 +16501,7 @@ msgstr "keine Daten in Message übrig" #: libpq/pqformat.c:515 libpq/pqformat.c:533 libpq/pqformat.c:554 -#: utils/adt/array_userfuncs.c:797 utils/adt/arrayfuncs.c:1481 +#: utils/adt/array_userfuncs.c:798 utils/adt/arrayfuncs.c:1481 #: utils/adt/rowtypes.c:613 #, c-format msgid "insufficient data left in message" @@ -16812,7 +16812,7 @@ msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "ExtensibleNodeMethods »%s« wurde nicht registriert" -#: nodes/makefuncs.c:152 nodes/makefuncs.c:178 statistics/extended_stats.c:2290 +#: nodes/makefuncs.c:152 nodes/makefuncs.c:178 statistics/extended_stats.c:2300 #, c-format msgid "relation \"%s\" does not have a composite type" msgstr "Relation »%s« hat keinen zusammengesetzten Typ" @@ -16841,7 +16841,7 @@ msgstr "FULL JOIN wird nur für Merge- oder Hash-Verbund-fähige Verbundbedingungen unterstützt" #: optimizer/plan/createplan.c:7177 parser/parse_merge.c:203 -#: rewrite/rewriteHandler.c:1683 +#: rewrite/rewriteHandler.c:1717 #, c-format msgid "cannot execute MERGE on relation \"%s\"" msgstr "MERGE kann für Relation »%s« nicht ausgeführt werden" @@ -18944,7 +18944,7 @@ msgid "inconsistent types deduced for parameter $%d" msgstr "inkonsistente Typen für Parameter $%d ermittelt" -#: parser/parse_param.c:309 tcop/postgres.c:744 +#: parser/parse_param.c:309 tcop/postgres.c:745 #, c-format msgid "could not determine data type of parameter $%d" msgstr "konnte Datentyp von Parameter $%d nicht ermitteln" @@ -19298,229 +19298,229 @@ msgid "Index \"%s\" contains a whole-row table reference." msgstr "Index »%s« enthält einen Verweis auf die ganze Zeile der Tabelle." -#: parser/parse_utilcmd.c:2242 +#: parser/parse_utilcmd.c:2246 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "bestehender Index kann nicht in CREATE TABLE verwendet werden" -#: parser/parse_utilcmd.c:2262 +#: parser/parse_utilcmd.c:2266 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "Index »%s« gehört bereits zu einem Constraint" -#: parser/parse_utilcmd.c:2283 +#: parser/parse_utilcmd.c:2287 #, c-format msgid "\"%s\" is not a unique index" msgstr "»%s« ist kein Unique Index" -#: parser/parse_utilcmd.c:2284 parser/parse_utilcmd.c:2291 -#: parser/parse_utilcmd.c:2298 parser/parse_utilcmd.c:2375 +#: parser/parse_utilcmd.c:2288 parser/parse_utilcmd.c:2295 +#: parser/parse_utilcmd.c:2302 parser/parse_utilcmd.c:2379 #, c-format msgid "Cannot create a primary key or unique constraint using such an index." msgstr "Ein Primärschlüssel oder Unique-Constraint kann nicht mit einem solchen Index erzeugt werden." -#: parser/parse_utilcmd.c:2290 +#: parser/parse_utilcmd.c:2294 #, c-format msgid "index \"%s\" contains expressions" msgstr "Index »%s« enthält Ausdrücke" -#: parser/parse_utilcmd.c:2297 +#: parser/parse_utilcmd.c:2301 #, c-format msgid "\"%s\" is a partial index" msgstr "»%s« ist ein partieller Index" -#: parser/parse_utilcmd.c:2309 +#: parser/parse_utilcmd.c:2313 #, c-format msgid "\"%s\" is a deferrable index" msgstr "»%s« ist ein aufschiebbarer Index" -#: parser/parse_utilcmd.c:2310 +#: parser/parse_utilcmd.c:2314 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "Ein nicht aufschiebbarer Constraint kann nicht mit einem aufschiebbaren Index erzeugt werden." -#: parser/parse_utilcmd.c:2374 +#: parser/parse_utilcmd.c:2378 #, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" msgstr "Index »%s« Spalte Nummer %d hat nicht das Standardsortierverhalten" -#: parser/parse_utilcmd.c:2531 +#: parser/parse_utilcmd.c:2535 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "Spalte »%s« erscheint zweimal im Primärschlüssel-Constraint" -#: parser/parse_utilcmd.c:2537 +#: parser/parse_utilcmd.c:2541 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "Spalte »%s« erscheint zweimal im Unique-Constraint" -#: parser/parse_utilcmd.c:2871 +#: parser/parse_utilcmd.c:2875 #, c-format msgid "index expressions and predicates can refer only to the table being indexed" msgstr "Indexausdrücke und -prädikate können nur auf die zu indizierende Tabelle verweisen" -#: parser/parse_utilcmd.c:2943 +#: parser/parse_utilcmd.c:2947 #, c-format msgid "statistics expressions can refer only to the table being referenced" msgstr "Statistikausdrücke können nur auf die referenzierte Tabelle verweisen" -#: parser/parse_utilcmd.c:2986 +#: parser/parse_utilcmd.c:2990 #, c-format msgid "rules on materialized views are not supported" msgstr "Regeln für materialisierte Sichten werden nicht unterstützt" -#: parser/parse_utilcmd.c:3046 +#: parser/parse_utilcmd.c:3050 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "WHERE-Bedingung einer Regel kann keine Verweise auf andere Relationen enthalten" -#: parser/parse_utilcmd.c:3118 +#: parser/parse_utilcmd.c:3122 #, c-format msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions" msgstr "Regeln mit WHERE-Bedingungen können als Aktion nur SELECT, INSERT, UPDATE oder DELETE haben" -#: parser/parse_utilcmd.c:3136 parser/parse_utilcmd.c:3237 -#: rewrite/rewriteHandler.c:544 rewrite/rewriteManip.c:1096 +#: parser/parse_utilcmd.c:3140 parser/parse_utilcmd.c:3241 +#: rewrite/rewriteHandler.c:545 rewrite/rewriteManip.c:1096 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "UNION/INTERSECTION/EXCEPT mit Bedingung sind nicht implementiert" -#: parser/parse_utilcmd.c:3154 +#: parser/parse_utilcmd.c:3158 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "ON-SELECT-Regel kann nicht OLD verwenden" -#: parser/parse_utilcmd.c:3158 +#: parser/parse_utilcmd.c:3162 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "ON-SELECT-Regel kann nicht NEW verwenden" -#: parser/parse_utilcmd.c:3167 +#: parser/parse_utilcmd.c:3171 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "ON-INSERT-Regel kann nicht OLD verwenden" -#: parser/parse_utilcmd.c:3173 +#: parser/parse_utilcmd.c:3177 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "ON-DELETE-Regel kann nicht NEW verwenden" -#: parser/parse_utilcmd.c:3201 +#: parser/parse_utilcmd.c:3205 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "in WITH-Anfrage kann nicht auf OLD verweisen werden" -#: parser/parse_utilcmd.c:3208 +#: parser/parse_utilcmd.c:3212 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "in WITH-Anfrage kann nicht auf NEW verwiesen werden" -#: parser/parse_utilcmd.c:3664 +#: parser/parse_utilcmd.c:3668 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "falsch platzierte DEFERRABLE-Klausel" -#: parser/parse_utilcmd.c:3669 parser/parse_utilcmd.c:3684 +#: parser/parse_utilcmd.c:3673 parser/parse_utilcmd.c:3688 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "mehrere DEFERRABLE/NOT DEFERRABLE-Klauseln sind nicht erlaubt" -#: parser/parse_utilcmd.c:3679 +#: parser/parse_utilcmd.c:3683 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "falsch platzierte NOT DEFERRABLE-Klausel" -#: parser/parse_utilcmd.c:3700 +#: parser/parse_utilcmd.c:3704 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "falsch platzierte INITIALLY DEFERRED-Klausel" -#: parser/parse_utilcmd.c:3705 parser/parse_utilcmd.c:3731 +#: parser/parse_utilcmd.c:3709 parser/parse_utilcmd.c:3735 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "mehrere INITIALLY IMMEDIATE/DEFERRED-Klauseln sind nicht erlaubt" -#: parser/parse_utilcmd.c:3726 +#: parser/parse_utilcmd.c:3730 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "falsch platzierte INITIALLY IMMEDIATE-Klausel" -#: parser/parse_utilcmd.c:3919 +#: parser/parse_utilcmd.c:3923 #, c-format msgid "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "CREATE gibt ein Schema an (%s) welches nicht gleich dem zu erzeugenden Schema ist (%s)" -#: parser/parse_utilcmd.c:3954 +#: parser/parse_utilcmd.c:3958 #, c-format msgid "\"%s\" is not a partitioned table" msgstr "»%s« ist keine partitionierte Tabelle" -#: parser/parse_utilcmd.c:3961 +#: parser/parse_utilcmd.c:3965 #, c-format msgid "table \"%s\" is not partitioned" msgstr "Tabelle »%s« ist nicht partitioniert" -#: parser/parse_utilcmd.c:3968 +#: parser/parse_utilcmd.c:3972 #, c-format msgid "index \"%s\" is not partitioned" msgstr "Index »%s« ist nicht partitioniert" -#: parser/parse_utilcmd.c:4008 +#: parser/parse_utilcmd.c:4012 #, c-format msgid "a hash-partitioned table may not have a default partition" msgstr "eine hashpartitionierte Tabelle kann keine Standardpartition haben" -#: parser/parse_utilcmd.c:4025 +#: parser/parse_utilcmd.c:4029 #, c-format msgid "invalid bound specification for a hash partition" msgstr "ungültige Begrenzungsangabe für eine Hash-Partition" -#: parser/parse_utilcmd.c:4031 partitioning/partbounds.c:4802 +#: parser/parse_utilcmd.c:4035 partitioning/partbounds.c:4802 #, c-format msgid "modulus for hash partition must be an integer value greater than zero" msgstr "Modulus für Hashpartition muss eine ganze Zahl größer als null sein" -#: parser/parse_utilcmd.c:4038 partitioning/partbounds.c:4810 +#: parser/parse_utilcmd.c:4042 partitioning/partbounds.c:4810 #, c-format msgid "remainder for hash partition must be less than modulus" msgstr "Rest für Hashpartition muss kleiner als Modulus sein" -#: parser/parse_utilcmd.c:4051 +#: parser/parse_utilcmd.c:4055 #, c-format msgid "invalid bound specification for a list partition" msgstr "ungültige Begrenzungsangabe für eine Listenpartition" -#: parser/parse_utilcmd.c:4104 +#: parser/parse_utilcmd.c:4108 #, c-format msgid "invalid bound specification for a range partition" msgstr "ungültige Begrenzungsangabe für eine Bereichspartition" -#: parser/parse_utilcmd.c:4110 +#: parser/parse_utilcmd.c:4114 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "FROM muss genau einen Wert pro Partitionierungsspalte angeben" -#: parser/parse_utilcmd.c:4114 +#: parser/parse_utilcmd.c:4118 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "TO muss genau einen Wert pro Partitionierungsspalte angeben" -#: parser/parse_utilcmd.c:4230 +#: parser/parse_utilcmd.c:4234 #, c-format msgid "cannot specify NULL in range bound" msgstr "NULL kann nicht in der Bereichsgrenze angegeben werden" -#: parser/parse_utilcmd.c:4278 +#: parser/parse_utilcmd.c:4282 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "jede Begrenzung, die auf MAXVALUE folgt, muss auch MAXVALUE sein" -#: parser/parse_utilcmd.c:4285 +#: parser/parse_utilcmd.c:4289 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "jede Begrenzung, die auf MINVALUE folgt, muss auch MINVALUE sein" -#: parser/parse_utilcmd.c:4328 +#: parser/parse_utilcmd.c:4332 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "angegebener Wert kann nicht in Typ %s für Spalte »%s« umgewandelt werden" @@ -19907,7 +19907,7 @@ msgid "background worker \"%s\": parallel workers may not be configured for restart" msgstr "Background-Worker »%s«: parallele Arbeitsprozesse dürfen nicht für Neustart konfiguriert sein" -#: postmaster/bgworker.c:715 tcop/postgres.c:3312 +#: postmaster/bgworker.c:715 tcop/postgres.c:3313 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "Background-Worker »%s« wird abgebrochen aufgrund von Anweisung des Administrators" @@ -20091,138 +20091,138 @@ msgid "archive modules must register an archive callback" msgstr "Archivmodule müssen einen Archiv-Callback registrieren" -#: postmaster/postmaster.c:661 +#: postmaster/postmaster.c:662 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: ungültiges Argument für Option -f: »%s«\n" -#: postmaster/postmaster.c:734 +#: postmaster/postmaster.c:735 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: ungültiges Argument für Option -t: »%s«\n" -#: postmaster/postmaster.c:757 +#: postmaster/postmaster.c:758 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: ungültiges Argument: »%s«\n" -#: postmaster/postmaster.c:825 +#: postmaster/postmaster.c:826 #, c-format msgid "%s: \"superuser_reserved_connections\" (%d) plus \"reserved_connections\" (%d) must be less than \"max_connections\" (%d)\n" msgstr "%s: »superuser_reserved_connections« (%d) plus »reserved_connections« (%d) muss kleiner als »max_connections« (%d) sein\n" -#: postmaster/postmaster.c:833 +#: postmaster/postmaster.c:834 #, c-format msgid "WAL archival cannot be enabled when \"wal_level\" is \"minimal\"" msgstr "WAL-Archivierung kann nicht eingeschaltet werden, wenn »wal_level« »minimal« ist" -#: postmaster/postmaster.c:836 +#: postmaster/postmaster.c:837 #, c-format msgid "WAL streaming (\"max_wal_senders\" > 0) requires \"wal_level\" to be \"replica\" or \"logical\"" msgstr "WAL-Streaming (»max_wal_senders« > 0) benötigt »wal_level« »replica« oder »logical«" -#: postmaster/postmaster.c:839 +#: postmaster/postmaster.c:840 #, c-format msgid "WAL cannot be summarized when \"wal_level\" is \"minimal\"" msgstr "WAL kann nicht zusammengefasst werden, wenn »wal_level« »minimal« ist" -#: postmaster/postmaster.c:847 +#: postmaster/postmaster.c:848 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: ungültige datetoken-Tabellen, bitte reparieren\n" -#: postmaster/postmaster.c:1006 +#: postmaster/postmaster.c:1007 #, c-format msgid "could not create I/O completion port for child queue" msgstr "konnte Ein-/Ausgabe-Completion-Port für Child-Queue nicht erzeugen" -#: postmaster/postmaster.c:1071 +#: postmaster/postmaster.c:1072 #, c-format msgid "ending log output to stderr" msgstr "Logausgabe nach stderr endet" -#: postmaster/postmaster.c:1072 +#: postmaster/postmaster.c:1073 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "Die weitere Logausgabe geht an Logziel »%s«." -#: postmaster/postmaster.c:1083 +#: postmaster/postmaster.c:1084 #, c-format msgid "starting %s" msgstr "%s startet" -#: postmaster/postmaster.c:1145 +#: postmaster/postmaster.c:1146 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "konnte Listen-Socket für »%s« nicht erzeugen" -#: postmaster/postmaster.c:1151 +#: postmaster/postmaster.c:1152 #, c-format msgid "could not create any TCP/IP sockets" msgstr "konnte keine TCP/IP-Sockets erstellen" -#: postmaster/postmaster.c:1183 +#: postmaster/postmaster.c:1184 #, c-format msgid "DNSServiceRegister() failed: error code %ld" msgstr "DNSServiceRegister() fehlgeschlagen: Fehlercode %ld" -#: postmaster/postmaster.c:1236 +#: postmaster/postmaster.c:1237 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "konnte Unix-Domain-Socket in Verzeichnis »%s« nicht erzeugen" -#: postmaster/postmaster.c:1242 +#: postmaster/postmaster.c:1243 #, c-format msgid "could not create any Unix-domain sockets" msgstr "konnte keine Unix-Domain-Sockets erzeugen" -#: postmaster/postmaster.c:1253 +#: postmaster/postmaster.c:1254 #, c-format msgid "no socket created for listening" msgstr "keine Listen-Socket erzeugt" -#: postmaster/postmaster.c:1284 +#: postmaster/postmaster.c:1285 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %m\n" msgstr "%s: konnte Rechte der externen PID-Datei »%s« nicht ändern: %m\n" -#: postmaster/postmaster.c:1288 +#: postmaster/postmaster.c:1289 #, c-format msgid "%s: could not write external PID file \"%s\": %m\n" msgstr "%s: konnte externe PID-Datei »%s« nicht schreiben: %m\n" #. translator: %s is a configuration file -#: postmaster/postmaster.c:1316 utils/init/postinit.c:221 +#: postmaster/postmaster.c:1317 utils/init/postinit.c:221 #, c-format msgid "could not load %s" msgstr "konnte %s nicht laden" -#: postmaster/postmaster.c:1344 +#: postmaster/postmaster.c:1345 #, c-format msgid "postmaster became multithreaded during startup" msgstr "Postmaster ist während des Starts multithreaded geworden" -#: postmaster/postmaster.c:1345 postmaster/postmaster.c:3686 +#: postmaster/postmaster.c:1346 postmaster/postmaster.c:3672 #, 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:1444 +#: postmaster/postmaster.c:1445 #, c-format msgid "%s: could not locate my own executable path" msgstr "%s: konnte Pfad des eigenen Programs nicht finden" -#: postmaster/postmaster.c:1451 +#: postmaster/postmaster.c:1452 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: konnte kein passendes Programm »postgres« finden" -#: postmaster/postmaster.c:1474 utils/misc/tzparser.c:341 +#: postmaster/postmaster.c:1475 utils/misc/tzparser.c:341 #, 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:1501 +#: postmaster/postmaster.c:1502 #, c-format msgid "" "%s: could not find the database system\n" @@ -20234,242 +20234,237 @@ "aber die Datei »%s« konnte nicht geöffnet werden: %m\n" #. translator: %s is SIGKILL or SIGABRT -#: postmaster/postmaster.c:1791 +#: postmaster/postmaster.c:1792 #, c-format msgid "issuing %s to recalcitrant children" msgstr "%s wird an ungehorsame Kinder gesendet" -#: postmaster/postmaster.c:1813 +#: postmaster/postmaster.c:1814 #, 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:1876 +#: postmaster/postmaster.c:1877 #, c-format msgid "wrong key in cancel request for process %d" msgstr "falscher Schlüssel in Stornierungsanfrage für Prozess %d" -#: postmaster/postmaster.c:1888 +#: postmaster/postmaster.c:1889 #, 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:2108 +#: postmaster/postmaster.c:2109 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "SIGHUP empfangen, Konfigurationsdateien werden neu geladen" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2136 postmaster/postmaster.c:2140 +#: postmaster/postmaster.c:2137 postmaster/postmaster.c:2141 #, c-format msgid "%s was not reloaded" msgstr "%s wurde nicht neu geladen" -#: postmaster/postmaster.c:2150 +#: postmaster/postmaster.c:2151 #, c-format msgid "SSL configuration was not reloaded" msgstr "SSL-Konfiguration wurde nicht neu geladen" -#: postmaster/postmaster.c:2236 +#: postmaster/postmaster.c:2237 #, c-format msgid "received smart shutdown request" msgstr "intelligentes Herunterfahren verlangt" -#: postmaster/postmaster.c:2277 +#: postmaster/postmaster.c:2278 #, c-format msgid "received fast shutdown request" msgstr "schnelles Herunterfahren verlangt" -#: postmaster/postmaster.c:2295 +#: postmaster/postmaster.c:2296 #, c-format msgid "aborting any active transactions" msgstr "etwaige aktive Transaktionen werden abgebrochen" -#: postmaster/postmaster.c:2319 +#: postmaster/postmaster.c:2320 #, c-format msgid "received immediate shutdown request" msgstr "sofortiges Herunterfahren verlangt" -#: postmaster/postmaster.c:2391 +#: postmaster/postmaster.c:2392 #, c-format msgid "shutdown at recovery target" msgstr "Herunterfahren beim Wiederherstellungsziel" -#: postmaster/postmaster.c:2409 postmaster/postmaster.c:2445 +#: postmaster/postmaster.c:2430 msgid "startup process" msgstr "Startprozess" -#: postmaster/postmaster.c:2412 -#, c-format -msgid "aborting startup due to startup process failure" -msgstr "Serverstart abgebrochen wegen Startprozessfehler" - -#: postmaster/postmaster.c:2487 +#: postmaster/postmaster.c:2472 #, c-format msgid "database system is ready to accept connections" msgstr "Datenbanksystem ist bereit, um Verbindungen anzunehmen" -#: postmaster/postmaster.c:2508 +#: postmaster/postmaster.c:2493 msgid "background writer process" msgstr "Background-Writer-Prozess" -#: postmaster/postmaster.c:2555 +#: postmaster/postmaster.c:2540 msgid "checkpointer process" msgstr "Checkpointer-Prozess" -#: postmaster/postmaster.c:2571 +#: postmaster/postmaster.c:2556 msgid "WAL writer process" msgstr "WAL-Schreibprozess" -#: postmaster/postmaster.c:2586 +#: postmaster/postmaster.c:2571 msgid "WAL receiver process" msgstr "WAL-Receiver-Prozess" -#: postmaster/postmaster.c:2600 +#: postmaster/postmaster.c:2585 msgid "WAL summarizer process" msgstr "WAL-Summarizer-Prozess" -#: postmaster/postmaster.c:2615 +#: postmaster/postmaster.c:2600 msgid "autovacuum launcher process" msgstr "Autovacuum-Launcher-Prozess" -#: postmaster/postmaster.c:2633 +#: postmaster/postmaster.c:2618 msgid "archiver process" msgstr "Archivierprozess" -#: postmaster/postmaster.c:2646 +#: postmaster/postmaster.c:2631 msgid "system logger process" msgstr "Systemlogger-Prozess" -#: postmaster/postmaster.c:2663 +#: postmaster/postmaster.c:2648 msgid "slot sync worker process" msgstr "Slot-Sync-Arbeitsprozess" -#: postmaster/postmaster.c:2719 +#: postmaster/postmaster.c:2704 #, c-format msgid "background worker \"%s\"" msgstr "Background-Worker »%s«" -#: postmaster/postmaster.c:2798 postmaster/postmaster.c:2818 -#: postmaster/postmaster.c:2825 postmaster/postmaster.c:2843 +#: postmaster/postmaster.c:2783 postmaster/postmaster.c:2803 +#: postmaster/postmaster.c:2810 postmaster/postmaster.c:2828 msgid "server process" msgstr "Serverprozess" -#: postmaster/postmaster.c:2897 +#: postmaster/postmaster.c:2882 #, 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:3084 +#: postmaster/postmaster.c:3070 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) beendete mit Status %d" -#: postmaster/postmaster.c:3086 postmaster/postmaster.c:3098 -#: postmaster/postmaster.c:3108 postmaster/postmaster.c:3119 +#: postmaster/postmaster.c:3072 postmaster/postmaster.c:3084 +#: postmaster/postmaster.c:3094 postmaster/postmaster.c:3105 #, 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:3095 +#: postmaster/postmaster.c:3081 #, 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:3105 +#: postmaster/postmaster.c:3091 #, 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:3117 +#: postmaster/postmaster.c:3103 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) beendete mit unbekanntem Status %d" -#: postmaster/postmaster.c:3333 +#: postmaster/postmaster.c:3319 #, c-format msgid "abnormal database system shutdown" msgstr "abnormales Herunterfahren des Datenbanksystems" -#: postmaster/postmaster.c:3359 +#: postmaster/postmaster.c:3345 #, c-format msgid "shutting down due to startup process failure" msgstr "fahre herunter wegen Startprozessfehler" -#: postmaster/postmaster.c:3365 +#: postmaster/postmaster.c:3351 #, c-format msgid "shutting down because \"restart_after_crash\" is off" msgstr "fahre herunter, weil »restart_after_crash« aus ist" -#: postmaster/postmaster.c:3377 +#: postmaster/postmaster.c:3363 #, c-format msgid "all server processes terminated; reinitializing" msgstr "alle Serverprozesse beendet; initialisiere neu" -#: postmaster/postmaster.c:3576 postmaster/postmaster.c:3987 -#: postmaster/postmaster.c:4376 +#: postmaster/postmaster.c:3562 postmaster/postmaster.c:3973 +#: postmaster/postmaster.c:4362 #, c-format msgid "could not generate random cancel key" msgstr "konnte zufälligen Stornierungsschlüssel nicht erzeugen" -#: postmaster/postmaster.c:3609 +#: postmaster/postmaster.c:3595 #, 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:3651 +#: postmaster/postmaster.c:3637 msgid "could not fork new process for connection: " msgstr "konnte neuen Prozess für Verbindung nicht starten (fork-Fehler): " -#: postmaster/postmaster.c:3685 +#: postmaster/postmaster.c:3671 #, c-format msgid "postmaster became multithreaded" msgstr "Postmaster ist multithreaded geworden" -#: postmaster/postmaster.c:3754 +#: postmaster/postmaster.c:3740 #, c-format msgid "database system is ready to accept read-only connections" msgstr "Datenbanksystem ist bereit, um lesende Verbindungen anzunehmen" -#: postmaster/postmaster.c:3937 +#: postmaster/postmaster.c:3923 #, c-format msgid "could not fork \"%s\" process: %m" msgstr "konnte »%s«-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:4175 postmaster/postmaster.c:4209 +#: postmaster/postmaster.c:4161 postmaster/postmaster.c:4195 #, 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:4185 postmaster/postmaster.c:4219 +#: postmaster/postmaster.c:4171 postmaster/postmaster.c:4205 #, c-format msgid "invalid processing mode in background worker" msgstr "ungültiger Verarbeitungsmodus in Background-Worker" -#: postmaster/postmaster.c:4279 +#: postmaster/postmaster.c:4265 #, c-format msgid "could not fork background worker process: %m" msgstr "konnte Background-Worker-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:4362 +#: postmaster/postmaster.c:4348 #, c-format msgid "no slot available for new background worker process" msgstr "kein Slot für neuen Background-Worker-Prozess verfügbar" -#: postmaster/postmaster.c:4625 +#: postmaster/postmaster.c:4611 #, c-format msgid "could not read exit code for process\n" msgstr "konnte Exitcode des Prozesses nicht lesen\n" -#: postmaster/postmaster.c:4667 +#: postmaster/postmaster.c:4653 #, c-format msgid "could not post child completion status\n" msgstr "konnte Child-Completion-Status nicht versenden\n" @@ -20524,39 +20519,39 @@ msgid "disabling automatic rotation (use SIGHUP to re-enable)" msgstr "automatische Rotation abgeschaltet (SIGHUP zum Wiederanschalten verwenden)" -#: postmaster/walsummarizer.c:740 +#: postmaster/walsummarizer.c:741 #, c-format msgid "WAL summarization is not progressing" msgstr "WAL-Zusammenfassung kommt nicht voran" -#: postmaster/walsummarizer.c:741 +#: postmaster/walsummarizer.c:742 #, c-format msgid "Summarization is needed through %X/%X, but is stuck at %X/%X on disk and %X/%X in memory." msgstr "Zusammenfassung bis %X/%X wird benötigt, aber sie hängt fest bei %X/%X auf Festplatte und %X/%X im Speicher." -#: postmaster/walsummarizer.c:755 +#: postmaster/walsummarizer.c:756 #, c-format msgid "still waiting for WAL summarization through %X/%X after %ld second" msgid_plural "still waiting for WAL summarization through %X/%X after %ld seconds" msgstr[0] "warte immer noch auf WAL-Zusammenfassung bis %X/%X nach %ld Sekunde" msgstr[1] "warte immer noch auf WAL-Zusammenfassung bis %X/%X nach %ld Sekunden" -#: postmaster/walsummarizer.c:760 +#: postmaster/walsummarizer.c:761 #, c-format msgid "Summarization has reached %X/%X on disk and %X/%X in memory." msgstr "Zusammenfassung hat %X/%X auf Festplatte und %X/%X im Speicher erreicht." -#: postmaster/walsummarizer.c:1000 +#: postmaster/walsummarizer.c:1001 #, c-format msgid "could not find a valid record after %X/%X" msgstr "konnte keinen gültigen Datensatz nach %X/%X finden" -#: postmaster/walsummarizer.c:1045 +#: postmaster/walsummarizer.c:1046 #, c-format msgid "could not read WAL from timeline %u at %X/%X: %s" msgstr "konnte WAL aus Zeitleiste %u bei %X/%X nicht lesen: %s" -#: postmaster/walsummarizer.c:1051 +#: postmaster/walsummarizer.c:1052 #, c-format msgid "could not read WAL from timeline %u at %X/%X" msgstr "konnte WAL aus Zeitleiste %u bei %X/%X nicht lesen" @@ -20726,33 +20721,33 @@ msgid "logical replication parallel apply worker for subscription \"%s\" has finished" msgstr "Parallel-Apply-Worker für logische Replikation für Subskription »%s« hat abschlossen" -#: replication/logical/applyparallelworker.c:822 +#: replication/logical/applyparallelworker.c:831 #, c-format msgid "lost connection to the logical replication apply worker" msgstr "Verbindung mit dem Apply-Worker für logische Replikation verloren" -#: replication/logical/applyparallelworker.c:1031 -#: replication/logical/applyparallelworker.c:1033 +#: replication/logical/applyparallelworker.c:1040 +#: replication/logical/applyparallelworker.c:1042 msgid "logical replication parallel apply worker" msgstr "Parallel-Apply-Worker für logische Replikation" -#: replication/logical/applyparallelworker.c:1047 +#: replication/logical/applyparallelworker.c:1056 #, c-format msgid "logical replication parallel apply worker exited due to error" msgstr "Parallel-Apply-Worker für logische Replikation beendete wegen eines Fehlers" -#: replication/logical/applyparallelworker.c:1134 -#: replication/logical/applyparallelworker.c:1307 +#: replication/logical/applyparallelworker.c:1143 +#: replication/logical/applyparallelworker.c:1316 #, c-format msgid "lost connection to the logical replication parallel apply worker" msgstr "Verbindung mit dem Parallel-Apply-Worker für logische Replikation verloren" -#: replication/logical/applyparallelworker.c:1187 +#: replication/logical/applyparallelworker.c:1196 #, c-format msgid "could not send data to shared-memory queue" msgstr "konnte Daten nicht an Shared-Memory-Queue senden" -#: replication/logical/applyparallelworker.c:1222 +#: replication/logical/applyparallelworker.c:1231 #, c-format msgid "logical replication apply worker will serialize the remaining changes of remote transaction %u to a file" msgstr "Apply-Worker für logische Replikation wird die restlichen Änderungen der Remote-Transaktion %u in eine Datei serialisieren" @@ -21062,63 +21057,63 @@ msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "konnte nicht aus Datei »%s« lesen: %d statt %d Bytes gelesen" -#: replication/logical/slotsync.c:215 replication/logical/slotsync.c:580 +#: replication/logical/slotsync.c:226 replication/logical/slotsync.c:604 #, c-format msgid "could not synchronize replication slot \"%s\"" msgstr "konnte Replikations-Slot »%s« nicht synchronisieren" -#: replication/logical/slotsync.c:217 +#: replication/logical/slotsync.c:228 #, c-format msgid "Synchronization could lead to data loss, because the remote slot needs WAL at LSN %X/%X and catalog xmin %u, but the standby has LSN %X/%X and catalog xmin %u." msgstr "Synchronisation könnte zu Datenverlust führen, weil der Remote-Slot WAL bei LSN %X/%X und Katalog-xmin %u benötigt, aber der Standby LSN %X/%X und Katalog-xmin %u hat." -#: replication/logical/slotsync.c:459 +#: replication/logical/slotsync.c:483 #, c-format msgid "dropped replication slot \"%s\" of database with OID %u" msgstr "Replikations-Slot »%s« von Datenbank mit OID %u wurde gelöscht" -#: replication/logical/slotsync.c:581 +#: replication/logical/slotsync.c:605 #, c-format msgid "Synchronization could lead to data loss, because the standby could not build a consistent snapshot to decode WALs at LSN %X/%X." msgstr "Synchronisation könnte zu Datenverlust führen, weil der Standby keinen konsistenten Snapshot zum Dekodieren von WAL bei LSN %X/%X bauen konnte." -#: replication/logical/slotsync.c:590 +#: replication/logical/slotsync.c:614 #, c-format msgid "newly created replication slot \"%s\" is sync-ready now" msgstr "neu erzeugter Replikations-Slot »%s« ist jetzt bereit für die Synchronisierung" -#: replication/logical/slotsync.c:629 +#: replication/logical/slotsync.c:653 #, c-format msgid "skipping slot synchronization because the received slot sync LSN %X/%X for slot \"%s\" is ahead of the standby position %X/%X" msgstr "Slot-Synchronisierung wird übersprungen, weil die empfangene Slot-Sync-LSN %X/%X für Slot »%s« der Position %X/%X des Standbys voraus ist" -#: replication/logical/slotsync.c:651 +#: replication/logical/slotsync.c:675 #, c-format msgid "exiting from slot synchronization because same name slot \"%s\" already exists on the standby" msgstr "verlasse Slot-Synchronisierung, weil der gleiche Slot »%s« schon auf dem Standby existiert" -#: replication/logical/slotsync.c:822 +#: replication/logical/slotsync.c:846 #, c-format msgid "could not fetch failover logical slots info from the primary server: %s" msgstr "konnte Informationen über logische Failover-Slots nicht vom Primärserver holen: %s" -#: replication/logical/slotsync.c:968 +#: replication/logical/slotsync.c:992 #, c-format msgid "could not fetch primary_slot_name \"%s\" info from the primary server: %s" msgstr "konnte Informationen über primary_slot_name »%s« nicht vom Primärserver holen: %s" -#: replication/logical/slotsync.c:970 +#: replication/logical/slotsync.c:994 #, c-format msgid "Check if primary_slot_name is configured correctly." msgstr "Prüfen Sie, ob primary_slot_name korrekt konfiguriert ist." -#: replication/logical/slotsync.c:990 +#: replication/logical/slotsync.c:1014 #, c-format msgid "cannot synchronize replication slots from a standby server" msgstr "Replikations-Slots können nicht von einem Standby-Server synchronisiert werden" #. translator: second %s is a GUC variable name -#: replication/logical/slotsync.c:999 +#: replication/logical/slotsync.c:1023 #, c-format msgid "replication slot \"%s\" specified by \"%s\" does not exist on primary server" msgstr "Replikations-Slot »%s«, der in »%s« angegeben ist, existiert auf dem Publikationsserver nicht" @@ -21126,60 +21121,75 @@ #. translator: first %s is a connection option; second %s is a GUC #. variable name #. -#: replication/logical/slotsync.c:1032 +#: replication/logical/slotsync.c:1056 #, c-format msgid "replication slot synchronization requires \"%s\" to be specified in \"%s\"" msgstr "Replikations-Slot-Synchronisierung erfordert, dass »%s« in »%s« angegeben wird" -#: replication/logical/slotsync.c:1051 +#: replication/logical/slotsync.c:1075 #, c-format msgid "replication slot synchronization requires \"wal_level\" >= \"logical\"" msgstr "Replikations-Slot-Synchronisierung erfordert »wal_level« >= »logical«" #. translator: %s is a GUC variable name -#: replication/logical/slotsync.c:1066 replication/logical/slotsync.c:1094 +#: replication/logical/slotsync.c:1090 replication/logical/slotsync.c:1118 #, c-format msgid "replication slot synchronization requires \"%s\" to be set" msgstr "Replikations-Slot-Synchronisierung erfordert, dass »%s« definiert ist" #. translator: %s is a GUC variable name -#: replication/logical/slotsync.c:1080 +#: replication/logical/slotsync.c:1104 #, c-format msgid "replication slot synchronization requires \"%s\" to be enabled" msgstr "Replikations-Slot-Synchronisierung erfordert, dass »%s« eingeschaltet ist" #. translator: %s is a GUC variable name -#: replication/logical/slotsync.c:1132 +#: replication/logical/slotsync.c:1161 #, c-format -msgid "replication slot synchronization worker will shut down because \"%s\" is disabled" -msgstr "Arbeitsprozess für Replikations-Slot-Synchronisierung wird herunterfahren, weil »%s« deaktiviert ist" +msgid "replication slot synchronization worker will stop because \"%s\" is disabled" +msgstr "Arbeitsprozess für Replikations-Slot-Synchronisierung wird anhalten, weil »%s« deaktiviert ist" -#: replication/logical/slotsync.c:1141 +#: replication/logical/slotsync.c:1179 #, c-format msgid "replication slot synchronization worker will restart because of a parameter change" msgstr "Arbeitsprozess für Replikations-Slot-Synchronisierung wird neu starten wegen einer Parameteränderung" -#: replication/logical/slotsync.c:1165 +#: replication/logical/slotsync.c:1204 +#, c-format +msgid "replication slot synchronization will stop because of a parameter change" +msgstr "Arbeitsprozess für Replikations-Slot-Synchronisierung wird anhalten wegen einer Parameteränderung" + +#: replication/logical/slotsync.c:1240 +#, c-format +msgid "replication slot synchronization worker will stop because promotion is triggered" +msgstr "Arbeitsprozess für Replikations-Slot-Synchronisierung wird anhalten, weil Beförderung ausgelöst wurde" + +#: replication/logical/slotsync.c:1254 #, c-format -msgid "replication slot synchronization worker is shutting down because promotion is triggered" -msgstr "Arbeitsprozess für Replikations-Slot-Synchronisierung fährt herunter, weil Beförderung ausgelöst wurde" +msgid "replication slot synchronization will stop because promotion is triggered" +msgstr "Replikations-Slot-Synchronisierung wird anhalten, weil Beförderung ausgelöst wurde" -#: replication/logical/slotsync.c:1290 +#: replication/logical/slotsync.c:1374 #, c-format -msgid "cannot synchronize replication slots when standby promotion is ongoing" -msgstr "Replikations-Slots können nicht synchronisiert werden, während die Standby-Beförderung läuft" +msgid "replication slot synchronization worker will not start because promotion was triggered" +msgstr "Arbeitsprozess für Replikations-Slot-Synchronisierung wird nicht starten, weil Beförderung ausgelöst wurde" -#: replication/logical/slotsync.c:1298 +#: replication/logical/slotsync.c:1386 +#, c-format +msgid "replication slot synchronization will not start because promotion was triggered" +msgstr "Replikations-Slot-Synchronisierung wird nicht starten, weil Beförderung ausgelöst wurde" + +#: replication/logical/slotsync.c:1395 #, c-format msgid "cannot synchronize replication slots concurrently" msgstr "Replikations-Slots können nicht nebenläufig synchronisiert werden" -#: replication/logical/slotsync.c:1406 +#: replication/logical/slotsync.c:1507 #, c-format msgid "slot sync worker started" msgstr "Slot-Sync-Arbeitsprozess gestartet" -#: replication/logical/slotsync.c:1469 replication/slotfuncs.c:926 +#: replication/logical/slotsync.c:1570 replication/slotfuncs.c:926 #: replication/walreceiver.c:307 #, c-format msgid "could not connect to the primary server: %s" @@ -22025,44 +22035,44 @@ msgid "terminating walsender process after promotion" msgstr "WAL-Sender-Prozess wird nach Beförderung abgebrochen" -#: replication/walsender.c:2029 +#: replication/walsender.c:2035 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "während der WAL-Sender im Stoppmodus ist können keine neuen Befehle ausgeführt werden" -#: replication/walsender.c:2064 +#: replication/walsender.c:2070 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" msgstr "im WAL-Sender für physische Replikation können keine SQL-Befehle ausgeführt werden" -#: replication/walsender.c:2097 +#: replication/walsender.c:2103 #, c-format msgid "received replication command: %s" msgstr "Replikationsbefehl empfangen: %s" -#: replication/walsender.c:2105 tcop/fastpath.c:209 tcop/postgres.c:1142 -#: tcop/postgres.c:1500 tcop/postgres.c:1752 tcop/postgres.c:2234 -#: tcop/postgres.c:2672 tcop/postgres.c:2749 +#: replication/walsender.c:2111 tcop/fastpath.c:209 tcop/postgres.c:1143 +#: tcop/postgres.c:1501 tcop/postgres.c:1753 tcop/postgres.c:2235 +#: tcop/postgres.c:2673 tcop/postgres.c:2750 #, c-format msgid "current transaction is aborted, commands ignored until end of transaction block" msgstr "aktuelle Transaktion wurde abgebrochen, Befehle werden bis zum Ende der Transaktion ignoriert" -#: replication/walsender.c:2262 replication/walsender.c:2297 +#: replication/walsender.c:2268 replication/walsender.c:2303 #, c-format msgid "unexpected EOF on standby connection" msgstr "unerwartetes EOF auf Standby-Verbindung" -#: replication/walsender.c:2285 +#: replication/walsender.c:2291 #, c-format msgid "invalid standby message type \"%c\"" msgstr "ungültiger Standby-Message-Typ »%c«" -#: replication/walsender.c:2374 +#: replication/walsender.c:2380 #, c-format msgid "unexpected message type \"%c\"" msgstr "unerwarteter Message-Typ »%c«" -#: replication/walsender.c:2792 +#: replication/walsender.c:2801 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "WAL-Sender-Prozess wird abgebrochen wegen Zeitüberschreitung bei der Replikation" @@ -22243,271 +22253,271 @@ msgid "renaming an ON SELECT rule is not allowed" msgstr "Umbenennen einer ON-SELECT-Regel ist nicht erlaubt" -#: rewrite/rewriteHandler.c:588 +#: rewrite/rewriteHandler.c:589 #, 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:618 +#: rewrite/rewriteHandler.c:619 #, c-format msgid "INSERT ... SELECT rule actions are not supported for queries having data-modifying statements in WITH" msgstr "INSERT ... SELECT-Regelaktionen werden für Anfrangen mit datenmodifizierenden Anweisungen in WITH nicht unterstützt" -#: rewrite/rewriteHandler.c:671 +#: rewrite/rewriteHandler.c:705 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "RETURNING-Listen können nicht in mehreren Regeln auftreten" -#: rewrite/rewriteHandler.c:903 rewrite/rewriteHandler.c:942 +#: rewrite/rewriteHandler.c:937 rewrite/rewriteHandler.c:976 #, 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:905 rewrite/rewriteHandler.c:971 +#: rewrite/rewriteHandler.c:939 rewrite/rewriteHandler.c:1005 #, 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:907 +#: rewrite/rewriteHandler.c:941 #, 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:969 rewrite/rewriteHandler.c:977 +#: rewrite/rewriteHandler.c:1003 rewrite/rewriteHandler.c:1011 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "Spalte »%s« kann nur auf DEFAULT aktualisiert werden" -#: rewrite/rewriteHandler.c:1112 rewrite/rewriteHandler.c:1130 +#: rewrite/rewriteHandler.c:1146 rewrite/rewriteHandler.c:1164 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "mehrere Zuweisungen zur selben Spalte »%s«" -#: rewrite/rewriteHandler.c:1685 +#: rewrite/rewriteHandler.c:1719 #, c-format msgid "MERGE is not supported for relations with rules." msgstr "MERGE wird für Relationen mit Regeln nicht unterstützt." -#: rewrite/rewriteHandler.c:1725 rewrite/rewriteHandler.c:3265 +#: rewrite/rewriteHandler.c:1759 rewrite/rewriteHandler.c:3330 #, c-format msgid "access to non-system view \"%s\" is restricted" msgstr "Zugriff auf Nicht-System-Sicht »%s« ist beschränkt" -#: rewrite/rewriteHandler.c:2125 rewrite/rewriteHandler.c:4274 +#: rewrite/rewriteHandler.c:2159 rewrite/rewriteHandler.c:4339 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "unendliche Rekursion entdeckt in Regeln für Relation »%s«" -#: rewrite/rewriteHandler.c:2230 +#: rewrite/rewriteHandler.c:2264 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "unendliche Rekursion entdeckt in Policys für Relation »%s«" -#: rewrite/rewriteHandler.c:2592 +#: rewrite/rewriteHandler.c:2657 msgid "Junk view columns are not updatable." msgstr "Junk-Sichtspalten sind nicht aktualisierbar." -#: rewrite/rewriteHandler.c:2597 +#: rewrite/rewriteHandler.c:2662 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:2600 +#: rewrite/rewriteHandler.c:2665 msgid "View columns that refer to system columns are not updatable." msgstr "Sichtspalten, die auf Systemspalten verweisen, sind nicht aktualisierbar." -#: rewrite/rewriteHandler.c:2603 +#: rewrite/rewriteHandler.c:2668 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:2664 +#: rewrite/rewriteHandler.c:2729 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Sichten, die DISTINCT enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2667 +#: rewrite/rewriteHandler.c:2732 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Sichten, die GROUP BY enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2670 +#: rewrite/rewriteHandler.c:2735 msgid "Views containing HAVING are not automatically updatable." msgstr "Sichten, die HAVING enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2673 +#: rewrite/rewriteHandler.c:2738 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:2676 +#: rewrite/rewriteHandler.c:2741 msgid "Views containing WITH are not automatically updatable." msgstr "Sichten, die WITH enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2679 +#: rewrite/rewriteHandler.c:2744 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Sichten, die LIMIT oder OFFSET enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2691 +#: rewrite/rewriteHandler.c:2756 msgid "Views that return aggregate functions are not automatically updatable." msgstr "Sichten, die Aggregatfunktionen zurückgeben, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2694 +#: rewrite/rewriteHandler.c:2759 msgid "Views that return window functions are not automatically updatable." msgstr "Sichten, die Fensterfunktionen zurückgeben, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2697 +#: rewrite/rewriteHandler.c:2762 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:2704 rewrite/rewriteHandler.c:2708 -#: rewrite/rewriteHandler.c:2716 +#: rewrite/rewriteHandler.c:2769 rewrite/rewriteHandler.c:2773 +#: rewrite/rewriteHandler.c:2781 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:2719 +#: rewrite/rewriteHandler.c:2784 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Sichten, die TABLESAMPLE enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2743 +#: rewrite/rewriteHandler.c:2808 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:3124 rewrite/rewriteHandler.c:3159 +#: rewrite/rewriteHandler.c:3189 rewrite/rewriteHandler.c:3224 #, c-format msgid "cannot insert into view \"%s\"" msgstr "kann nicht in Sicht »%s« einfügen" -#: rewrite/rewriteHandler.c:3127 +#: rewrite/rewriteHandler.c:3192 #, 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." -#: rewrite/rewriteHandler.c:3132 rewrite/rewriteHandler.c:3168 +#: rewrite/rewriteHandler.c:3197 rewrite/rewriteHandler.c:3233 #, c-format msgid "cannot update view \"%s\"" msgstr "kann Sicht »%s« nicht aktualisieren" -#: rewrite/rewriteHandler.c:3135 +#: rewrite/rewriteHandler.c:3200 #, 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." -#: rewrite/rewriteHandler.c:3140 rewrite/rewriteHandler.c:3177 +#: rewrite/rewriteHandler.c:3205 rewrite/rewriteHandler.c:3242 #, c-format msgid "cannot delete from view \"%s\"" msgstr "kann nicht aus Sicht »%s« löschen" -#: rewrite/rewriteHandler.c:3143 +#: rewrite/rewriteHandler.c:3208 #, 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." -#: rewrite/rewriteHandler.c:3162 +#: rewrite/rewriteHandler.c:3227 #, c-format msgid "To enable inserting into the view using MERGE, provide an INSTEAD OF INSERT trigger." msgstr "Um Einfügen in die Sicht mit MERGE zu ermöglichen, richten Sie einen INSTEAD OF INSERT Trigger ein." -#: rewrite/rewriteHandler.c:3171 +#: rewrite/rewriteHandler.c:3236 #, c-format msgid "To enable updating the view using MERGE, provide an INSTEAD OF UPDATE trigger." msgstr "Um Aktualisieren der Sicht mit MERGE zu ermöglichen, richten Sie einen INSTEAD OF UPDATE Trigger ein." -#: rewrite/rewriteHandler.c:3180 +#: rewrite/rewriteHandler.c:3245 #, c-format msgid "To enable deleting from the view using MERGE, provide an INSTEAD OF DELETE trigger." msgstr "Um Löschen aus der Sicht zu ermöglichen, richten Sie einen INSTEAD OF DELETE Trigger ein." -#: rewrite/rewriteHandler.c:3355 +#: rewrite/rewriteHandler.c:3420 #, 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:3363 +#: rewrite/rewriteHandler.c:3428 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "kann Spalte »%s« von Sicht »%s« nicht aktualisieren" -#: rewrite/rewriteHandler.c:3371 +#: rewrite/rewriteHandler.c:3436 #, c-format msgid "cannot merge into column \"%s\" of view \"%s\"" msgstr "kann nicht in Spalte »%s« von Sicht »%s« mergen" -#: rewrite/rewriteHandler.c:3399 +#: rewrite/rewriteHandler.c:3464 #, c-format msgid "cannot merge into view \"%s\"" msgstr "kann nicht in Sicht »%s« mergen" -#: rewrite/rewriteHandler.c:3401 +#: rewrite/rewriteHandler.c:3466 #, c-format msgid "MERGE is not supported for views with INSTEAD OF triggers for some actions but not all." msgstr "MERGE wird nicht unterstützt für Sichten mit INSTEAD-OF-Trigger für einige Aktionen aber nicht für alle." -#: rewrite/rewriteHandler.c:3402 +#: rewrite/rewriteHandler.c:3467 #, c-format msgid "To enable merging into the view, either provide a full set of INSTEAD OF triggers or drop the existing INSTEAD OF triggers." msgstr "Um Mergen in die Sicht zu ermöglichen, richten Sie entweder einen vollen Satz an INSTEAD-OF-Triggern ein oder löschen Sie die bestehenden INSTEAD-OF-Trigger." -#: rewrite/rewriteHandler.c:3931 +#: rewrite/rewriteHandler.c:3996 #, 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:3942 +#: rewrite/rewriteHandler.c:4007 #, 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:3956 +#: rewrite/rewriteHandler.c:4021 #, 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:3960 +#: rewrite/rewriteHandler.c:4025 #, 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:3965 +#: rewrite/rewriteHandler.c:4030 #, 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:4226 +#: rewrite/rewriteHandler.c:4291 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:4324 +#: rewrite/rewriteHandler.c:4389 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "INSERT RETURNING kann in Relation »%s« nicht ausgeführt werden" -#: rewrite/rewriteHandler.c:4326 +#: rewrite/rewriteHandler.c:4391 #, 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:4331 +#: rewrite/rewriteHandler.c:4396 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "UPDATE RETURNING kann in Relation »%s« nicht ausgeführt werden" -#: rewrite/rewriteHandler.c:4333 +#: rewrite/rewriteHandler.c:4398 #, 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:4338 +#: rewrite/rewriteHandler.c:4403 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "DELETE RETURNING kann in Relation »%s« nicht ausgeführt werden" -#: rewrite/rewriteHandler.c:4340 +#: rewrite/rewriteHandler.c:4405 #, 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:4358 +#: rewrite/rewriteHandler.c:4423 #, 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:4415 +#: rewrite/rewriteHandler.c:4480 #, 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" @@ -23036,7 +23046,7 @@ msgid "Only roles with privileges of the role whose process is being terminated or with privileges of the \"%s\" role may terminate this process." msgstr "Nur Rollen mit den Privilegien der Rolle deren Prozess beendet werden soll oder den Privilegien der Rolle »%s« können diesen Prozess beenden." -#: storage/ipc/procsignal.c:416 +#: storage/ipc/procsignal.c:417 #, c-format msgid "still waiting for backend with PID %d to accept ProcSignalBarrier" msgstr "warte immer noch darauf, dass Backend mit PID %d ProcSignalBarrier annimmt" @@ -23144,12 +23154,12 @@ msgid "recovery finished waiting after %ld.%03d ms: %s" msgstr "Warten der Wiederherstellung beendet nach %ld,%03d ms: %s" -#: storage/ipc/standby.c:920 tcop/postgres.c:3196 +#: storage/ipc/standby.c:920 tcop/postgres.c:3197 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "storniere Anfrage wegen Konflikt mit der Wiederherstellung" -#: storage/ipc/standby.c:921 tcop/postgres.c:2557 +#: storage/ipc/standby.c:921 tcop/postgres.c:2558 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "Benutzertransaktion hat Verklemmung (Deadlock) mit Wiederherstellung verursacht." @@ -23680,8 +23690,8 @@ msgid "fastpath function call: \"%s\" (OID %u)" msgstr "Fastpath-Funktionsaufruf: »%s« (OID %u)" -#: tcop/fastpath.c:313 tcop/postgres.c:1369 tcop/postgres.c:1605 -#: tcop/postgres.c:2071 tcop/postgres.c:2333 +#: tcop/fastpath.c:313 tcop/postgres.c:1370 tcop/postgres.c:1606 +#: tcop/postgres.c:2072 tcop/postgres.c:2334 #, c-format msgid "duration: %s ms" msgstr "Dauer: %s ms" @@ -23711,320 +23721,320 @@ msgid "incorrect binary data format in function argument %d" msgstr "falsches Binärdatenformat in Funktionsargument %d" -#: tcop/postgres.c:467 tcop/postgres.c:5012 +#: tcop/postgres.c:468 tcop/postgres.c:5016 #, c-format msgid "invalid frontend message type %d" msgstr "ungültiger Frontend-Message-Typ %d" -#: tcop/postgres.c:1076 +#: tcop/postgres.c:1077 #, c-format msgid "statement: %s" msgstr "Anweisung: %s" -#: tcop/postgres.c:1374 +#: tcop/postgres.c:1375 #, c-format msgid "duration: %s ms statement: %s" msgstr "Dauer: %s ms Anweisung: %s" -#: tcop/postgres.c:1480 +#: tcop/postgres.c:1481 #, c-format msgid "cannot insert multiple commands into a prepared statement" msgstr "kann nicht mehrere Befehle in vorbereitete Anweisung einfügen" -#: tcop/postgres.c:1610 +#: tcop/postgres.c:1611 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "Dauer: %s ms Parsen %s: %s" -#: tcop/postgres.c:1677 tcop/postgres.c:2653 +#: tcop/postgres.c:1678 tcop/postgres.c:2654 #, c-format msgid "unnamed prepared statement does not exist" msgstr "unbenannte vorbereitete Anweisung existiert nicht" -#: tcop/postgres.c:1729 +#: tcop/postgres.c:1730 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "Binden-Nachricht hat %d Parameterformate aber %d Parameter" -#: tcop/postgres.c:1735 +#: tcop/postgres.c:1736 #, c-format msgid "bind message supplies %d parameters, but prepared statement \"%s\" requires %d" msgstr "Binden-Nachricht enthält %d Parameter, aber vorbereitete Anweisung »%s« erfordert %d" -#: tcop/postgres.c:1949 +#: tcop/postgres.c:1950 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "falsches Binärdatenformat in Binden-Parameter %d" -#: tcop/postgres.c:2076 +#: tcop/postgres.c:2077 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "Dauer: %s ms Binden %s%s%s: %s" -#: tcop/postgres.c:2131 tcop/postgres.c:2735 +#: tcop/postgres.c:2132 tcop/postgres.c:2736 #, c-format msgid "portal \"%s\" does not exist" msgstr "Portal »%s« existiert nicht" -#: tcop/postgres.c:2213 +#: tcop/postgres.c:2214 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2215 tcop/postgres.c:2341 +#: tcop/postgres.c:2216 tcop/postgres.c:2342 msgid "execute fetch from" msgstr "Ausführen Fetch von" -#: tcop/postgres.c:2216 tcop/postgres.c:2342 +#: tcop/postgres.c:2217 tcop/postgres.c:2343 msgid "execute" msgstr "Ausführen" -#: tcop/postgres.c:2338 +#: tcop/postgres.c:2339 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "Dauer: %s ms %s %s%s%s: %s" -#: tcop/postgres.c:2486 +#: tcop/postgres.c:2487 #, c-format msgid "prepare: %s" msgstr "Vorbereiten: %s" -#: tcop/postgres.c:2511 +#: tcop/postgres.c:2512 #, c-format msgid "Parameters: %s" msgstr "Parameter: %s" -#: tcop/postgres.c:2526 +#: tcop/postgres.c:2527 #, c-format msgid "Abort reason: recovery conflict" msgstr "Abbruchgrund: Konflikt bei Wiederherstellung" -#: tcop/postgres.c:2542 +#: tcop/postgres.c:2543 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "Benutzer hat Shared-Buffer-Pin zu lange gehalten." -#: tcop/postgres.c:2545 +#: tcop/postgres.c:2546 #, c-format msgid "User was holding a relation lock for too long." msgstr "Benutzer hat Relationssperre zu lange gehalten." -#: tcop/postgres.c:2548 +#: tcop/postgres.c:2549 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "Benutzer hat (möglicherweise) einen Tablespace verwendet, der gelöscht werden muss." -#: tcop/postgres.c:2551 +#: tcop/postgres.c:2552 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "Benutzeranfrage hat möglicherweise Zeilenversionen sehen müssen, die entfernt werden müssen." -#: tcop/postgres.c:2554 +#: tcop/postgres.c:2555 #, c-format msgid "User was using a logical replication slot that must be invalidated." msgstr "Benutzer verwendete einen logischen Replikations-Slot, der ungültig gemacht werden muss." -#: tcop/postgres.c:2560 +#: tcop/postgres.c:2561 #, c-format msgid "User was connected to a database that must be dropped." msgstr "Benutzer war mit einer Datenbank verbunden, die gelöscht werden muss." -#: tcop/postgres.c:2599 +#: tcop/postgres.c:2600 #, c-format msgid "portal \"%s\" parameter $%d = %s" msgstr "Portal »%s« Parameter $%d = %s" -#: tcop/postgres.c:2602 +#: tcop/postgres.c:2603 #, c-format msgid "portal \"%s\" parameter $%d" msgstr "Portal »%s« Parameter $%d" -#: tcop/postgres.c:2608 +#: tcop/postgres.c:2609 #, c-format msgid "unnamed portal parameter $%d = %s" msgstr "unbenanntes Portal Parameter $%d = %s" -#: tcop/postgres.c:2611 +#: tcop/postgres.c:2612 #, c-format msgid "unnamed portal parameter $%d" msgstr "unbenanntes Portal Parameter $%d" -#: tcop/postgres.c:2955 +#: tcop/postgres.c:2956 #, c-format msgid "terminating connection because of unexpected SIGQUIT signal" msgstr "Verbindung wird abgebrochen wegen unerwartetem SIGQUIT-Signal" -#: tcop/postgres.c:2961 +#: tcop/postgres.c:2962 #, c-format msgid "terminating connection because of crash of another server process" msgstr "Verbindung wird abgebrochen wegen Absturz eines anderen Serverprozesses" -#: tcop/postgres.c:2962 +#: tcop/postgres.c:2963 #, c-format msgid "The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory." msgstr "Der Postmaster hat diesen Serverprozess angewiesen, die aktuelle Transaktion zurückzurollen und die Sitzung zu beenden, weil ein anderer Serverprozess abnormal beendet wurde und möglicherweise das Shared Memory verfälscht hat." -#: tcop/postgres.c:2966 tcop/postgres.c:3219 +#: tcop/postgres.c:2967 tcop/postgres.c:3220 #, c-format msgid "In a moment you should be able to reconnect to the database and repeat your command." msgstr "In einem Moment sollten Sie wieder mit der Datenbank verbinden und Ihren Befehl wiederholen können." -#: tcop/postgres.c:2973 +#: tcop/postgres.c:2974 #, c-format msgid "terminating connection due to immediate shutdown command" msgstr "Verbindung wird abgebrochen aufgrund von Befehl für sofortiges Herunterfahren" -#: tcop/postgres.c:3051 +#: tcop/postgres.c:3052 #, c-format msgid "floating-point exception" msgstr "Fließkommafehler" -#: tcop/postgres.c:3052 +#: tcop/postgres.c:3053 #, c-format msgid "An invalid floating-point operation was signaled. This probably means an out-of-range result or an invalid operation, such as division by zero." msgstr "Eine ungültige Fließkommaoperation wurde signalisiert. Das bedeutet wahrscheinlich ein Ergebnis außerhalb des gültigen Bereichs oder eine ungültige Operation, zum Beispiel Division durch null." -#: tcop/postgres.c:3217 +#: tcop/postgres.c:3218 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "Verbindung wird abgebrochen wegen Konflikt mit der Wiederherstellung" -#: tcop/postgres.c:3289 +#: tcop/postgres.c:3290 #, c-format msgid "canceling authentication due to timeout" msgstr "storniere Authentifizierung wegen Zeitüberschreitung" -#: tcop/postgres.c:3293 +#: tcop/postgres.c:3294 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "Autovacuum-Prozess wird abgebrochen aufgrund von Anweisung des Administrators" -#: tcop/postgres.c:3297 +#: tcop/postgres.c:3298 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "Arbeitsprozess für logische Replikation wird abgebrochen aufgrund von Anweisung des Administrators" -#: tcop/postgres.c:3317 +#: tcop/postgres.c:3318 #, c-format msgid "terminating connection due to administrator command" msgstr "Verbindung wird abgebrochen aufgrund von Anweisung des Administrators" -#: tcop/postgres.c:3348 +#: tcop/postgres.c:3349 #, c-format msgid "connection to client lost" msgstr "Verbindung zum Client wurde verloren" -#: tcop/postgres.c:3400 +#: tcop/postgres.c:3401 #, c-format msgid "canceling statement due to lock timeout" msgstr "storniere Anfrage wegen Zeitüberschreitung einer Sperre" -#: tcop/postgres.c:3407 +#: tcop/postgres.c:3408 #, c-format msgid "canceling statement due to statement timeout" msgstr "storniere Anfrage wegen Zeitüberschreitung der Anfrage" -#: tcop/postgres.c:3414 +#: tcop/postgres.c:3415 #, c-format msgid "canceling autovacuum task" msgstr "storniere Autovacuum-Aufgabe" -#: tcop/postgres.c:3427 +#: tcop/postgres.c:3428 #, c-format msgid "canceling statement due to user request" msgstr "storniere Anfrage wegen Benutzeraufforderung" -#: tcop/postgres.c:3448 +#: tcop/postgres.c:3449 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "Verbindung wird abgebrochen wegen Zeitüberschreitung in inaktiver Transaktion" -#: tcop/postgres.c:3461 +#: tcop/postgres.c:3462 #, c-format msgid "terminating connection due to transaction timeout" msgstr "Verbindung wird abgebrochen wegen Zeitüberschreitung in Transaktion" -#: tcop/postgres.c:3474 +#: tcop/postgres.c:3475 #, c-format msgid "terminating connection due to idle-session timeout" msgstr "Verbindung wird abgebrochen wegen Zeitüberschreitung in inaktiver Sitzung" -#: tcop/postgres.c:3564 +#: tcop/postgres.c:3568 #, c-format msgid "stack depth limit exceeded" msgstr "Grenze für Stacktiefe überschritten" -#: tcop/postgres.c:3565 +#: tcop/postgres.c:3569 #, c-format msgid "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), after ensuring the platform's stack depth limit is adequate." msgstr "Erhöhen Sie den Konfigurationsparameter »max_stack_depth« (aktuell %dkB), nachdem Sie sichergestellt haben, dass die Stacktiefenbegrenzung Ihrer Plattform ausreichend ist." -#: tcop/postgres.c:3612 +#: tcop/postgres.c:3616 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "»max_stack_depth« darf %ldkB nicht überschreiten." -#: tcop/postgres.c:3614 +#: tcop/postgres.c:3618 #, c-format msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." msgstr "Erhöhen Sie die Stacktiefenbegrenzung Ihrer Plattform mit »ulimit -s« oder der lokalen Entsprechung." -#: tcop/postgres.c:3637 +#: tcop/postgres.c:3641 #, c-format msgid "\"client_connection_check_interval\" must be set to 0 on this platform." msgstr "»client_connection_check_interval« muss auf dieser Plattform auf 0 gesetzt sein." -#: tcop/postgres.c:3658 +#: tcop/postgres.c:3662 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "Kann Parameter nicht einschalten, wenn »log_statement_stats« an ist." -#: tcop/postgres.c:3673 +#: tcop/postgres.c:3677 #, 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." -#: tcop/postgres.c:4098 +#: tcop/postgres.c:4102 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "ungültiges Kommandozeilenargument für Serverprozess: %s" -#: tcop/postgres.c:4099 tcop/postgres.c:4105 +#: tcop/postgres.c:4103 tcop/postgres.c:4109 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Versuchen Sie »%s --help« für weitere Informationen." -#: tcop/postgres.c:4103 +#: tcop/postgres.c:4107 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: ungültiges Kommandozeilenargument: %s" -#: tcop/postgres.c:4156 +#: tcop/postgres.c:4160 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: weder Datenbankname noch Benutzername angegeben" -#: tcop/postgres.c:4909 +#: tcop/postgres.c:4913 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "ungültiger Subtyp %d von CLOSE-Message" -#: tcop/postgres.c:4946 +#: tcop/postgres.c:4950 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "ungültiger Subtyp %d von DESCRIBE-Message" -#: tcop/postgres.c:5033 +#: tcop/postgres.c:5037 #, 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:5037 +#: tcop/postgres.c:5041 #, 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:5217 +#: tcop/postgres.c:5221 #, 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" @@ -24211,12 +24221,12 @@ msgstr "Parameter »Dictionary« fehlt" #: tsearch/spell.c:383 tsearch/spell.c:400 tsearch/spell.c:409 -#: tsearch/spell.c:1040 +#: tsearch/spell.c:1052 #, c-format msgid "invalid affix flag \"%s\"" msgstr "ungültiges Affix-Flag »%s«" -#: tsearch/spell.c:387 tsearch/spell.c:1044 +#: tsearch/spell.c:387 tsearch/spell.c:1056 #, c-format msgid "affix flag \"%s\" is out of range" msgstr "Affix-Flag »%s« ist außerhalb des gültigen Bereichs" @@ -24236,33 +24246,33 @@ msgid "could not open dictionary file \"%s\": %m" msgstr "konnte Wörterbuchdatei »%s« nicht öffnen: %m" -#: tsearch/spell.c:1167 tsearch/spell.c:1179 tsearch/spell.c:1739 -#: tsearch/spell.c:1744 tsearch/spell.c:1749 +#: tsearch/spell.c:1181 tsearch/spell.c:1193 tsearch/spell.c:1753 +#: tsearch/spell.c:1758 tsearch/spell.c:1763 #, c-format msgid "invalid affix alias \"%s\"" msgstr "ungültiges Affixalias »%s«" -#: tsearch/spell.c:1220 tsearch/spell.c:1291 tsearch/spell.c:1440 +#: tsearch/spell.c:1234 tsearch/spell.c:1305 tsearch/spell.c:1454 #, c-format msgid "could not open affix file \"%s\": %m" msgstr "konnte Affixdatei »%s« nicht öffnen: %m" -#: tsearch/spell.c:1274 +#: tsearch/spell.c:1288 #, c-format msgid "Ispell dictionary supports only \"default\", \"long\", and \"num\" flag values" msgstr "Ispell-Wörterbuch unterstützt nur die Flag-Werte »default«, »long« und »num«" -#: tsearch/spell.c:1318 +#: tsearch/spell.c:1332 #, c-format msgid "invalid number of flag vector aliases" msgstr "ungültige Anzahl Flag-Vektor-Aliasse" -#: tsearch/spell.c:1341 +#: tsearch/spell.c:1355 #, c-format msgid "number of aliases exceeds specified number %d" msgstr "Anzahl der Aliasse überschreitet angegebene Zahl %d" -#: tsearch/spell.c:1555 +#: tsearch/spell.c:1569 #, c-format msgid "affix file contains both old-style and new-style commands" msgstr "Affixdatei enthält Befehle im alten und im neuen Stil" @@ -24494,20 +24504,20 @@ msgid "must be able to SET ROLE \"%s\"" msgstr "Berechtigung nur für Rollen, die SET ROLE \"%s\" ausführen können" -#: utils/adt/array_userfuncs.c:102 utils/adt/array_userfuncs.c:489 -#: utils/adt/array_userfuncs.c:866 utils/adt/json.c:602 utils/adt/json.c:740 +#: utils/adt/array_userfuncs.c:103 utils/adt/array_userfuncs.c:490 +#: utils/adt/array_userfuncs.c:867 utils/adt/json.c:602 utils/adt/json.c:740 #: utils/adt/json.c:790 utils/adt/jsonb.c:1025 utils/adt/jsonb.c:1098 #: utils/adt/jsonb.c:1530 utils/adt/jsonb.c:1718 utils/adt/jsonb.c:1728 #, c-format msgid "could not determine input data type" msgstr "konnte Eingabedatentypen nicht bestimmen" -#: utils/adt/array_userfuncs.c:107 +#: utils/adt/array_userfuncs.c:108 #, c-format msgid "input data type is not an array" msgstr "Eingabedatentyp ist kein Array" -#: utils/adt/array_userfuncs.c:151 utils/adt/array_userfuncs.c:203 +#: utils/adt/array_userfuncs.c:152 utils/adt/array_userfuncs.c:204 #: utils/adt/float.c:1222 utils/adt/float.c:1296 utils/adt/float.c:4022 #: utils/adt/float.c:4060 utils/adt/int.c:807 utils/adt/int.c:829 #: utils/adt/int.c:843 utils/adt/int.c:857 utils/adt/int.c:888 @@ -24523,55 +24533,60 @@ msgid "integer out of range" msgstr "integer ist außerhalb des gültigen Bereichs" -#: utils/adt/array_userfuncs.c:158 utils/adt/array_userfuncs.c:213 +#: utils/adt/array_userfuncs.c:159 utils/adt/array_userfuncs.c:214 #, c-format msgid "argument must be empty or one-dimensional array" msgstr "Argument muss entweder leer oder ein eindimensionales Array sein" -#: utils/adt/array_userfuncs.c:295 utils/adt/array_userfuncs.c:334 -#: utils/adt/array_userfuncs.c:371 utils/adt/array_userfuncs.c:400 -#: utils/adt/array_userfuncs.c:428 +#: utils/adt/array_userfuncs.c:296 utils/adt/array_userfuncs.c:335 +#: utils/adt/array_userfuncs.c:372 utils/adt/array_userfuncs.c:401 +#: utils/adt/array_userfuncs.c:429 #, c-format msgid "cannot concatenate incompatible arrays" msgstr "inkompatible Arrays können nicht aneinandergehängt werden" -#: utils/adt/array_userfuncs.c:296 +#: utils/adt/array_userfuncs.c:297 #, c-format msgid "Arrays with element types %s and %s are not compatible for concatenation." msgstr "Arrays mit Elementtypen %s und %s sind nicht kompatibel für Aneinanderhängen." -#: utils/adt/array_userfuncs.c:335 +#: utils/adt/array_userfuncs.c:336 #, c-format msgid "Arrays of %d and %d dimensions are not compatible for concatenation." msgstr "Arrays mit %d und %d Dimensionen sind nicht kompatibel für Aneinanderhängen." -#: utils/adt/array_userfuncs.c:372 +#: utils/adt/array_userfuncs.c:373 #, c-format msgid "Arrays with differing element dimensions are not compatible for concatenation." msgstr "Arrays mit unterschiedlichen Elementdimensionen sind nicht kompatibel für Aneinanderhängen." -#: utils/adt/array_userfuncs.c:401 utils/adt/array_userfuncs.c:429 +#: utils/adt/array_userfuncs.c:402 utils/adt/array_userfuncs.c:430 #, c-format msgid "Arrays with differing dimensions are not compatible for concatenation." msgstr "Arrays mit unterschiedlichen Dimensionen sind nicht kompatibel für Aneinanderhängen." -#: utils/adt/array_userfuncs.c:975 utils/adt/array_userfuncs.c:983 +#: utils/adt/array_userfuncs.c:977 utils/adt/array_userfuncs.c:985 #: utils/adt/arrayfuncs.c:5622 utils/adt/arrayfuncs.c:5628 #, c-format msgid "cannot accumulate arrays of different dimensionality" msgstr "Arrays unterschiedlicher Dimensionalität können nicht akkumuliert werden" -#: utils/adt/array_userfuncs.c:1272 utils/adt/array_userfuncs.c:1426 +#: utils/adt/array_userfuncs.c:997 +#, c-format +msgid "array size exceeds the maximum allowed (%zu)" +msgstr "Arraygröße überschreitet erlaubtes Maximum (%zu)" + +#: utils/adt/array_userfuncs.c:1281 utils/adt/array_userfuncs.c:1435 #, c-format msgid "searching for elements in multidimensional arrays is not supported" msgstr "Suche nach Elementen in mehrdimensionalen Arrays wird nicht unterstützt" -#: utils/adt/array_userfuncs.c:1301 +#: utils/adt/array_userfuncs.c:1310 #, c-format msgid "initial position must not be null" msgstr "Startposition darf nicht NULL sein" -#: utils/adt/array_userfuncs.c:1674 +#: utils/adt/array_userfuncs.c:1683 #, c-format msgid "sample size must be between 0 and %d" msgstr "Stichprobengröße muss zwischen 0 und %d sein" @@ -24690,7 +24705,7 @@ msgstr "binäre Daten haben Array-Elementtyp %u (%s) statt erwartet %u (%s)" #: utils/adt/arrayfuncs.c:1378 utils/adt/multirangetypes.c:450 -#: utils/adt/rangetypes.c:351 utils/cache/lsyscache.c:2958 +#: utils/adt/rangetypes.c:351 utils/cache/lsyscache.c:2996 #, c-format msgid "no binary input function available for type %s" msgstr "keine binäre Eingabefunktion verfügbar für Typ %s" @@ -24701,7 +24716,7 @@ msgstr "falsches Binärformat in Arrayelement %d" #: utils/adt/arrayfuncs.c:1588 utils/adt/multirangetypes.c:455 -#: utils/adt/rangetypes.c:356 utils/cache/lsyscache.c:2991 +#: utils/adt/rangetypes.c:356 utils/cache/lsyscache.c:3029 #, c-format msgid "no binary output function available for type %s" msgstr "keine binäre Ausgabefunktion verfügbar für Typ %s" @@ -24939,9 +24954,9 @@ msgid "TIME(%d)%s precision reduced to maximum allowed, %d" msgstr "Präzision von TIME(%d)%s auf erlaubten Höchstwert %d reduziert" -#: utils/adt/date.c:167 utils/adt/date.c:175 utils/adt/formatting.c:4424 -#: utils/adt/formatting.c:4433 utils/adt/formatting.c:4538 -#: utils/adt/formatting.c:4548 +#: utils/adt/date.c:167 utils/adt/date.c:175 utils/adt/formatting.c:4426 +#: utils/adt/formatting.c:4435 utils/adt/formatting.c:4540 +#: utils/adt/formatting.c:4550 #, c-format msgid "date out of range: \"%s\"" msgstr "date ist außerhalb des gültigen Bereichs: »%s«" @@ -24996,8 +25011,8 @@ #: utils/adt/date.c:1314 utils/adt/date.c:1360 utils/adt/date.c:1919 #: utils/adt/date.c:1950 utils/adt/date.c:1979 utils/adt/date.c:2869 #: utils/adt/date.c:3101 utils/adt/datetime.c:422 utils/adt/datetime.c:1807 -#: utils/adt/formatting.c:4269 utils/adt/formatting.c:4305 -#: utils/adt/formatting.c:4392 utils/adt/formatting.c:4514 utils/adt/json.c:366 +#: utils/adt/formatting.c:4271 utils/adt/formatting.c:4307 +#: utils/adt/formatting.c:4394 utils/adt/formatting.c:4516 utils/adt/json.c:366 #: utils/adt/json.c:405 utils/adt/timestamp.c:248 utils/adt/timestamp.c:280 #: utils/adt/timestamp.c:716 utils/adt/timestamp.c:725 #: utils/adt/timestamp.c:803 utils/adt/timestamp.c:836 @@ -25027,7 +25042,7 @@ msgid "timestamp out of range" msgstr "timestamp ist außerhalb des gültigen Bereichs" -#: utils/adt/date.c:1536 utils/adt/date.c:2352 utils/adt/formatting.c:4597 +#: utils/adt/date.c:1536 utils/adt/date.c:2352 utils/adt/formatting.c:4599 #, c-format msgid "time out of range" msgstr "time ist außerhalb des gültigen Bereichs" @@ -25303,254 +25318,254 @@ msgid "Intervals are not tied to specific calendar dates." msgstr "Intervalle beziehen sich nicht auf bestimmte Kalenderdaten." -#: utils/adt/formatting.c:1161 +#: utils/adt/formatting.c:1163 #, c-format msgid "\"EEEE\" must be the last pattern used" msgstr "»EEEE« muss das letzte Muster sein" -#: utils/adt/formatting.c:1169 +#: utils/adt/formatting.c:1171 #, c-format msgid "\"9\" must be ahead of \"PR\"" msgstr "»9« muss vor »PR« stehen" -#: utils/adt/formatting.c:1185 +#: utils/adt/formatting.c:1187 #, c-format msgid "\"0\" must be ahead of \"PR\"" msgstr "»0« muss vor »PR« stehen" -#: utils/adt/formatting.c:1212 +#: utils/adt/formatting.c:1214 #, c-format msgid "multiple decimal points" msgstr "mehrere Dezimalpunkte" -#: utils/adt/formatting.c:1216 utils/adt/formatting.c:1299 +#: utils/adt/formatting.c:1218 utils/adt/formatting.c:1301 #, c-format msgid "cannot use \"V\" and decimal point together" msgstr "»V« und Dezimalpunkt können nicht zusammen verwendet werden" -#: utils/adt/formatting.c:1228 +#: utils/adt/formatting.c:1230 #, c-format msgid "cannot use \"S\" twice" msgstr "»S« kann nicht zweimal verwendet werden" -#: utils/adt/formatting.c:1232 +#: utils/adt/formatting.c:1234 #, c-format msgid "cannot use \"S\" and \"PL\"/\"MI\"/\"SG\"/\"PR\" together" msgstr "»S« und »PL«/»MI«/»SG«/»PR« können nicht zusammen verwendet werden" -#: utils/adt/formatting.c:1252 +#: utils/adt/formatting.c:1254 #, c-format msgid "cannot use \"S\" and \"MI\" together" msgstr "»S« und »MI« können nicht zusammen verwendet werden" -#: utils/adt/formatting.c:1262 +#: utils/adt/formatting.c:1264 #, c-format msgid "cannot use \"S\" and \"PL\" together" msgstr "»S« und »PL« können nicht zusammen verwendet werden" -#: utils/adt/formatting.c:1272 +#: utils/adt/formatting.c:1274 #, c-format msgid "cannot use \"S\" and \"SG\" together" msgstr "»S« und »SG« können nicht zusammen verwendet werden" -#: utils/adt/formatting.c:1281 +#: utils/adt/formatting.c:1283 #, c-format msgid "cannot use \"PR\" and \"S\"/\"PL\"/\"MI\"/\"SG\" together" msgstr "»PR« und »S«/»PL«/»MI«/»SG« können nicht zusammen verwendet werden" -#: utils/adt/formatting.c:1307 +#: utils/adt/formatting.c:1309 #, c-format msgid "cannot use \"EEEE\" twice" msgstr "»EEEE« kann nicht zweimal verwendet werden" -#: utils/adt/formatting.c:1313 +#: utils/adt/formatting.c:1315 #, c-format msgid "\"EEEE\" is incompatible with other formats" msgstr "»EEEE« ist mit anderen Formaten inkompatibel" -#: utils/adt/formatting.c:1314 +#: utils/adt/formatting.c:1316 #, c-format msgid "\"EEEE\" may only be used together with digit and decimal point patterns." msgstr "»EEEE« kann nur zusammen mit Platzhaltern für Ziffern oder Dezimalpunkt verwendet werden." -#: utils/adt/formatting.c:1398 +#: utils/adt/formatting.c:1400 #, c-format msgid "invalid datetime format separator: \"%s\"" msgstr "ungültiges Datum-/Zeit-Formattrennzeichen: »%s«" -#: utils/adt/formatting.c:1525 +#: utils/adt/formatting.c:1527 #, c-format msgid "\"%s\" is not a number" msgstr "»%s« ist keine Zahl" -#: utils/adt/formatting.c:1603 +#: utils/adt/formatting.c:1605 #, c-format msgid "case conversion failed: %s" msgstr "Groß/Klein-Umwandlung fehlgeschlagen: %s" -#: utils/adt/formatting.c:1651 utils/adt/formatting.c:1799 -#: utils/adt/formatting.c:1989 +#: utils/adt/formatting.c:1653 utils/adt/formatting.c:1801 +#: utils/adt/formatting.c:1991 #, c-format msgid "could not determine which collation to use for %s function" msgstr "konnte die für die Funktion %s zu verwendende Sortierfolge nicht bestimmen" -#: utils/adt/formatting.c:2410 +#: utils/adt/formatting.c:2412 #, c-format msgid "invalid combination of date conventions" msgstr "ungültige Kombination von Datumskonventionen" -#: utils/adt/formatting.c:2411 +#: utils/adt/formatting.c:2413 #, c-format msgid "Do not mix Gregorian and ISO week date conventions in a formatting template." msgstr "Die Gregorianische und die ISO-Konvention für Wochendaten können nicht einer Formatvorlage gemischt werden." -#: utils/adt/formatting.c:2433 +#: utils/adt/formatting.c:2435 #, c-format msgid "conflicting values for \"%s\" field in formatting string" msgstr "widersprüchliche Werte für das Feld »%s« in Formatzeichenkette" -#: utils/adt/formatting.c:2435 +#: utils/adt/formatting.c:2437 #, c-format msgid "This value contradicts a previous setting for the same field type." msgstr "Der Wert widerspricht einer vorherigen Einstellung für den selben Feldtyp." -#: utils/adt/formatting.c:2502 +#: utils/adt/formatting.c:2504 #, c-format msgid "source string too short for \"%s\" formatting field" msgstr "Quellzeichenkette zu kurz für Formatfeld »%s»" -#: utils/adt/formatting.c:2504 +#: utils/adt/formatting.c:2506 #, c-format msgid "Field requires %d characters, but only %d remain." msgstr "Feld benötigt %d Zeichen, aber nur %d verbleiben." -#: utils/adt/formatting.c:2506 utils/adt/formatting.c:2520 +#: utils/adt/formatting.c:2508 utils/adt/formatting.c:2522 #, c-format msgid "If your source string is not fixed-width, try using the \"FM\" modifier." msgstr "Wenn die Quellzeichenkette keine feste Breite hat, versuchen Sie den Modifikator »FM«." -#: utils/adt/formatting.c:2516 utils/adt/formatting.c:2529 -#: utils/adt/formatting.c:2750 utils/adt/formatting.c:3650 +#: utils/adt/formatting.c:2518 utils/adt/formatting.c:2531 +#: utils/adt/formatting.c:2752 utils/adt/formatting.c:3652 #, c-format msgid "invalid value \"%s\" for \"%s\"" msgstr "ungültiger Wert »%s« für »%s«" -#: utils/adt/formatting.c:2518 +#: utils/adt/formatting.c:2520 #, c-format msgid "Field requires %d characters, but only %d could be parsed." msgstr "Feld benötigt %d Zeichen, aber nur %d konnten geparst werden." -#: utils/adt/formatting.c:2531 +#: utils/adt/formatting.c:2533 #, c-format msgid "Value must be an integer." msgstr "Der Wert muss eine ganze Zahl sein." -#: utils/adt/formatting.c:2536 +#: utils/adt/formatting.c:2538 #, c-format msgid "value for \"%s\" in source string is out of range" msgstr "Wert für »%s« in der Eingabezeichenkette ist außerhalb des gültigen Bereichs" -#: utils/adt/formatting.c:2538 +#: utils/adt/formatting.c:2540 #, c-format msgid "Value must be in the range %d to %d." msgstr "Der Wert muss im Bereich %d bis %d sein." -#: utils/adt/formatting.c:2752 +#: utils/adt/formatting.c:2754 #, c-format msgid "The given value did not match any of the allowed values for this field." msgstr "Der angegebene Wert stimmte mit keinem der für dieses Feld zulässigen Werte überein." -#: utils/adt/formatting.c:2968 utils/adt/formatting.c:2988 -#: utils/adt/formatting.c:3008 utils/adt/formatting.c:3028 -#: utils/adt/formatting.c:3047 utils/adt/formatting.c:3066 -#: utils/adt/formatting.c:3090 utils/adt/formatting.c:3108 -#: utils/adt/formatting.c:3126 utils/adt/formatting.c:3144 -#: utils/adt/formatting.c:3161 utils/adt/formatting.c:3178 +#: utils/adt/formatting.c:2970 utils/adt/formatting.c:2990 +#: utils/adt/formatting.c:3010 utils/adt/formatting.c:3030 +#: utils/adt/formatting.c:3049 utils/adt/formatting.c:3068 +#: utils/adt/formatting.c:3092 utils/adt/formatting.c:3110 +#: utils/adt/formatting.c:3128 utils/adt/formatting.c:3146 +#: utils/adt/formatting.c:3163 utils/adt/formatting.c:3180 #, c-format msgid "localized string format value too long" msgstr "lokalisierter Formatwert ist zu lang" -#: utils/adt/formatting.c:3458 +#: utils/adt/formatting.c:3460 #, c-format msgid "unmatched format separator \"%c\"" msgstr "Formattrennzeichen »%c« ohne passende Eingabe" -#: utils/adt/formatting.c:3519 +#: utils/adt/formatting.c:3521 #, c-format msgid "unmatched format character \"%s\"" msgstr "Formatzeichen »%s« ohne passende Eingabe" -#: utils/adt/formatting.c:3652 +#: utils/adt/formatting.c:3654 #, c-format msgid "Time zone abbreviation is not recognized." msgstr "Zeitzonenabkürzung wird nicht erkannt." -#: utils/adt/formatting.c:3853 +#: utils/adt/formatting.c:3855 #, c-format msgid "invalid input string for \"Y,YYY\"" msgstr "ungültige Eingabe für »Y,YYY«" -#: utils/adt/formatting.c:3942 +#: utils/adt/formatting.c:3944 #, c-format msgid "input string is too short for datetime format" msgstr "Eingabezeichenkette ist zu kurz für Datum-/Zeitformat" -#: utils/adt/formatting.c:3950 +#: utils/adt/formatting.c:3952 #, c-format msgid "trailing characters remain in input string after datetime format" msgstr "nach dem Datum-/Zeitformat bleiben noch Zeichen in der Eingabezeichenkette" -#: utils/adt/formatting.c:4494 +#: utils/adt/formatting.c:4496 #, c-format msgid "missing time zone in input string for type timestamptz" msgstr "Zeitzone fehlt in Eingabezeichenkette für Typ timestamptz" -#: utils/adt/formatting.c:4500 +#: utils/adt/formatting.c:4502 #, c-format msgid "timestamptz out of range" msgstr "timestamptz ist außerhalb des gültigen Bereichs" -#: utils/adt/formatting.c:4528 +#: utils/adt/formatting.c:4530 #, c-format msgid "datetime format is zoned but not timed" msgstr "Datum-/Zeitformat hat Zeitzone aber keine Zeit" -#: utils/adt/formatting.c:4577 +#: utils/adt/formatting.c:4579 #, c-format msgid "missing time zone in input string for type timetz" msgstr "Zeitzone fehlt in Eingabezeichenkette für Typ timetz" -#: utils/adt/formatting.c:4583 +#: utils/adt/formatting.c:4585 #, c-format msgid "timetz out of range" msgstr "timetz ist außerhalb des gültigen Bereichs" -#: utils/adt/formatting.c:4609 +#: utils/adt/formatting.c:4611 #, c-format msgid "datetime format is not dated and not timed" msgstr "Datum-/Zeitformat hat kein Datum und keine Zeit" -#: utils/adt/formatting.c:4786 +#: utils/adt/formatting.c:4788 #, c-format msgid "hour \"%d\" is invalid for the 12-hour clock" msgstr "Stunde »%d« ist bei einer 12-Stunden-Uhr ungültig" -#: utils/adt/formatting.c:4788 +#: utils/adt/formatting.c:4790 #, c-format msgid "Use the 24-hour clock, or give an hour between 1 and 12." msgstr "Verwenden Sie die 24-Stunden-Uhr oder geben Sie eine Stunde zwischen 1 und 12 an." -#: utils/adt/formatting.c:4900 +#: utils/adt/formatting.c:4902 #, c-format msgid "cannot calculate day of year without year information" msgstr "kann Tag des Jahres nicht berechnen ohne Jahrinformationen" -#: utils/adt/formatting.c:5854 +#: utils/adt/formatting.c:5867 #, c-format msgid "\"EEEE\" not supported for input" msgstr "»E« wird nicht bei der Eingabe unterstützt" -#: utils/adt/formatting.c:5866 +#: utils/adt/formatting.c:5879 #, c-format msgid "\"RN\" not supported for input" msgstr "»RN« wird nicht bei der Eingabe unterstützt" @@ -26684,135 +26699,135 @@ msgid "could not open collator for locale \"%s\" with rules \"%s\": %s" msgstr "konnte Collator für Locale »%s« mit Regeln »%s« nicht öffnen: %s" -#: utils/adt/pg_locale.c:1521 utils/adt/pg_locale.c:2995 -#: utils/adt/pg_locale.c:3068 +#: utils/adt/pg_locale.c:1524 utils/adt/pg_locale.c:3001 +#: utils/adt/pg_locale.c:3074 #, c-format msgid "ICU is not supported in this build" msgstr "ICU wird in dieser Installation nicht unterstützt" -#: utils/adt/pg_locale.c:1549 +#: utils/adt/pg_locale.c:1552 #, c-format msgid "could not create locale \"%s\": %m" msgstr "konnte Locale »%s« nicht erzeugen: %m" -#: utils/adt/pg_locale.c:1552 +#: utils/adt/pg_locale.c:1555 #, c-format msgid "The operating system could not find any locale data for the locale name \"%s\"." msgstr "Das Betriebssystem konnte keine Locale-Daten für den Locale-Namen »%s« finden." -#: utils/adt/pg_locale.c:1673 +#: utils/adt/pg_locale.c:1676 #, c-format msgid "collations with different collate and ctype values are not supported on this platform" msgstr "Sortierfolgen mit unterschiedlichen »collate«- und »ctype«-Werten werden auf dieser Plattform nicht unterstützt" -#: utils/adt/pg_locale.c:1720 +#: utils/adt/pg_locale.c:1723 #, c-format msgid "collation \"%s\" has no actual version, but a version was recorded" msgstr "Sortierfolge »%s« hat keine tatsächliche Version, aber eine Version wurde aufgezeichnet" -#: utils/adt/pg_locale.c:1726 +#: utils/adt/pg_locale.c:1729 #, c-format msgid "collation \"%s\" has version mismatch" msgstr "Version von Sortierfolge »%s« stimmt nicht überein" -#: utils/adt/pg_locale.c:1728 +#: utils/adt/pg_locale.c:1731 #, c-format msgid "The collation in the database was created using version %s, but the operating system provides version %s." msgstr "Die Sortierfolge in der Datenbank wurde mit Version %s erzeugt, aber das Betriebssystem hat Version %s." -#: utils/adt/pg_locale.c:1731 +#: utils/adt/pg_locale.c:1734 #, c-format msgid "Rebuild all objects affected by this collation and run ALTER COLLATION %s REFRESH VERSION, or build PostgreSQL with the right library version." msgstr "Bauen Sie alle von dieser Sortierfolge beinflussten Objekte neu und führen Sie ALTER COLLATION %s REFRESH VERSION aus, oder bauen Sie PostgreSQL mit der richtigen Bibliotheksversion." -#: utils/adt/pg_locale.c:1775 utils/adt/pg_locale.c:2559 -#: utils/adt/pg_locale.c:2584 +#: utils/adt/pg_locale.c:1778 utils/adt/pg_locale.c:2565 +#: utils/adt/pg_locale.c:2590 #, c-format msgid "invalid locale name \"%s\" for builtin provider" msgstr "ungültiger Locale-Name »%s« für Provider »builtin«" -#: utils/adt/pg_locale.c:1817 +#: utils/adt/pg_locale.c:1820 #, c-format msgid "could not load locale \"%s\"" msgstr "konnte Locale »%s« nicht laden" -#: utils/adt/pg_locale.c:1842 +#: utils/adt/pg_locale.c:1845 #, c-format msgid "could not get collation version for locale \"%s\": error code %lu" msgstr "konnte Sortierfolgenversion für Locale »%s« nicht ermitteln: Fehlercode %lu" -#: utils/adt/pg_locale.c:1898 utils/adt/pg_locale.c:1911 +#: utils/adt/pg_locale.c:1901 utils/adt/pg_locale.c:1914 #, c-format msgid "could not convert string to UTF-16: error code %lu" msgstr "konnte Zeichenkette nicht in UTF-16 umwandeln: Fehlercode %lu" -#: utils/adt/pg_locale.c:1923 +#: utils/adt/pg_locale.c:1926 #, c-format msgid "could not compare Unicode strings: %m" msgstr "konnte Unicode-Zeichenketten nicht vergleichen: %m" -#: utils/adt/pg_locale.c:2097 +#: utils/adt/pg_locale.c:2100 #, c-format msgid "collation failed: %s" msgstr "Vergleichung fehlgeschlagen: %s" -#: utils/adt/pg_locale.c:2316 utils/adt/pg_locale.c:2348 +#: utils/adt/pg_locale.c:2319 utils/adt/pg_locale.c:2354 #, c-format msgid "sort key generation failed: %s" msgstr "Sortierschlüsselerzeugung fehlgeschlagen: %s" -#: utils/adt/pg_locale.c:2638 +#: utils/adt/pg_locale.c:2644 #, c-format msgid "could not get language from locale \"%s\": %s" msgstr "konnte Sprache nicht aus Locale »%s« ermitteln: %s" -#: utils/adt/pg_locale.c:2659 utils/adt/pg_locale.c:2675 +#: utils/adt/pg_locale.c:2665 utils/adt/pg_locale.c:2681 #, c-format msgid "could not open collator for locale \"%s\": %s" msgstr "konnte Collator für Locale »%s« nicht öffnen: %s" -#: utils/adt/pg_locale.c:2700 +#: utils/adt/pg_locale.c:2706 #, c-format msgid "encoding \"%s\" not supported by ICU" msgstr "Kodierung »%s« wird von ICU nicht unterstützt" -#: utils/adt/pg_locale.c:2707 +#: utils/adt/pg_locale.c:2713 #, c-format msgid "could not open ICU converter for encoding \"%s\": %s" msgstr "konnte ICU-Konverter für Kodierung »%s« nicht öffnen: %s" -#: utils/adt/pg_locale.c:2725 utils/adt/pg_locale.c:2744 -#: utils/adt/pg_locale.c:2800 utils/adt/pg_locale.c:2811 +#: utils/adt/pg_locale.c:2731 utils/adt/pg_locale.c:2750 +#: utils/adt/pg_locale.c:2806 utils/adt/pg_locale.c:2817 #, c-format msgid "%s failed: %s" msgstr "%s fehlgeschlagen: %s" -#: utils/adt/pg_locale.c:2986 +#: utils/adt/pg_locale.c:2992 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "konnte Locale-Namen »%s« nicht in Sprach-Tag umwandeln: %s" -#: utils/adt/pg_locale.c:3027 +#: utils/adt/pg_locale.c:3033 #, c-format msgid "could not get language from ICU locale \"%s\": %s" msgstr "konnte Sprache nicht aus ICU-Locale »%s« ermitteln: %s" -#: utils/adt/pg_locale.c:3029 utils/adt/pg_locale.c:3058 +#: utils/adt/pg_locale.c:3035 utils/adt/pg_locale.c:3064 #, c-format msgid "To disable ICU locale validation, set the parameter \"%s\" to \"%s\"." msgstr "Um die Validierung von ICU-Locales auszuschalten, setzen Sie den Parameter »%s« auf »%s«." -#: utils/adt/pg_locale.c:3056 +#: utils/adt/pg_locale.c:3062 #, c-format msgid "ICU locale \"%s\" has unknown language \"%s\"" msgstr "ICU-Locale »%s« hat unbekannte Sprache »%s«" -#: utils/adt/pg_locale.c:3207 +#: utils/adt/pg_locale.c:3213 #, c-format msgid "invalid multibyte character for locale" msgstr "ungültiges Mehrbytezeichen für Locale" -#: utils/adt/pg_locale.c:3208 +#: utils/adt/pg_locale.c:3214 #, c-format msgid "The server's LC_CTYPE locale is probably incompatible with the database encoding." msgstr "Die LC_CTYPE-Locale des Servers ist wahrscheinlich mit der Kodierung der Datenbank inkompatibel." @@ -27827,23 +27842,23 @@ msgid "more than one value returned by column XPath expression" msgstr "XPath-Ausdruck für Spalte gab mehr als einen Wert zurück" -#: utils/cache/lsyscache.c:1017 +#: utils/cache/lsyscache.c:1055 #, c-format msgid "cast from type %s to type %s does not exist" msgstr "Typumwandlung von Typ %s in Typ %s existiert nicht" -#: utils/cache/lsyscache.c:2887 utils/cache/lsyscache.c:2920 -#: utils/cache/lsyscache.c:2953 utils/cache/lsyscache.c:2986 +#: utils/cache/lsyscache.c:2925 utils/cache/lsyscache.c:2958 +#: utils/cache/lsyscache.c:2991 utils/cache/lsyscache.c:3024 #, c-format msgid "type %s is only a shell" msgstr "Typ %s ist nur eine Hülle" -#: utils/cache/lsyscache.c:2892 +#: utils/cache/lsyscache.c:2930 #, c-format msgid "no input function available for type %s" msgstr "keine Eingabefunktion verfügbar für Typ %s" -#: utils/cache/lsyscache.c:2925 +#: utils/cache/lsyscache.c:2963 #, c-format msgid "no output function available for type %s" msgstr "keine Ausgabefunktion verfügbar für Typ %s" @@ -31089,8 +31104,8 @@ #: utils/sort/tuplestore.c:518 utils/sort/tuplestore.c:528 #: utils/sort/tuplestore.c:869 utils/sort/tuplestore.c:973 #: utils/sort/tuplestore.c:1037 utils/sort/tuplestore.c:1054 -#: utils/sort/tuplestore.c:1256 utils/sort/tuplestore.c:1321 -#: utils/sort/tuplestore.c:1330 +#: utils/sort/tuplestore.c:1268 utils/sort/tuplestore.c:1333 +#: utils/sort/tuplestore.c:1342 #, c-format msgid "could not seek in tuplestore temporary file" msgstr "konnte Positionszeiger in temporärer Datei für Tuplestore nicht setzen" diff -Nru postgresql-17-17.9/src/backend/po/es.po postgresql-17-17.10/src/backend/po/es.po --- postgresql-17-17.9/src/backend/po/es.po 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/po/es.po 2026-05-11 19:46:41.000000000 +0000 @@ -65,7 +65,7 @@ "Project-Id-Version: PostgreSQL server 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" "POT-Creation-Date: 2026-02-06 23:27+0000\n" -"PO-Revision-Date: 2026-02-07 09:17+0100\n" +"PO-Revision-Date: 2026-02-25 16:52+0100\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -21237,7 +21237,7 @@ #: replication/slot.c:2401 #, c-format msgid "physical replication slot \"%s\" exists, but \"wal_level\" < \"replica\"" -msgstr "existe el slot de replicación lógica «%s», pero «wal_level» < «replica»" +msgstr "existe el slot de replicación física «%s», pero «wal_level» < «replica»" # <> hello vim #: replication/slot.c:2403 diff -Nru postgresql-17-17.9/src/backend/po/ka.po postgresql-17-17.10/src/backend/po/ka.po --- postgresql-17-17.9/src/backend/po/ka.po 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/po/ka.po 2026-05-11 19:46:41.000000000 +0000 @@ -1,14 +1,14 @@ # Georgian message translation file for postgres # Copyright (C) 2023 PostgreSQL Global Development Group # This file is distributed under the same license as the postgres (PostgreSQL) package. -# Temuri Doghonadze , 2022-2023. +# Temuri Doghonadze , 2022-2025. # msgid "" msgstr "" "Project-Id-Version: postgres (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-06-14 02:13+0000\n" -"PO-Revision-Date: 2024-06-14 06:17+0200\n" +"POT-Creation-Date: 2025-02-17 21:45+0000\n" +"PO-Revision-Date: 2025-02-18 06:33+0100\n" "Last-Translator: Temuri Doghonadze \n" "Language-Team: Georgian \n" "Language: ka\n" @@ -16,7 +16,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.5\n" #: ../common/binaryheap.c:121 ../common/binaryheap.c:159 #, c-format @@ -76,24 +76,24 @@ msgid "not recorded" msgstr "ჩაწერილი არაა" -#: ../common/controldata_utils.c:93 ../common/controldata_utils.c:97 commands/copyfrom.c:1737 commands/extension.c:3538 utils/adt/genfile.c:123 utils/time/snapmgr.c:1430 +#: ../common/controldata_utils.c:93 ../common/controldata_utils.c:97 commands/copyfrom.c:1739 commands/extension.c:3538 utils/adt/genfile.c:123 utils/time/snapmgr.c:1430 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "ფაილის (%s) გახსნის შეცდომა: %m" -#: ../common/controldata_utils.c:108 ../common/controldata_utils.c:110 access/transam/timeline.c:143 access/transam/timeline.c:362 access/transam/twophase.c:1369 access/transam/xlog.c:3471 access/transam/xlog.c:4335 access/transam/xlogrecovery.c:1238 access/transam/xlogrecovery.c:1336 access/transam/xlogrecovery.c:1373 access/transam/xlogrecovery.c:1440 backup/basebackup.c:2123 backup/walsummary.c:283 commands/extension.c:3548 libpq/hba.c:764 -#: replication/logical/origin.c:745 replication/logical/origin.c:781 replication/logical/reorderbuffer.c:5084 replication/logical/snapbuild.c:2035 replication/slot.c:2236 replication/slot.c:2277 replication/walsender.c:655 storage/file/buffile.c:470 storage/file/copydir.c:185 utils/adt/genfile.c:197 utils/adt/misc.c:1028 utils/cache/relmapper.c:829 +#: ../common/controldata_utils.c:108 ../common/controldata_utils.c:110 access/transam/timeline.c:143 access/transam/timeline.c:362 access/transam/twophase.c:1353 access/transam/xlog.c:3477 access/transam/xlog.c:4341 access/transam/xlogrecovery.c:1238 access/transam/xlogrecovery.c:1336 access/transam/xlogrecovery.c:1373 access/transam/xlogrecovery.c:1440 backup/basebackup.c:2123 backup/walsummary.c:283 commands/extension.c:3548 libpq/hba.c:764 +#: replication/logical/origin.c:745 replication/logical/origin.c:781 replication/logical/reorderbuffer.c:5113 replication/logical/snapbuild.c:2052 replication/slot.c:2236 replication/slot.c:2277 replication/walsender.c:655 storage/file/buffile.c:470 storage/file/copydir.c:185 utils/adt/genfile.c:197 utils/adt/misc.c:1028 utils/cache/relmapper.c:829 #, c-format msgid "could not read file \"%s\": %m" msgstr "ფაილის (%s) წაკითხვის შეცდომა: %m" -#: ../common/controldata_utils.c:116 ../common/controldata_utils.c:119 access/transam/xlog.c:3476 access/transam/xlog.c:4340 replication/logical/origin.c:750 replication/logical/origin.c:789 replication/logical/snapbuild.c:2040 replication/slot.c:2240 replication/slot.c:2281 replication/walsender.c:660 utils/cache/relmapper.c:833 +#: ../common/controldata_utils.c:116 ../common/controldata_utils.c:119 access/transam/xlog.c:3482 access/transam/xlog.c:4346 replication/logical/origin.c:750 replication/logical/origin.c:789 replication/logical/snapbuild.c:2057 replication/slot.c:2240 replication/slot.c:2281 replication/walsender.c:660 utils/cache/relmapper.c:833 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "\"%s\"-ის წაკითხვის შეცდომა: წაკითხულია %d %zu-დან" -#: ../common/controldata_utils.c:128 ../common/controldata_utils.c:132 ../common/controldata_utils.c:277 ../common/controldata_utils.c:280 access/heap/rewriteheap.c:1141 access/heap/rewriteheap.c:1246 access/transam/timeline.c:392 access/transam/timeline.c:438 access/transam/timeline.c:512 access/transam/twophase.c:1381 access/transam/twophase.c:1793 access/transam/xlog.c:3317 access/transam/xlog.c:3511 access/transam/xlog.c:3516 access/transam/xlog.c:3652 -#: access/transam/xlog.c:4305 access/transam/xlog.c:5239 commands/copyfrom.c:1797 commands/copyto.c:325 libpq/be-fsstubs.c:470 libpq/be-fsstubs.c:540 replication/logical/origin.c:683 replication/logical/origin.c:822 replication/logical/reorderbuffer.c:5136 replication/logical/snapbuild.c:1802 replication/logical/snapbuild.c:1926 replication/slot.c:2126 replication/slot.c:2288 replication/walsender.c:670 storage/file/copydir.c:208 storage/file/copydir.c:213 +#: ../common/controldata_utils.c:128 ../common/controldata_utils.c:132 ../common/controldata_utils.c:277 ../common/controldata_utils.c:280 access/heap/rewriteheap.c:1141 access/heap/rewriteheap.c:1246 access/transam/timeline.c:392 access/transam/timeline.c:438 access/transam/timeline.c:512 access/transam/twophase.c:1365 access/transam/twophase.c:1784 access/transam/xlog.c:3323 access/transam/xlog.c:3517 access/transam/xlog.c:3522 access/transam/xlog.c:3658 +#: access/transam/xlog.c:4311 access/transam/xlog.c:5246 commands/copyfrom.c:1799 commands/copyto.c:325 libpq/be-fsstubs.c:470 libpq/be-fsstubs.c:540 replication/logical/origin.c:683 replication/logical/origin.c:822 replication/logical/reorderbuffer.c:5165 replication/logical/snapbuild.c:1819 replication/logical/snapbuild.c:1943 replication/slot.c:2126 replication/slot.c:2288 replication/walsender.c:670 storage/file/copydir.c:208 storage/file/copydir.c:213 #: storage/file/fd.c:828 storage/file/fd.c:3753 storage/file/fd.c:3859 utils/cache/relmapper.c:841 utils/cache/relmapper.c:956 #, c-format msgid "could not close file \"%s\": %m" @@ -115,28 +115,28 @@ "ბაიტების მიმდევრობა შესაძლოა არ ემთხვეოდეს ამ პროგრამის მიერ გამოყენებულს. ამ შემთხვევაში ქვემოთ \n" "მოცემული შედეგები არასწორი იქნება და PostgreSQL ეს აგება ამ მონაცემთა საქაღალდესთან შეუთავსებელი იქნება." -#: ../common/controldata_utils.c:225 ../common/controldata_utils.c:230 ../common/file_utils.c:70 ../common/file_utils.c:347 ../common/file_utils.c:406 ../common/file_utils.c:480 access/heap/rewriteheap.c:1229 access/transam/timeline.c:111 access/transam/timeline.c:251 access/transam/timeline.c:348 access/transam/twophase.c:1325 access/transam/xlog.c:3224 access/transam/xlog.c:3387 access/transam/xlog.c:3426 access/transam/xlog.c:3619 access/transam/xlog.c:4325 -#: access/transam/xlogrecovery.c:4263 access/transam/xlogrecovery.c:4366 access/transam/xlogutils.c:836 backup/basebackup.c:547 backup/basebackup.c:1598 backup/walsummary.c:220 libpq/hba.c:624 postmaster/syslogger.c:1511 replication/logical/origin.c:735 replication/logical/reorderbuffer.c:3737 replication/logical/reorderbuffer.c:4291 replication/logical/reorderbuffer.c:5064 replication/logical/snapbuild.c:1757 replication/logical/snapbuild.c:1867 -#: replication/slot.c:2208 replication/walsender.c:628 replication/walsender.c:3051 storage/file/copydir.c:151 storage/file/fd.c:803 storage/file/fd.c:3510 storage/file/fd.c:3740 storage/file/fd.c:3830 storage/smgr/md.c:661 utils/cache/relmapper.c:818 utils/cache/relmapper.c:935 utils/error/elog.c:2091 utils/init/miscinit.c:1526 utils/init/miscinit.c:1660 utils/init/miscinit.c:1737 utils/misc/guc.c:4727 utils/misc/guc.c:4777 +#: ../common/controldata_utils.c:225 ../common/controldata_utils.c:230 ../common/file_utils.c:70 ../common/file_utils.c:347 ../common/file_utils.c:406 ../common/file_utils.c:480 access/heap/rewriteheap.c:1229 access/transam/timeline.c:111 access/transam/timeline.c:251 access/transam/timeline.c:348 access/transam/twophase.c:1309 access/transam/xlog.c:3230 access/transam/xlog.c:3393 access/transam/xlog.c:3432 access/transam/xlog.c:3625 access/transam/xlog.c:4331 +#: access/transam/xlogrecovery.c:4264 access/transam/xlogrecovery.c:4367 access/transam/xlogutils.c:836 backup/basebackup.c:547 backup/basebackup.c:1598 backup/walsummary.c:220 libpq/hba.c:624 postmaster/syslogger.c:1511 replication/logical/origin.c:735 replication/logical/reorderbuffer.c:3766 replication/logical/reorderbuffer.c:4320 replication/logical/reorderbuffer.c:5093 replication/logical/snapbuild.c:1774 replication/logical/snapbuild.c:1884 +#: replication/slot.c:2208 replication/walsender.c:628 replication/walsender.c:3051 storage/file/copydir.c:151 storage/file/fd.c:803 storage/file/fd.c:3510 storage/file/fd.c:3740 storage/file/fd.c:3830 storage/smgr/md.c:661 utils/cache/relmapper.c:818 utils/cache/relmapper.c:935 utils/error/elog.c:2124 utils/init/miscinit.c:1580 utils/init/miscinit.c:1714 utils/init/miscinit.c:1791 utils/misc/guc.c:4777 utils/misc/guc.c:4827 #, c-format msgid "could not open file \"%s\": %m" msgstr "ფაილის (%s) გახსნის შეცდომა: %m" -#: ../common/controldata_utils.c:246 ../common/controldata_utils.c:249 access/transam/twophase.c:1766 access/transam/twophase.c:1775 access/transam/xlog.c:9210 access/transam/xlogfuncs.c:698 backup/basebackup_server.c:173 backup/basebackup_server.c:266 backup/walsummary.c:304 postmaster/postmaster.c:4125 postmaster/syslogger.c:1522 postmaster/syslogger.c:1535 postmaster/syslogger.c:1548 utils/cache/relmapper.c:947 +#: ../common/controldata_utils.c:246 ../common/controldata_utils.c:249 access/transam/twophase.c:1757 access/transam/twophase.c:1766 access/transam/xlog.c:9280 access/transam/xlogfuncs.c:698 backup/basebackup_server.c:173 backup/basebackup_server.c:266 backup/walsummary.c:304 postmaster/postmaster.c:4127 postmaster/syslogger.c:1522 postmaster/syslogger.c:1535 postmaster/syslogger.c:1548 utils/cache/relmapper.c:947 #, c-format msgid "could not write file \"%s\": %m" msgstr "ფაილში (%s) ჩაწერის შეცდომა: %m" -#: ../common/controldata_utils.c:263 ../common/controldata_utils.c:268 ../common/file_utils.c:418 ../common/file_utils.c:488 access/heap/rewriteheap.c:925 access/heap/rewriteheap.c:1135 access/heap/rewriteheap.c:1240 access/transam/timeline.c:432 access/transam/timeline.c:506 access/transam/twophase.c:1787 access/transam/xlog.c:3310 access/transam/xlog.c:3505 access/transam/xlog.c:4298 access/transam/xlog.c:8585 access/transam/xlog.c:8630 -#: backup/basebackup_server.c:207 commands/dbcommands.c:514 replication/logical/snapbuild.c:1795 replication/slot.c:2112 replication/slot.c:2218 storage/file/fd.c:820 storage/file/fd.c:3851 storage/smgr/md.c:1329 storage/smgr/md.c:1374 storage/sync/sync.c:446 utils/misc/guc.c:4480 +#: ../common/controldata_utils.c:263 ../common/controldata_utils.c:268 ../common/file_utils.c:418 ../common/file_utils.c:488 access/heap/rewriteheap.c:925 access/heap/rewriteheap.c:1135 access/heap/rewriteheap.c:1240 access/transam/timeline.c:432 access/transam/timeline.c:506 access/transam/twophase.c:1778 access/transam/xlog.c:3316 access/transam/xlog.c:3511 access/transam/xlog.c:4304 access/transam/xlog.c:8655 access/transam/xlog.c:8700 +#: backup/basebackup_server.c:207 commands/dbcommands.c:514 replication/logical/snapbuild.c:1812 replication/slot.c:2112 replication/slot.c:2218 storage/file/fd.c:820 storage/file/fd.c:3851 storage/smgr/md.c:1331 storage/smgr/md.c:1376 storage/sync/sync.c:446 utils/misc/guc.c:4530 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "ფაილის (%s) fsync-ის შეცდომა: %m" -#: ../common/cryptohash.c:261 ../common/cryptohash_openssl.c:158 ../common/cryptohash_openssl.c:356 ../common/exec.c:562 ../common/exec.c:607 ../common/exec.c:699 ../common/hmac.c:309 ../common/hmac.c:325 ../common/hmac_openssl.c:160 ../common/hmac_openssl.c:357 ../common/md5_common.c:156 ../common/parse_manifest.c:157 ../common/parse_manifest.c:853 ../common/psprintf.c:143 ../common/scram-common.c:269 ../common/stringinfo.c:314 ../port/path.c:751 ../port/path.c:788 -#: ../port/path.c:805 access/transam/twophase.c:1434 access/transam/xlogrecovery.c:564 lib/dshash.c:253 libpq/auth.c:1352 libpq/auth.c:1396 libpq/auth.c:1953 libpq/be-secure-gssapi.c:524 postmaster/bgworker.c:355 postmaster/bgworker.c:945 postmaster/postmaster.c:3559 postmaster/postmaster.c:4019 postmaster/postmaster.c:4381 postmaster/walsummarizer.c:820 replication/libpqwalreceiver/libpqwalreceiver.c:387 replication/logical/logical.c:209 replication/walsender.c:835 -#: storage/buffer/localbuf.c:606 storage/file/fd.c:912 storage/file/fd.c:1443 storage/file/fd.c:1604 storage/file/fd.c:2531 storage/ipc/procarray.c:1453 storage/ipc/procarray.c:2207 storage/ipc/procarray.c:2214 storage/ipc/procarray.c:2719 storage/ipc/procarray.c:3423 utils/adt/formatting.c:1725 utils/adt/formatting.c:1873 utils/adt/formatting.c:2075 utils/adt/pg_locale.c:509 utils/adt/pg_locale.c:673 utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:516 -#: utils/hash/dynahash.c:616 utils/hash/dynahash.c:1099 utils/mb/mbutils.c:401 utils/mb/mbutils.c:429 utils/mb/mbutils.c:814 utils/mb/mbutils.c:841 utils/misc/guc.c:649 utils/misc/guc.c:674 utils/misc/guc.c:1062 utils/misc/guc.c:4458 utils/misc/tzparser.c:477 utils/mmgr/aset.c:451 utils/mmgr/bump.c:183 utils/mmgr/dsa.c:707 utils/mmgr/dsa.c:729 utils/mmgr/dsa.c:810 utils/mmgr/generation.c:215 utils/mmgr/mcxt.c:1154 utils/mmgr/slab.c:370 +#: ../common/cryptohash.c:261 ../common/cryptohash_openssl.c:158 ../common/cryptohash_openssl.c:356 ../common/exec.c:562 ../common/exec.c:607 ../common/exec.c:699 ../common/hmac.c:309 ../common/hmac.c:325 ../common/hmac_openssl.c:160 ../common/hmac_openssl.c:357 ../common/md5_common.c:156 ../common/parse_manifest.c:157 ../common/parse_manifest.c:852 ../common/psprintf.c:143 ../common/scram-common.c:268 ../common/stringinfo.c:314 ../port/path.c:828 ../port/path.c:865 +#: ../port/path.c:882 access/transam/twophase.c:1418 access/transam/xlogrecovery.c:564 lib/dshash.c:253 libpq/auth.c:1352 libpq/auth.c:1396 libpq/auth.c:1953 libpq/be-secure-gssapi.c:524 postmaster/bgworker.c:355 postmaster/bgworker.c:945 postmaster/postmaster.c:3560 postmaster/postmaster.c:4021 postmaster/postmaster.c:4383 postmaster/walsummarizer.c:935 replication/libpqwalreceiver/libpqwalreceiver.c:387 replication/logical/logical.c:210 replication/walsender.c:835 +#: storage/buffer/localbuf.c:606 storage/file/fd.c:912 storage/file/fd.c:1443 storage/file/fd.c:1604 storage/file/fd.c:2531 storage/ipc/procarray.c:1465 storage/ipc/procarray.c:2219 storage/ipc/procarray.c:2226 storage/ipc/procarray.c:2731 storage/ipc/procarray.c:3435 utils/adt/formatting.c:1725 utils/adt/formatting.c:1873 utils/adt/formatting.c:2075 utils/adt/pg_locale.c:532 utils/adt/pg_locale.c:696 utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:516 +#: utils/hash/dynahash.c:616 utils/hash/dynahash.c:1099 utils/mb/mbutils.c:401 utils/mb/mbutils.c:429 utils/mb/mbutils.c:814 utils/mb/mbutils.c:841 utils/misc/guc.c:649 utils/misc/guc.c:674 utils/misc/guc.c:1062 utils/misc/guc.c:4508 utils/misc/tzparser.c:477 utils/mmgr/aset.c:451 utils/mmgr/bump.c:183 utils/mmgr/dsa.c:707 utils/mmgr/dsa.c:729 utils/mmgr/dsa.c:810 utils/mmgr/generation.c:215 utils/mmgr/mcxt.c:1154 utils/mmgr/slab.c:370 #, c-format msgid "out of memory" msgstr "არასაკმარისი მეხსიერება" @@ -173,7 +173,7 @@ msgid "could not resolve path \"%s\" to absolute form: %m" msgstr "ბილიკის (\"%s\") აბსოლუტურ ფორმაში ამოხსნის შეცდომა: %m" -#: ../common/exec.c:382 commands/collationcmds.c:876 commands/copyfrom.c:1721 commands/copyto.c:649 libpq/be-secure-common.c:59 +#: ../common/exec.c:382 commands/collationcmds.c:876 commands/copyfrom.c:1723 commands/copyto.c:654 libpq/be-secure-common.c:59 #, c-format msgid "could not execute command \"%s\": %m" msgstr "ბრძანების (\"%s\") შესრულების შეცდომა: %m" @@ -188,12 +188,12 @@ msgid "no data was returned by command \"%s\"" msgstr "ბრძანებამ \"%s\" მონაცემები არ დააბრუნა" -#: ../common/exec.c:424 libpq/pqcomm.c:192 storage/ipc/latch.c:1169 storage/ipc/latch.c:1349 storage/ipc/latch.c:1582 storage/ipc/latch.c:1744 storage/ipc/latch.c:1870 +#: ../common/exec.c:424 libpq/pqcomm.c:192 storage/ipc/latch.c:1169 storage/ipc/latch.c:1349 storage/ipc/latch.c:1589 storage/ipc/latch.c:1751 storage/ipc/latch.c:1877 #, c-format 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:161 ../common/psprintf.c:145 ../port/path.c:753 ../port/path.c:790 ../port/path.c:807 utils/misc/ps_status.c:193 utils/misc/ps_status.c:201 utils/misc/ps_status.c:228 utils/misc/ps_status.c:236 +#: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 ../common/fe_memutils.c:98 ../common/fe_memutils.c:161 ../common/psprintf.c:145 ../port/path.c:830 ../port/path.c:867 ../port/path.c:884 utils/misc/ps_status.c:193 utils/misc/ps_status.c:201 utils/misc/ps_status.c:228 utils/misc/ps_status.c:236 #, c-format msgid "out of memory\n" msgstr "არასაკმარისი მეხსიერება\n" @@ -208,8 +208,8 @@ msgid "could not synchronize file system for file \"%s\": %m" msgstr "შეუძლებელია ფაილური სისტემის სინქრონიზაცია ფაილისთვის \"%s\": %m" -#: ../common/file_utils.c:120 ../common/file_utils.c:566 ../common/file_utils.c:570 access/transam/twophase.c:1337 access/transam/xlogarchive.c:111 access/transam/xlogarchive.c:235 backup/basebackup.c:355 backup/basebackup.c:553 backup/basebackup.c:624 backup/walsummary.c:247 backup/walsummary.c:254 commands/copyfrom.c:1747 commands/copyto.c:695 commands/extension.c:3527 commands/tablespace.c:804 commands/tablespace.c:893 postmaster/pgarch.c:680 -#: replication/logical/snapbuild.c:1653 replication/logical/snapbuild.c:2156 storage/file/fd.c:1968 storage/file/fd.c:2054 storage/file/fd.c:3564 utils/adt/dbsize.c:105 utils/adt/dbsize.c:257 utils/adt/dbsize.c:337 utils/adt/genfile.c:437 utils/adt/genfile.c:612 utils/adt/misc.c:340 +#: ../common/file_utils.c:120 ../common/file_utils.c:566 ../common/file_utils.c:570 access/transam/twophase.c:1321 access/transam/xlogarchive.c:111 access/transam/xlogarchive.c:235 backup/basebackup.c:355 backup/basebackup.c:553 backup/basebackup.c:624 backup/walsummary.c:247 backup/walsummary.c:254 commands/copyfrom.c:1749 commands/copyto.c:700 commands/extension.c:3527 commands/tablespace.c:804 commands/tablespace.c:893 postmaster/pgarch.c:680 +#: replication/logical/snapbuild.c:1670 replication/logical/snapbuild.c:2173 storage/file/fd.c:1968 storage/file/fd.c:2054 storage/file/fd.c:3564 utils/adt/dbsize.c:105 utils/adt/dbsize.c:257 utils/adt/dbsize.c:337 utils/adt/genfile.c:437 utils/adt/genfile.c:612 utils/adt/misc.c:340 #, c-format msgid "could not stat file \"%s\": %m" msgstr "ფაილი \"%s\" არ არსებობს: %m" @@ -219,7 +219,7 @@ msgid "this build does not support sync method \"%s\"" msgstr "ამ აგებას სინქრონიზაციის მეთოდის \"%s\" მხარდაჭერა არ გააჩნია" -#: ../common/file_utils.c:151 ../common/file_utils.c:281 ../common/pgfnames.c:48 ../common/rmtree.c:63 commands/tablespace.c:728 commands/tablespace.c:738 postmaster/postmaster.c:1468 storage/file/fd.c:2933 storage/file/reinit.c:126 utils/adt/misc.c:256 utils/misc/tzparser.c:339 +#: ../common/file_utils.c:151 ../common/file_utils.c:281 ../common/pgfnames.c:48 ../common/rmtree.c:63 commands/tablespace.c:728 commands/tablespace.c:738 postmaster/postmaster.c:1470 storage/file/fd.c:2933 storage/file/reinit.c:126 utils/adt/misc.c:256 utils/misc/tzparser.c:339 #, c-format msgid "could not open directory \"%s\": %m" msgstr "საქაღალდის (%s) გახსნის შეცდომა: %m" @@ -229,7 +229,7 @@ msgid "could not read directory \"%s\": %m" msgstr "საქაღალდის (%s) წაკითხვის შეცდომა: %m" -#: ../common/file_utils.c:498 access/transam/xlogarchive.c:389 postmaster/pgarch.c:834 postmaster/syslogger.c:1559 replication/logical/snapbuild.c:1814 replication/slot.c:936 replication/slot.c:1998 replication/slot.c:2140 storage/file/fd.c:838 utils/time/snapmgr.c:1255 +#: ../common/file_utils.c:498 access/transam/xlogarchive.c:389 postmaster/pgarch.c:834 postmaster/syslogger.c:1559 replication/logical/snapbuild.c:1831 replication/slot.c:936 replication/slot.c:1998 replication/slot.c:2140 storage/file/fd.c:838 utils/time/snapmgr.c:1255 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "გადარქმევის შეცდომა %s - %s: %m" @@ -357,164 +357,164 @@ msgid "hint: " msgstr "მინიშნება: " -#: ../common/parse_manifest.c:159 ../common/parse_manifest.c:855 +#: ../common/parse_manifest.c:159 ../common/parse_manifest.c:854 #, c-format msgid "could not initialize checksum of manifest" msgstr "მანიფესტის საკონტროლო ჯამის ინიციალიზაციის შეცდომა" -#: ../common/parse_manifest.c:204 ../common/parse_manifest.c:261 +#: ../common/parse_manifest.c:203 ../common/parse_manifest.c:260 msgid "manifest ended unexpectedly" msgstr "მანიფესტი მოულოდნელად დასრულდა" -#: ../common/parse_manifest.c:210 ../common/parse_manifest.c:862 +#: ../common/parse_manifest.c:209 ../common/parse_manifest.c:861 #, c-format msgid "could not update checksum of manifest" msgstr "მანიფესტის საკონტროლო ჯამის განახლების შეცდომა" -#: ../common/parse_manifest.c:302 +#: ../common/parse_manifest.c:301 msgid "unexpected object start" msgstr "ობიექტის მოულოდნელი დასაწყისი" -#: ../common/parse_manifest.c:337 +#: ../common/parse_manifest.c:336 msgid "unexpected object end" msgstr "ობიექტის მოულოდნელი დასასრული" -#: ../common/parse_manifest.c:366 +#: ../common/parse_manifest.c:365 msgid "unexpected array start" msgstr "მასივის მოულოდნელი დასაწყისი" -#: ../common/parse_manifest.c:391 +#: ../common/parse_manifest.c:390 msgid "unexpected array end" msgstr "მასივის მოულოდნელი დასასრული" -#: ../common/parse_manifest.c:418 +#: ../common/parse_manifest.c:417 msgid "expected version indicator" msgstr "მოსალოდნელი ვერსიის მაჩვენებელი" -#: ../common/parse_manifest.c:454 +#: ../common/parse_manifest.c:453 msgid "unrecognized top-level field" msgstr "უცნობი ველი ზედა დონეზე" -#: ../common/parse_manifest.c:473 +#: ../common/parse_manifest.c:472 msgid "unexpected file field" msgstr "მოულოდნელი ველი ფაილისთვის" -#: ../common/parse_manifest.c:487 +#: ../common/parse_manifest.c:486 msgid "unexpected WAL range field" msgstr "მოულოდნელი ველი WAL-ის დიაპაზონისთვის" -#: ../common/parse_manifest.c:493 +#: ../common/parse_manifest.c:492 msgid "unexpected object field" msgstr "ობიექტის მოულოდნელი ველი" -#: ../common/parse_manifest.c:583 +#: ../common/parse_manifest.c:582 msgid "unexpected scalar" msgstr "მოულოდნელი სკალარი" -#: ../common/parse_manifest.c:609 +#: ../common/parse_manifest.c:608 msgid "manifest version not an integer" msgstr "მანიფესტის ვერსია მთელი რიცხვი არაა" -#: ../common/parse_manifest.c:613 +#: ../common/parse_manifest.c:612 msgid "unexpected manifest version" msgstr "მანიფესტის მოულოდნელი ვერსია" -#: ../common/parse_manifest.c:637 -msgid "manifest system identifier not an integer" +#: ../common/parse_manifest.c:636 +msgid "system identifier in manifest not an integer" msgstr "მანიფესტის სისტემის იდენფიტიკატორი მთელი რიცხვი არაა" -#: ../common/parse_manifest.c:662 +#: ../common/parse_manifest.c:661 msgid "missing path name" msgstr "აკლია ბილიკის სახელი" -#: ../common/parse_manifest.c:665 +#: ../common/parse_manifest.c:664 msgid "both path name and encoded path name" msgstr "ორივე, ბილიკის სახელი და ბილიკის კოდირებული სახელი" -#: ../common/parse_manifest.c:667 +#: ../common/parse_manifest.c:666 msgid "missing size" msgstr "ზომა აკლია" -#: ../common/parse_manifest.c:670 +#: ../common/parse_manifest.c:669 msgid "checksum without algorithm" msgstr "საკონტროლო ჯამი ალგორითმის გარეშე" -#: ../common/parse_manifest.c:684 +#: ../common/parse_manifest.c:683 msgid "could not decode file name" msgstr "ფაილის სახელის გაშიფვრის შეცდომა" -#: ../common/parse_manifest.c:694 +#: ../common/parse_manifest.c:693 msgid "file size is not an integer" msgstr "ფაილის ზომა მთელი რიცხვი არაა" -#: ../common/parse_manifest.c:700 backup/basebackup.c:870 +#: ../common/parse_manifest.c:699 backup/basebackup.c:870 #, c-format msgid "unrecognized checksum algorithm: \"%s\"" msgstr "საკონტროლო ჯამის უცნობი ალგორითმი: \"%s\"" -#: ../common/parse_manifest.c:719 +#: ../common/parse_manifest.c:718 #, c-format msgid "invalid checksum for file \"%s\": \"%s\"" msgstr "არასწორი საკონტროლო ჯამი ფაილისთვის \"%s\": \"%s\"" -#: ../common/parse_manifest.c:762 +#: ../common/parse_manifest.c:761 msgid "missing timeline" msgstr "აკლია დროის ხაზი" -#: ../common/parse_manifest.c:764 +#: ../common/parse_manifest.c:763 msgid "missing start LSN" msgstr "აკლია საწყისი LSN" -#: ../common/parse_manifest.c:766 +#: ../common/parse_manifest.c:765 msgid "missing end LSN" msgstr "აკლია დასასრულის LSN" -#: ../common/parse_manifest.c:772 +#: ../common/parse_manifest.c:771 msgid "timeline is not an integer" msgstr "დროის ხაზი მთელი რიცხვი არაა" -#: ../common/parse_manifest.c:775 +#: ../common/parse_manifest.c:774 msgid "could not parse start LSN" msgstr "საწყისი LSN-ის დამუშავების შეცდომა" -#: ../common/parse_manifest.c:778 +#: ../common/parse_manifest.c:777 msgid "could not parse end LSN" msgstr "საბოლოო LSN-ის დამუშავების შეცდომა" -#: ../common/parse_manifest.c:843 +#: ../common/parse_manifest.c:842 msgid "expected at least 2 lines" msgstr "ველოდებოდი სულ ცოტა 2 ხაზს" -#: ../common/parse_manifest.c:846 +#: ../common/parse_manifest.c:845 msgid "last line not newline-terminated" msgstr "ბოლო ხაზი ხაზის გადატანით არ სრულდება" -#: ../common/parse_manifest.c:865 +#: ../common/parse_manifest.c:864 #, c-format msgid "could not finalize checksum of manifest" msgstr "მანიფესტის საკონტროლო ჯამის დასრულების შეცდომა" -#: ../common/parse_manifest.c:869 +#: ../common/parse_manifest.c:868 #, c-format msgid "manifest has no checksum" msgstr "მანიფესტის საკონტროლო ჯამი არ გააჩნია" -#: ../common/parse_manifest.c:873 +#: ../common/parse_manifest.c:872 #, c-format msgid "invalid manifest checksum: \"%s\"" msgstr "მანიფესტის საკონტროლო ჯამის არასწორია: %s" -#: ../common/parse_manifest.c:877 +#: ../common/parse_manifest.c:876 #, c-format msgid "manifest checksum mismatch" msgstr "მანიფესტის საკონტროლო ჯამი არ ემთხვევა" -#: ../common/parse_manifest.c:892 +#: ../common/parse_manifest.c:891 #, c-format msgid "could not parse backup manifest: %s" msgstr "მარქაფის მანიფესტის დამუშავების შეცრომა: %s" -#: ../common/percentrepl.c:79 ../common/percentrepl.c:85 ../common/percentrepl.c:118 ../common/percentrepl.c:124 tcop/backend_startup.c:741 utils/misc/guc.c:3167 utils/misc/guc.c:3208 utils/misc/guc.c:3283 utils/misc/guc.c:4662 utils/misc/guc.c:6887 utils/misc/guc.c:6928 +#: ../common/percentrepl.c:79 ../common/percentrepl.c:85 ../common/percentrepl.c:118 ../common/percentrepl.c:124 tcop/backend_startup.c:741 utils/misc/guc.c:3167 utils/misc/guc.c:3208 utils/misc/guc.c:3283 utils/misc/guc.c:4712 utils/misc/guc.c:6931 utils/misc/guc.c:6972 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "არასწორი მნიშვნელობა პარამეტრისთვის \"%s\": \"%s\"" @@ -574,7 +574,7 @@ msgid "could not get exit code from subprocess: error code %lu" msgstr "ქვეპროცესიდან გასასვლელი კოდი ვერ მივიღე: შეცდომის კოდი %lu" -#: ../common/rmtree.c:97 access/heap/rewriteheap.c:1214 access/transam/twophase.c:1726 access/transam/xlogarchive.c:119 access/transam/xlogarchive.c:399 postmaster/postmaster.c:1048 postmaster/syslogger.c:1488 replication/logical/origin.c:591 replication/logical/reorderbuffer.c:4560 replication/logical/snapbuild.c:1695 replication/logical/snapbuild.c:2129 replication/slot.c:2192 storage/file/fd.c:878 storage/file/fd.c:3378 storage/file/fd.c:3440 +#: ../common/rmtree.c:97 access/heap/rewriteheap.c:1214 access/transam/twophase.c:1717 access/transam/xlogarchive.c:119 access/transam/xlogarchive.c:399 postmaster/postmaster.c:1048 postmaster/syslogger.c:1488 replication/logical/origin.c:591 replication/logical/reorderbuffer.c:4589 replication/logical/snapbuild.c:1712 replication/logical/snapbuild.c:2146 replication/slot.c:2192 storage/file/fd.c:878 storage/file/fd.c:3378 storage/file/fd.c:3440 #: storage/file/reinit.c:261 storage/ipc/dsm.c:343 storage/smgr/md.c:381 storage/smgr/md.c:440 storage/sync/sync.c:243 utils/time/snapmgr.c:1591 #, c-format msgid "could not remove file \"%s\": %m" @@ -585,15 +585,15 @@ msgid "could not remove directory \"%s\": %m" msgstr "საქაღალდის (\"%s\") წაშლის შეცდომა: %m" -#: ../common/scram-common.c:282 +#: ../common/scram-common.c:281 msgid "could not encode salt" msgstr "მარილის კოდირების შეცდომა" -#: ../common/scram-common.c:298 +#: ../common/scram-common.c:297 msgid "could not encode stored key" msgstr "დამახსოვრებული გასაღების კოდირების შეცდომა" -#: ../common/scram-common.c:315 +#: ../common/scram-common.c:314 msgid "could not encode server key" msgstr "სერვერის გასაღების კოდირების შეცდომა" @@ -609,9 +609,9 @@ "\n" "Cannot enlarge string buffer containing %d bytes by %d more bytes.\n" msgstr "" -"არასაკმარისი მეხსიერების\n" +"არასაკმარისი მეხსიერება\n" "\n" -"შეუძლებელია სტრიქონის ბუფერის (%d ბაიტიგ) აფართოება %d ბაიტით.\n" +"შეუძლებელია სტრიქონის ბუფერის (%d ბაიტი) გაფართოება %d ბაიტით.\n" #: ../common/username.c:43 #, c-format @@ -710,7 +710,7 @@ msgid "You might have antivirus, backup, or similar software interfering with the database system." msgstr "შეიძლება თქვენი ანტივირუსი, მარქაფი ან რამე სხვა პროგრამა ხელს უშლის მონაცემთა ბაზის სისტემის მუშაობას." -#: ../port/path.c:775 +#: ../port/path.c:852 #, c-format msgid "could not get current working directory: %m\n" msgstr "მიმდინარე სამუშაო საქაღალდის მიღების შეცდომა: %m\n" @@ -775,7 +775,7 @@ msgid "could not open parent table of index \"%s\"" msgstr "ინდექსის \"%s\" მშობელი ცხრილის გახსნის შეცდომა" -#: access/brin/brin.c:1461 access/brin/brin.c:1557 access/gin/ginfast.c:1085 parser/parse_utilcmd.c:2252 +#: access/brin/brin.c:1461 access/brin/brin.c:1557 access/gin/ginfast.c:1085 parser/parse_utilcmd.c:2277 #, c-format msgid "index \"%s\" is not valid" msgstr "ინდექსი არასწორია: \"%s\"" @@ -880,12 +880,12 @@ msgid "number of index columns (%d) exceeds limit (%d)" msgstr "ინდექსის სვეტების რაოდენობა (%d) აღემატება ლიმიტს (%d)" -#: access/common/indextuple.c:209 access/spgist/spgutils.c:959 +#: access/common/indextuple.c:209 access/spgist/spgutils.c:970 #, c-format msgid "index row requires %zu bytes, maximum size is %zu" msgstr "ინდექსის მწკრივი მოითხოვს %zu ბაიტს, მაქსიმალური ზომა %zu" -#: access/common/printtup.c:291 commands/explain.c:5375 tcop/fastpath.c:107 tcop/fastpath.c:454 tcop/postgres.c:1940 +#: access/common/printtup.c:292 commands/explain.c:5376 tcop/fastpath.c:107 tcop/fastpath.c:454 tcop/postgres.c:1956 #, c-format msgid "unsupported format code: %d" msgstr "ფორმატის მხარდაუჭერელი კოდი: %d" @@ -913,7 +913,7 @@ msgid "unrecognized parameter namespace \"%s\"" msgstr "პარამეტრების სახელების უცნობი სივრცე: \"%s\"" -#: access/common/reloptions.c:1300 commands/variable.c:1191 +#: access/common/reloptions.c:1300 commands/variable.c:1214 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "ცხრილები, აღწერილი WITH OIDS-ით, მხარდაუჭერელია" @@ -1023,7 +1023,7 @@ msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "გასასწორებლად გაუშვით REINDEX INDEX \"%s\"." -#: access/gin/ginutil.c:147 executor/execExpr.c:2191 utils/adt/arrayfuncs.c:4009 utils/adt/arrayfuncs.c:6705 utils/adt/rowtypes.c:974 +#: access/gin/ginutil.c:147 executor/execExpr.c:2200 utils/adt/arrayfuncs.c:4016 utils/adt/arrayfuncs.c:6712 utils/adt/rowtypes.c:974 #, c-format msgid "could not identify a comparison function for type %s" msgstr "ტიპისთვის \"%s\" შედარების ფუნქცია ვერ ვიპოვე" @@ -1093,12 +1093,12 @@ msgid "operator family \"%s\" of access method %s contains incorrect ORDER BY opfamily specification for operator %s" msgstr "ოპერატორის ოჯახი \"%s\" (წვდომის მეთოდიდან %s) ოპერატორისთვის %s არასწორ ORDER BY-ის სპეფიციკაციას შეიცავს" -#: access/hash/hashfunc.c:277 access/hash/hashfunc.c:331 utils/adt/varchar.c:1008 utils/adt/varchar.c:1063 +#: access/hash/hashfunc.c:277 access/hash/hashfunc.c:333 utils/adt/varchar.c:1008 utils/adt/varchar.c:1065 #, c-format msgid "could not determine which collation to use for string hashing" msgstr "სტრიქონების ჰეშირებისთვის საჭირო კოლაციის გარკვევა შეუძლებელია" -#: access/hash/hashfunc.c:278 access/hash/hashfunc.c:332 catalog/heap.c:672 catalog/heap.c:678 commands/createas.c:201 commands/createas.c:510 commands/indexcmds.c:2045 commands/tablecmds.c:18071 commands/view.c:81 regex/regc_pg_locale.c:245 utils/adt/formatting.c:1653 utils/adt/formatting.c:1801 utils/adt/formatting.c:1991 utils/adt/like.c:189 utils/adt/like_support.c:1024 utils/adt/varchar.c:738 utils/adt/varchar.c:1009 utils/adt/varchar.c:1064 +#: access/hash/hashfunc.c:278 access/hash/hashfunc.c:334 catalog/heap.c:672 catalog/heap.c:678 commands/createas.c:201 commands/createas.c:508 commands/indexcmds.c:2021 commands/tablecmds.c:18178 commands/view.c:81 regex/regc_pg_locale.c:245 utils/adt/formatting.c:1653 utils/adt/formatting.c:1801 utils/adt/formatting.c:1991 utils/adt/like.c:189 utils/adt/like_support.c:1024 utils/adt/varchar.c:738 utils/adt/varchar.c:1009 utils/adt/varchar.c:1066 #: utils/adt/varlena.c:1521 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." @@ -1109,7 +1109,7 @@ msgid "index row size %zu exceeds hash maximum %zu" msgstr "ინდექსის მწკრივის ზომა %zu აჭარბებს ჰეშის მაქსიმუმს %zu" -#: access/hash/hashinsert.c:86 access/spgist/spgdoinsert.c:2005 access/spgist/spgdoinsert.c:2282 access/spgist/spgutils.c:1020 +#: access/hash/hashinsert.c:86 access/spgist/spgdoinsert.c:2005 access/spgist/spgdoinsert.c:2282 access/spgist/spgutils.c:1031 #, c-format msgid "Values larger than a buffer page cannot be indexed." msgstr "ბაფერის გვერდზე დიდი მნიშვნელობების დაინდექსება შეუძლებელია." @@ -1149,36 +1149,41 @@ msgid "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "ოპერატორის ოჯახს \"%s\" წვდომის მეთოდში %s ჯვარედინი ტიპის ოპერატორები აკლია" -#: access/heap/heapam.c:2194 +#: access/heap/heapam.c:2206 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "პარალელურ დამხმარე პროცესში კორტეჟებს ვერ ჩასვამთ" -#: access/heap/heapam.c:2713 +#: access/heap/heapam.c:2725 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "პარალელური ოპერაციის დროს კორტეჟის წაშლა შეუძლებელია" -#: access/heap/heapam.c:2760 +#: access/heap/heapam.c:2772 #, c-format msgid "attempted to delete invisible tuple" msgstr "უხილავი კორტეჟის წაშლის მცდელობა" -#: access/heap/heapam.c:3208 access/heap/heapam.c:6081 +#: access/heap/heapam.c:3220 access/heap/heapam.c:6501 access/index/genam.c:818 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "პარალელური ოპერაციის დროს კორტეჟის განახლება შეუძლებელია" -#: access/heap/heapam.c:3336 +#: access/heap/heapam.c:3397 #, c-format msgid "attempted to update invisible tuple" msgstr "უხილავი კორტეჟის განახლების მცდელობა" -#: access/heap/heapam.c:4725 access/heap/heapam.c:4763 access/heap/heapam.c:5028 access/heap/heapam_handler.c:468 +#: access/heap/heapam.c:4908 access/heap/heapam.c:4946 access/heap/heapam.c:5211 access/heap/heapam_handler.c:468 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "ურთიერთობაში \"%s\" მწკრივის დაბლოკვის შეცდომა" +#: access/heap/heapam.c:6314 commands/trigger.c:3340 executor/nodeModifyTable.c:2376 executor/nodeModifyTable.c:2467 +#, c-format +msgid "tuple to be updated was already modified by an operation triggered by the current command" +msgstr "" + #: access/heap/heapam_handler.c:413 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update" @@ -1194,7 +1199,7 @@ msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "ფაილში \"%s\" ჩაწერა შეუძლებელია. ჩაწერილია %d %d-დან: %m" -#: access/heap/rewriteheap.c:977 access/heap/rewriteheap.c:1094 access/transam/timeline.c:329 access/transam/timeline.c:481 access/transam/xlog.c:3249 access/transam/xlog.c:3440 access/transam/xlog.c:4277 access/transam/xlog.c:9199 access/transam/xlogfuncs.c:692 backup/basebackup_server.c:149 backup/basebackup_server.c:242 commands/dbcommands.c:494 postmaster/launch_backend.c:328 postmaster/postmaster.c:4112 postmaster/walsummarizer.c:1067 +#: access/heap/rewriteheap.c:977 access/heap/rewriteheap.c:1094 access/transam/timeline.c:329 access/transam/timeline.c:481 access/transam/xlog.c:3255 access/transam/xlog.c:3446 access/transam/xlog.c:4283 access/transam/xlog.c:9269 access/transam/xlogfuncs.c:692 backup/basebackup_server.c:149 backup/basebackup_server.c:242 commands/dbcommands.c:494 postmaster/launch_backend.c:340 postmaster/postmaster.c:4114 postmaster/walsummarizer.c:1212 #: replication/logical/origin.c:603 replication/slot.c:2059 storage/file/copydir.c:157 storage/smgr/md.c:230 utils/time/snapmgr.c:1234 #, c-format msgid "could not create file \"%s\": %m" @@ -1205,8 +1210,8 @@ msgid "could not truncate file \"%s\" to %u: %m" msgstr "ფაილის (%s) %u-მდე მოკვეთის შეცდომა: %m" -#: access/heap/rewriteheap.c:1122 access/transam/timeline.c:384 access/transam/timeline.c:424 access/transam/timeline.c:498 access/transam/xlog.c:3299 access/transam/xlog.c:3496 access/transam/xlog.c:4289 commands/dbcommands.c:506 postmaster/launch_backend.c:339 postmaster/launch_backend.c:351 replication/logical/origin.c:615 replication/logical/origin.c:657 replication/logical/origin.c:676 replication/logical/snapbuild.c:1771 replication/slot.c:2094 -#: storage/file/buffile.c:545 storage/file/copydir.c:197 utils/init/miscinit.c:1601 utils/init/miscinit.c:1612 utils/init/miscinit.c:1620 utils/misc/guc.c:4441 utils/misc/guc.c:4472 utils/misc/guc.c:5625 utils/misc/guc.c:5643 utils/time/snapmgr.c:1239 utils/time/snapmgr.c:1246 +#: access/heap/rewriteheap.c:1122 access/transam/timeline.c:384 access/transam/timeline.c:424 access/transam/timeline.c:498 access/transam/xlog.c:3305 access/transam/xlog.c:3502 access/transam/xlog.c:4295 commands/dbcommands.c:506 postmaster/launch_backend.c:351 postmaster/launch_backend.c:363 replication/logical/origin.c:615 replication/logical/origin.c:657 replication/logical/origin.c:676 replication/logical/snapbuild.c:1788 replication/slot.c:2094 +#: storage/file/buffile.c:545 storage/file/copydir.c:197 utils/init/miscinit.c:1655 utils/init/miscinit.c:1666 utils/init/miscinit.c:1674 utils/misc/guc.c:4491 utils/misc/guc.c:4522 utils/misc/guc.c:5675 utils/misc/guc.c:5693 utils/time/snapmgr.c:1239 utils/time/snapmgr.c:1246 #, c-format msgid "could not write to file \"%s\": %m" msgstr "ფაილში (%s) ჩაწერის შეცდომა: %m" @@ -1312,17 +1317,17 @@ msgid "index \"%s\": pages: %u in total, %u newly deleted, %u currently deleted, %u reusable\n" msgstr "ინდექსი \"%s\": გვერდები: %u ჯამში %u ახლად წაშლილი, %u ამჟამად წაშლილი, %u მრავალჯერადი\n" -#: access/heap/vacuumlazy.c:738 commands/analyze.c:789 +#: access/heap/vacuumlazy.c:738 commands/analyze.c:794 #, c-format msgid "I/O timings: read: %.3f ms, write: %.3f ms\n" msgstr "I/O დროები: კითხვა: %.3f მწმ, ჩაწერა: %.3f მწმ\n" -#: access/heap/vacuumlazy.c:748 commands/analyze.c:792 +#: access/heap/vacuumlazy.c:748 commands/analyze.c:797 #, c-format msgid "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" msgstr "კითხვის საშ. სიჩქარე: %.3f მბ/წმ, ჩაწერის საშ. სიჩქარე: %.3f მბ/წმ\n" -#: access/heap/vacuumlazy.c:751 commands/analyze.c:794 +#: access/heap/vacuumlazy.c:751 commands/analyze.c:799 #, c-format msgid "buffer usage: %lld hits, %lld misses, %lld dirtied\n" msgstr "ბაფერის გამოყენება: %lld მოხვედრა, %lld აცდენა, %lld ტურტლიანი\n" @@ -1332,27 +1337,27 @@ msgid "WAL usage: %lld records, %lld full page images, %llu bytes\n" msgstr "WAL გამოყენება: %lld ჩანაწერი, %lld სრული გვერდის ასლი, %llu ბაიტი\n" -#: access/heap/vacuumlazy.c:760 commands/analyze.c:798 +#: access/heap/vacuumlazy.c:760 commands/analyze.c:803 #, c-format msgid "system usage: %s" msgstr "სისტემური გამოყენება: %s" -#: access/heap/vacuumlazy.c:2172 +#: access/heap/vacuumlazy.c:2170 #, c-format msgid "table \"%s\": removed %lld dead item identifiers in %u pages" msgstr "ცხრილი \"%s\": წაიშალა %lld მკვდარი ჩანაწერის იდენტიფიკატორი %u გვერდზე" -#: access/heap/vacuumlazy.c:2326 +#: access/heap/vacuumlazy.c:2324 #, c-format msgid "bypassing nonessential maintenance of table \"%s.%s.%s\" as a failsafe after %d index scans" msgstr "ცხრილის \"%s.%s.%s\" უმნიშვნელო ოპერაციის გამოტოვება დაცვის მიზნით %d ინდექსის სკანირების შემდეგ" -#: access/heap/vacuumlazy.c:2329 +#: access/heap/vacuumlazy.c:2327 #, c-format msgid "The table's relfrozenxid or relminmxid is too far in the past." msgstr "ცხრილის relfrozenxid -ის და relminmxid -ის მნიშვნელობები ძალიან უკანაა წარშულში." -#: access/heap/vacuumlazy.c:2330 +#: access/heap/vacuumlazy.c:2328 #, c-format msgid "" "Consider increasing configuration parameter \"maintenance_work_mem\" or \"autovacuum_work_mem\".\n" @@ -1361,67 +1366,67 @@ "მხედველობაში იქონიეთ, რომ საჭიროა კონფიგურაციის პარამეტრის \"maintenance_work_mem\" ან \"autovacuum_work_mem\" გაზრდა.\n" "ასევე შეიძლება დაგჭირდეთ განიხილოთ მომტვერსასრუტების სხვა გზები, რომ დაეწიოთ ტრანზაქცების ID-ების გამოყოფას." -#: access/heap/vacuumlazy.c:2592 +#: access/heap/vacuumlazy.c:2590 #, c-format msgid "\"%s\": stopping truncate due to conflicting lock request" msgstr "%s: წაკვეთის შეჩერება ბლოკირების კონფლიქტური მოთხოვნის გამო" -#: access/heap/vacuumlazy.c:2662 +#: access/heap/vacuumlazy.c:2660 #, c-format msgid "table \"%s\": truncated %u to %u pages" msgstr "ცხრილი \"%s\": წაიკვეთა %u-დან %u გვერდზე" -#: access/heap/vacuumlazy.c:2724 +#: access/heap/vacuumlazy.c:2722 #, c-format msgid "table \"%s\": suspending truncate due to conflicting lock request" msgstr "ცხრილი %s: წაკვეთის შეჩერება ბლოკირების კონფლიქტური მოთხოვნის გამო" -#: access/heap/vacuumlazy.c:2843 +#: access/heap/vacuumlazy.c:2841 #, c-format msgid "disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary tables in parallel" msgstr "%s-ზე პარალელური მომტვერსასრუტების გამორთვა --- დროებითი ცხრილების პარალელური მომტვერსასრუტება შეუძლებელია" -#: access/heap/vacuumlazy.c:3113 +#: access/heap/vacuumlazy.c:3108 #, c-format msgid "while scanning block %u offset %u of relation \"%s.%s\"" msgstr "ურთიერთობის(%3$s.%4$s) წანაცვლების(%2$u) ბლოკის(%1$u) სკანირებისას" -#: access/heap/vacuumlazy.c:3116 +#: access/heap/vacuumlazy.c:3111 #, c-format msgid "while scanning block %u of relation \"%s.%s\"" msgstr "%u ბლოკის (ურთიერთობის %s.%s) სკანირებისას" -#: access/heap/vacuumlazy.c:3120 +#: access/heap/vacuumlazy.c:3115 #, c-format msgid "while scanning relation \"%s.%s\"" msgstr "ურთიერთობის სკანირებისას \"%s.%s\"" -#: access/heap/vacuumlazy.c:3128 +#: access/heap/vacuumlazy.c:3123 #, c-format msgid "while vacuuming block %u offset %u of relation \"%s.%s\"" msgstr "ბლოკის %u, წანაცვლება %u (ურთიერთობის \"%s.%s\") მომტვერსასრუტებისას" -#: access/heap/vacuumlazy.c:3131 +#: access/heap/vacuumlazy.c:3126 #, c-format msgid "while vacuuming block %u of relation \"%s.%s\"" msgstr "ბლოკის (%u) მომტვერსასრუტებისას (ურთიერთობიდან \"%s.%s\")" -#: access/heap/vacuumlazy.c:3135 +#: access/heap/vacuumlazy.c:3130 #, c-format msgid "while vacuuming relation \"%s.%s\"" msgstr "ურთერთობის დამტვერსასრუტებისას \"%s.%s\"" -#: access/heap/vacuumlazy.c:3140 commands/vacuumparallel.c:1113 +#: access/heap/vacuumlazy.c:3135 commands/vacuumparallel.c:1112 #, c-format msgid "while vacuuming index \"%s\" of relation \"%s.%s\"" msgstr "ინდექსის (%s) მომტვერსასრუტებისას (ურთიერთობიდან \"%s.%s\")" -#: access/heap/vacuumlazy.c:3145 commands/vacuumparallel.c:1119 +#: access/heap/vacuumlazy.c:3140 commands/vacuumparallel.c:1118 #, c-format msgid "while cleaning up index \"%s\" of relation \"%s.%s\"" msgstr "ინდექსის \"%s\" მოსუფთავებისას, რომელიც ეკუთვნის ურთიერთობას \"%s.%s\"" -#: access/heap/vacuumlazy.c:3151 +#: access/heap/vacuumlazy.c:3146 #, c-format msgid "while truncating relation \"%s.%s\" to %u blocks" msgstr "ურთიერთობის \"%s.%s\" %u ბლოკამდე მოკვეთისას" @@ -1436,17 +1441,17 @@ msgid "index access method \"%s\" does not have a handler" msgstr "ინდექსის წვდომის მეთოდს \"%s\" დამმუშავებელი არ აქვს" -#: access/index/genam.c:487 +#: access/index/genam.c:489 #, c-format msgid "transaction aborted during system catalog scan" msgstr "ტრანზაქცია გაუქმდა სისტემური კატალოგის სკანირებისას" -#: access/index/genam.c:655 access/index/indexam.c:82 +#: access/index/genam.c:657 access/index/indexam.c:82 #, c-format msgid "cannot access index \"%s\" while it is being reindexed" msgstr "ინდექსთან \"%s\" წვდომა მაშინ, როცა მისი რეინდექსი მიმდინარეობს, შეუძლებელია" -#: access/index/indexam.c:203 catalog/objectaddress.c:1356 commands/indexcmds.c:2873 commands/tablecmds.c:281 commands/tablecmds.c:305 commands/tablecmds.c:17766 commands/tablecmds.c:19584 +#: access/index/indexam.c:203 catalog/objectaddress.c:1356 commands/indexcmds.c:2851 commands/tablecmds.c:281 commands/tablecmds.c:305 commands/tablecmds.c:17873 commands/tablecmds.c:19762 #, c-format msgid "\"%s\" is not an index" msgstr "\"%s\" ინდექსი არაა" @@ -1471,7 +1476,7 @@ msgid "This may be because of a non-immutable index expression." msgstr "შეიძლებa ინდექსის გამოსახულების შეცვლადობის ბრალი იყოს." -#: access/nbtree/nbtpage.c:157 access/nbtree/nbtpage.c:611 parser/parse_utilcmd.c:2298 +#: access/nbtree/nbtpage.c:157 access/nbtree/nbtpage.c:611 parser/parse_utilcmd.c:2323 #, c-format msgid "index \"%s\" is not a btree" msgstr "ინდექსი \"%s\" ორობითი ხე არაა" @@ -1491,17 +1496,17 @@ msgid "This can be caused by an interrupted VACUUM in version 9.3 or older, before upgrade. Please REINDEX it." msgstr "შესაძლებელია გამოწვეული იყოს შეწყვეტილი მომტვერსასრუტების მიერ 9.3 ან უფრო ძველ ვერსიაში. განახლებამდე საჭიროა REINDEX-ის გადატარება." -#: access/nbtree/nbtutils.c:5112 +#: access/nbtree/nbtutils.c:5108 #, c-format msgid "index row size %zu exceeds btree version %u maximum %zu for index \"%s\"" msgstr "ინდექსის სტრიქონის ზომა %zu btree-ის ვერსიის (%u) მაქსიმალურ (%zu) მნიშვნელობაზე მეტია, ინდექსისთვის \"%s\"" -#: access/nbtree/nbtutils.c:5118 +#: access/nbtree/nbtutils.c:5114 #, c-format msgid "Index row references tuple (%u,%u) in relation \"%s\"." msgstr "ინდექსის მწკრივები გადაბმულია კორტეჟზე (%u, %u) ურთიერთობაში \"%s\"." -#: access/nbtree/nbtutils.c:5122 +#: access/nbtree/nbtutils.c:5118 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -1515,7 +1520,7 @@ msgid "operator family \"%s\" of access method %s is missing support function for types %s and %s" msgstr "ოპერატორის ოჯახი \"%s\" წვდომის მეთოდის %s აკლია მხარდაჭერის ფუნქცია ტიპებისთვის %s და %s" -#: access/sequence/sequence.c:75 access/table/table.c:145 optimizer/util/plancat.c:143 +#: access/sequence/sequence.c:75 access/table/table.c:145 optimizer/util/plancat.c:144 #, c-format msgid "cannot open relation \"%s\"" msgstr "ურთიერთობის (\"%s\") გახსნა შეუძლებელია" @@ -1525,7 +1530,7 @@ msgid "compress method must be defined when leaf type is different from input type" msgstr "როდესაც ფოთლის ტიპი შეყვანის ტიპისგან განსხვავდება, შეკუმშვის მეთოდის მითითება აუცილებელია" -#: access/spgist/spgutils.c:1017 +#: access/spgist/spgutils.c:1028 #, c-format msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "SP-GiST-ის შიდა კორტეჟის ზომა%zu მაქსიმუმს %zu აჭარბებს" @@ -1550,7 +1555,7 @@ msgid "\"%s\" cannot be empty." msgstr "\"%s\" ცარიელი არ შეიძლება იყოს." -#: access/table/tableamapi.c:116 access/transam/xlogrecovery.c:4858 +#: access/table/tableamapi.c:116 access/transam/xlogrecovery.c:4859 #, c-format msgid "\"%s\" is too long (maximum %d characters)." msgstr "\"%s\" ძალიან გრძელია (მაქს %d სიმბოლო)" @@ -1590,12 +1595,12 @@ msgid "Make sure the configuration parameter \"%s\" is set." msgstr "დარწმუნდით, რომ კონფიგურაციის პარამეტრი \"%s\" დაყენებულია." -#: access/transam/multixact.c:1050 +#: access/transam/multixact.c:1091 #, c-format msgid "database is not accepting commands that assign new MultiXactIds to avoid wraparound data loss in database \"%s\"" msgstr "ბაზაში (\"%s\") მონაცემების ჩაციკვლის თავიდან ასაცილებლად მონაცემთა ბაზა ბრძანებებს, რომლებიც ახალ მულტიტრანზაქციებს ანიჭებენ, არ იღებს" -#: access/transam/multixact.c:1052 access/transam/multixact.c:1059 access/transam/multixact.c:1083 access/transam/multixact.c:1092 access/transam/varsup.c:158 access/transam/varsup.c:165 +#: access/transam/multixact.c:1093 access/transam/multixact.c:1100 access/transam/multixact.c:1124 access/transam/multixact.c:1133 access/transam/varsup.c:158 access/transam/varsup.c:165 #, c-format msgid "" "Execute a database-wide VACUUM in that database.\n" @@ -1604,65 +1609,65 @@ "გაუშვით მთელი ბაზის მომტვერსასრუტება.\n" "ასევე შეიძლება დაგჭირდეთ ძველი მომზადებული ტრანზაქციების გადაცემა ან გაუქმება, ან წაშალეთ გაჭედილი რეპლიკაციის სლოტები." -#: access/transam/multixact.c:1057 +#: access/transam/multixact.c:1098 #, c-format msgid "database is not accepting commands that assign new MultiXactIds to avoid wraparound data loss in database with OID %u" msgstr "ბაზაში (OID-ით \"%u\") მონაცემების გადატანის თავიდან ასაცილებლად მონაცემთა ბაზა ბრძანებებს, რომლებიც ახალ მულტიტრანზაქციებს ანიჭებენ, არ იღებს" -#: access/transam/multixact.c:1078 access/transam/multixact.c:2433 +#: access/transam/multixact.c:1119 access/transam/multixact.c:2474 #, c-format msgid "database \"%s\" must be vacuumed before %u more MultiXactId is used" msgid_plural "database \"%s\" must be vacuumed before %u more MultiXactIds are used" msgstr[0] "კიდევ %2$u მულტიტრანზაქციის გამოსაყენებლად ბაზის (%1$s) მომტვერსასრუტებაა საჭირო" msgstr[1] "კიდევ %2$u მულტიტრანზაქციის გამოსაყენებლად ბაზის (%1$s) მომტვერსასრუტებაა საჭირო" -#: access/transam/multixact.c:1087 access/transam/multixact.c:2442 +#: access/transam/multixact.c:1128 access/transam/multixact.c:2483 #, c-format msgid "database with OID %u must be vacuumed before %u more MultiXactId is used" msgid_plural "database with OID %u must be vacuumed before %u more MultiXactIds are used" msgstr[0] "კიდევ %2$u მულტიტრანზაქციის გამოსაყენებლად OID-ი %1$u -ის მქონე ბაზა ჯერ უნდა დამტვერსასრუტდეს" msgstr[1] "კიდევ %2$u მულტიტრანზაქციის გამოსაყენებლად OID-ი %1$u -ის მქონე ბაზა ჯერ უნდა დამტვერსასრუტდეს" -#: access/transam/multixact.c:1148 +#: access/transam/multixact.c:1189 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "მულტიტრანზაქციული \"წევრების\" ლიმიტი გადაჭარბებულია" -#: access/transam/multixact.c:1149 +#: access/transam/multixact.c:1190 #, c-format msgid "This command would create a multixact with %u members, but the remaining space is only enough for %u member." msgid_plural "This command would create a multixact with %u members, but the remaining space is only enough for %u members." msgstr[0] "ბრძანება კი შექმნიდა %u-წევრიან მულტიტრანზაქციას, მაგრამ დარჩენილი ადგილი მხოლოდ %u წევრს ეყოფა." msgstr[1] "ბრძანება კი შექმნიდა %u-წევრიან მულტიტრანზაქციას, მაგრამ დარჩენილი ადგილი მხოლოდ %u წევრს ეყოფა." -#: access/transam/multixact.c:1154 +#: access/transam/multixact.c:1195 #, c-format msgid "Execute a database-wide VACUUM in database with OID %u with reduced \"vacuum_multixact_freeze_min_age\" and \"vacuum_multixact_freeze_table_age\" settings." msgstr "მთელ ბაზაზე მომტვერსასრუტების შესრულება ბაზაში OID-ით %u შემცირებული \"vacuum_multixact_freeze_min_age\" და \"vacuum_multixact_freeze_table_age\" პარამეტრებით." -#: access/transam/multixact.c:1185 +#: access/transam/multixact.c:1226 #, c-format msgid "database with OID %u must be vacuumed before %d more multixact member is used" msgid_plural "database with OID %u must be vacuumed before %d more multixact members are used" msgstr[0] "ბაზა OID-ით %u უნდა მომტვერსასრუტდეს მანამდე, სანამ კიდევ %d მულტიტრანზაქციული წევრი იქნება გამოყენებული" msgstr[1] "ბაზა OID-ით %u უნდა მომტვერსასრუტდეს მანამდე, სანამ კიდევ %d მულტიტრანზაქციული წევრი იქნება გამოყენებული" -#: access/transam/multixact.c:1190 +#: access/transam/multixact.c:1231 #, c-format msgid "Execute a database-wide VACUUM in that database with reduced \"vacuum_multixact_freeze_min_age\" and \"vacuum_multixact_freeze_table_age\" settings." msgstr "მთელ ბაზაზე მომტვერსასრუტების შესრულება მითითებულ ბაზაში შემცირებული \"vacuum_multixact_freeze_min_age\" და \"vacuum_multixact_freeze_table_age\" პარამეტრებით." -#: access/transam/multixact.c:1330 +#: access/transam/multixact.c:1371 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "MultiXactId %u აღარ არსებობს - აშკარა გადატანა" -#: access/transam/multixact.c:1336 +#: access/transam/multixact.c:1377 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "MultiXactId %u ჯერ არ არის შექმნილი - აშკარა გადატანა" -#: access/transam/multixact.c:2438 access/transam/multixact.c:2447 +#: access/transam/multixact.c:2479 access/transam/multixact.c:2488 #, c-format msgid "" "To avoid MultiXactId assignment failures, execute a database-wide VACUUM in that database.\n" @@ -1671,61 +1676,61 @@ "მულტიტრანზაქციების მინიჭებების თავიდან ასაცილებლად გაუშვით VACUUM მთელ ბაზაზე იმ მონაცემთა ბაზისთვის.\n" "შეიძლება, ასევე, დაგჭირდეთ ძველი მომზადებული ტრანზაქციების კომიტი ან დაბრუნება, ან გამოუყენებელი რეპლიკაციის სლოტების წაშლა." -#: access/transam/multixact.c:2726 +#: access/transam/multixact.c:2767 #, c-format msgid "MultiXact member wraparound protections are disabled because oldest checkpointed MultiXact %u does not exist on disk" msgstr "მულტიტრანზაქციული წევრის გადატანის დაცვის ფუნქციები გათიშულია, რადგან უძველესი საკონტროლო წერტილის მქონე მულტიტრანზაქცია %u დისკზე არ არსებობს" -#: access/transam/multixact.c:2748 +#: access/transam/multixact.c:2789 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "მულტიტრანზაქციების ჩაციკვლისგან დაცვის მექანიზმები ახლა ჩართულია" -#: access/transam/multixact.c:3138 +#: access/transam/multixact.c:3180 #, c-format msgid "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" msgstr "უძველესი მულტიტრანზაქცია %u ვერ ვიპოვე. უახლესი მულტიტრანზაქციაა %u. წაკვეთა გამოტოვებული იქნება" -#: access/transam/multixact.c:3156 +#: access/transam/multixact.c:3198 #, c-format msgid "cannot truncate up to MultiXact %u because it does not exist on disk, skipping truncation" msgstr "მულტიტრანზაქციამდე %u მოკვეთა შეუძლებელია, რადგან ის დისკზე არ არსებობს. მოკვეთა გამოტოვებული იქნება" -#: access/transam/multixact.c:3475 +#: access/transam/multixact.c:3517 #, c-format msgid "invalid MultiXactId: %u" msgstr "არასწორი MultiXactId: %u" -#: access/transam/parallel.c:731 access/transam/parallel.c:850 +#: access/transam/parallel.c:748 access/transam/parallel.c:867 #, c-format msgid "parallel worker failed to initialize" msgstr "პარალელური დამხმარე პროცესის ინიციალიზაციის შეცდომა" -#: access/transam/parallel.c:732 access/transam/parallel.c:851 +#: access/transam/parallel.c:749 access/transam/parallel.c:868 #, c-format msgid "More details may be available in the server log." msgstr "მეტი დეტალები შეიძლება სერვერის ჟურნალში იყოს ხელმისაწვდომი." -#: access/transam/parallel.c:912 +#: access/transam/parallel.c:929 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "postmaster-ი დასრულდა პარალელური ტრანზაქციისას" -#: access/transam/parallel.c:1099 +#: access/transam/parallel.c:1116 #, c-format msgid "lost connection to parallel worker" msgstr "პარალელური დამხმარე პროცესთან კავშირი დაკარგულია" -#: access/transam/parallel.c:1155 access/transam/parallel.c:1157 +#: access/transam/parallel.c:1172 access/transam/parallel.c:1174 msgid "parallel worker" msgstr "პარალელური დამხმარე პროცესი" -#: access/transam/parallel.c:1327 replication/logical/applyparallelworker.c:890 +#: access/transam/parallel.c:1344 replication/logical/applyparallelworker.c:890 #, c-format msgid "could not map dynamic shared memory segment" msgstr "დინამიური გაზიარებული მეხსიერების სეგმენტის მიბმის შეცდომა" -#: access/transam/parallel.c:1332 replication/logical/applyparallelworker.c:896 +#: access/transam/parallel.c:1349 replication/logical/applyparallelworker.c:896 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "დინამიური გაზიარებული მეხსიერების სეგმენტის არასწორი მაგიური რიცხვი" @@ -1785,62 +1790,62 @@ msgid "registered custom resource manager \"%s\" with ID %d" msgstr "რეგისტრირებულია მორგებული რესურსის მმართველი \"%s\" ID-ით %d" -#: access/transam/slru.c:346 +#: access/transam/slru.c:361 #, c-format msgid "\"%s\" must be a multiple of %d" msgstr "\"%s\" %d-ის ნამრავლი უნდა იყოს" -#: access/transam/slru.c:815 +#: access/transam/slru.c:830 #, c-format msgid "file \"%s\" doesn't exist, reading as zeroes" msgstr "ფაილი \"%s\" არ არსებობს. წაკითხული იქნება, როგორც ნულებ" -#: access/transam/slru.c:1044 access/transam/slru.c:1050 access/transam/slru.c:1058 access/transam/slru.c:1063 access/transam/slru.c:1070 access/transam/slru.c:1075 access/transam/slru.c:1082 access/transam/slru.c:1089 +#: access/transam/slru.c:1059 access/transam/slru.c:1065 access/transam/slru.c:1073 access/transam/slru.c:1078 access/transam/slru.c:1085 access/transam/slru.c:1090 access/transam/slru.c:1097 access/transam/slru.c:1104 #, c-format msgid "could not access status of transaction %u" msgstr "ტრანზაქციის %u სტატუსის წვდომის შეცდომა" -#: access/transam/slru.c:1045 +#: access/transam/slru.c:1060 #, c-format msgid "Could not open file \"%s\": %m." msgstr "ფაილის (%s) გახსნის შეცდომა: %m." -#: access/transam/slru.c:1051 +#: access/transam/slru.c:1066 #, c-format msgid "Could not seek in file \"%s\" to offset %d: %m." msgstr "ფაილში \"%s\" წანაცვლებაზე %d გადახვევის შეცდომა: %m." -#: access/transam/slru.c:1059 +#: access/transam/slru.c:1074 #, c-format msgid "Could not read from file \"%s\" at offset %d: %m." msgstr "კითხვის შეცდომა ფაილიდან \"%s\" წანაცვლებასთან %d: %m." -#: access/transam/slru.c:1064 +#: access/transam/slru.c:1079 #, c-format msgid "Could not read from file \"%s\" at offset %d: read too few bytes." msgstr "კითხვის შეცდომა ფაილიდან \"%s\" წანაცვლებასთან %d: ყველა ბაიტის წაკითხვა შეუძლებელია." -#: access/transam/slru.c:1071 +#: access/transam/slru.c:1086 #, c-format msgid "Could not write to file \"%s\" at offset %d: %m." msgstr "ფაილში (\"%s\") ჩაწერის შეცდომა წანაცვლებასთან %d: %m." -#: access/transam/slru.c:1076 +#: access/transam/slru.c:1091 #, c-format msgid "Could not write to file \"%s\" at offset %d: wrote too few bytes." msgstr "ფაილში (\"%s\") ჩაწერის შეცდომა წანაცვლებასთან %d: ყველა ბაიტის ჩაწერა შეუძლებელია." -#: access/transam/slru.c:1083 +#: access/transam/slru.c:1098 #, c-format msgid "Could not fsync file \"%s\": %m." msgstr "ფაილის (%s) fsync-ის შეცდომა: %m." -#: access/transam/slru.c:1090 +#: access/transam/slru.c:1105 #, c-format msgid "Could not close file \"%s\": %m." msgstr "ფაილის (%s) დახურვის შეცდომა: %m." -#: access/transam/slru.c:1416 +#: access/transam/slru.c:1431 #, c-format msgid "could not truncate directory \"%s\": apparent wraparound" msgstr "საქაღალდის გასუფთავების შეცდომა: \"%s\" აშკარა ჩაციკვლა" @@ -1905,12 +1910,12 @@ msgid "transaction identifier \"%s\" is already in use" msgstr "ტრანზაქციის იდენტიფიკატორი \"%s\" უკვე გამოიყენება" -#: access/transam/twophase.c:404 access/transam/twophase.c:2541 +#: access/transam/twophase.c:404 access/transam/twophase.c:2531 #, c-format msgid "maximum number of prepared transactions reached" msgstr "მიღწეულია მომზადებული ტრანზაქციების მაქსიმალური რაოდენობა" -#: access/transam/twophase.c:405 access/transam/twophase.c:2542 +#: access/transam/twophase.c:405 access/transam/twophase.c:2532 #, c-format msgid "Increase \"max_prepared_transactions\" (currently %d)." msgstr "გაზარდეთ \"max_prepared_transactions\" (ამჟამად %d)." @@ -1945,147 +1950,147 @@ msgid "prepared transaction with identifier \"%s\" does not exist" msgstr "მომზადებული ტრანზაქცია იდენტიფიკატორით \"%s\" არ არსებობს" -#: access/transam/twophase.c:1190 +#: access/transam/twophase.c:1174 #, c-format msgid "two-phase state file maximum length exceeded" msgstr "ორფაზიანი მდგომარეობის ფაილის მაქსიმალური სიგრძე გადაჭარბებულია" -#: access/transam/twophase.c:1345 +#: access/transam/twophase.c:1329 #, c-format msgid "incorrect size of file \"%s\": %lld byte" msgid_plural "incorrect size of file \"%s\": %lld bytes" msgstr[0] "ფაილის არასწორი ზომა \"%s\": %lld ბაიტი" msgstr[1] "ფაილის არასწორი ზომა \"%s\": %lld ბაიტი" -#: access/transam/twophase.c:1354 +#: access/transam/twophase.c:1338 #, c-format msgid "incorrect alignment of CRC offset for file \"%s\"" msgstr "ფაილისთვის \"%s\" CRC-ს წანაცვლების არასწორი სწორება" -#: access/transam/twophase.c:1372 +#: access/transam/twophase.c:1356 #, c-format msgid "could not read file \"%s\": read %d of %lld" msgstr "ფაილის \"%s\" წაკითხვა შეუძლებელია: წაკითხულია %d %lld-დან" -#: access/transam/twophase.c:1387 +#: access/transam/twophase.c:1371 #, c-format msgid "invalid magic number stored in file \"%s\"" msgstr "ფაილში (\"%s\") დამახსოვრებული მაგიური რიცხვი არასწორია" -#: access/transam/twophase.c:1393 +#: access/transam/twophase.c:1377 #, c-format msgid "invalid size stored in file \"%s\"" msgstr "ფაილში (\"%s\") დამახსოვრებული ზომა არასწორია" -#: access/transam/twophase.c:1405 +#: access/transam/twophase.c:1389 #, c-format msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "გამოთვლილი CRC საკონტროლო ჯამი არ ემთხვევა მნიშვნელობას, რომელიც ფაილში \"%s\" წერია" -#: access/transam/twophase.c:1435 access/transam/xlogrecovery.c:565 postmaster/walsummarizer.c:821 replication/logical/logical.c:210 replication/walsender.c:836 +#: access/transam/twophase.c:1419 access/transam/xlogrecovery.c:565 postmaster/walsummarizer.c:936 replication/logical/logical.c:211 replication/walsender.c:836 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "შეცდომა WAL კითხვის პროცესორის გამოყოფისას." -#: access/transam/twophase.c:1445 +#: access/transam/twophase.c:1429 #, c-format msgid "could not read two-phase state from WAL at %X/%X: %s" msgstr "\"WAL\"-დან 2ფაზიანი მდგომარეობის წაკითხვის შეცდომა მისამართზე %X/%X: %s" -#: access/transam/twophase.c:1450 +#: access/transam/twophase.c:1434 #, c-format msgid "could not read two-phase state from WAL at %X/%X" msgstr "\"WAL\"-დან 2ფაზიანი მდგომარეობის წაკითხვის შეცდომა მისამართზე %X/%X" -#: access/transam/twophase.c:1458 +#: access/transam/twophase.c:1442 #, c-format msgid "expected two-phase state data is not present in WAL at %X/%X" msgstr "\"WAL\"-ში მოსალოდნელი ორფაზიანი მდგომარეობის მონაცემები მისამართზე %X/%X არ არსებობს" -#: access/transam/twophase.c:1754 +#: access/transam/twophase.c:1745 #, c-format msgid "could not recreate file \"%s\": %m" msgstr "ფაილის (\"%s\") თავიდან შექმნის შეცდომა: %m" -#: access/transam/twophase.c:1881 +#: access/transam/twophase.c:1872 #, c-format msgid "%u two-phase state file was written for a long-running prepared transaction" msgid_plural "%u two-phase state files were written for long-running prepared transactions" msgstr[0] "დიდხანს-გაშვებული მომზადებული ტრანზაქციებისთვის %u ორფაზიანი მდგომარეობის ფაილი ჩაიწერა" msgstr[1] "დიდხანს-გაშვებული მომზადებული ტრანზაქციებისთვის %u ორფაზიანი მდგომარეობის ფაილი ჩაიწერა" -#: access/transam/twophase.c:2117 +#: access/transam/twophase.c:2107 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "მიმდინარეობს გაზიარებული მეხსიერებიდან წინასწარ მომზადებული ტრანზაქციის აღდგენა: %u" -#: access/transam/twophase.c:2210 +#: access/transam/twophase.c:2200 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "ორფაზიანი მდგომარეობის გაჭედილი ფაილის მოცილება ტრანზაქციისთვის %u" -#: access/transam/twophase.c:2217 +#: access/transam/twophase.c:2207 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "ორფაზიანი მდგომარეობის გაჭედილი მდგომარეობის წაშლა ტრანზაქციისთვის: %u" -#: access/transam/twophase.c:2230 +#: access/transam/twophase.c:2220 #, c-format msgid "removing future two-phase state file for transaction %u" msgstr "მომავალი ორფაზიანი მდგომარეობის ფაილის წაშლა ტრანზაქციისთვის %u" -#: access/transam/twophase.c:2237 +#: access/transam/twophase.c:2227 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "მომავალი ორფაზიანი მდგომარეობის მეხსიერებიდან წაშლა ტრანზაქციისთვის %u" -#: access/transam/twophase.c:2262 +#: access/transam/twophase.c:2252 #, c-format msgid "corrupted two-phase state file for transaction %u" msgstr "ორფაზიანი მდგომარეობის დაზიანებული ფაილი ტრანზაქციისთვის %u" -#: access/transam/twophase.c:2267 +#: access/transam/twophase.c:2257 #, c-format msgid "corrupted two-phase state in memory for transaction %u" msgstr "ორფაზიანი მდგომარეობის დაზიანებული მეხსიერება ტრანზაქციისთვის %u" -#: access/transam/twophase.c:2524 +#: access/transam/twophase.c:2514 #, c-format msgid "could not recover two-phase state file for transaction %u" msgstr "ორფაზიანი მდგომარეობის ფაილის აღდგენა ტრანზაქციისთვის %u შეუძლებელია" -#: access/transam/twophase.c:2526 +#: access/transam/twophase.c:2516 #, c-format msgid "Two-phase state file has been found in WAL record %X/%X, but this transaction has already been restored from disk." msgstr "" -#: access/transam/twophase.c:2534 storage/file/fd.c:514 utils/fmgr/dfmgr.c:209 +#: access/transam/twophase.c:2524 storage/file/fd.c:514 utils/fmgr/dfmgr.c:209 #, c-format msgid "could not access file \"%s\": %m" msgstr "ფაილის (%s) წვდომის შეცდომა: %m" #: access/transam/varsup.c:156 #, c-format -msgid "database is not accepting commands that assign new XIDs to avoid wraparound data loss in database \"%s\"" -msgstr "ბაზაში (\"%s\") მონაცემების ჩაციკვლის თავიდან ასაცილებლად მონაცემთა ბაზა ბრძანებებს, რომლებიც ახალ XID-ებს ანიჭებენ, არ იღებს" +msgid "database is not accepting commands that assign new transaction IDs to avoid wraparound data loss in database \"%s\"" +msgstr "" #: access/transam/varsup.c:163 #, c-format -msgid "database is not accepting commands that assign new XIDs to avoid wraparound data loss in database with OID %u" -msgstr "ბაზაში (OID-ით \"%u\") მონაცემების გადატანის თავიდან ასაცილებლად მონაცემთა ბაზა ბრძანებებს, რომლებიც ახალ XID-ებს ანიჭებენ, არ იღებს" +msgid "database is not accepting commands that assign new transaction IDs to avoid wraparound data loss in database with OID %u" +msgstr "" #: access/transam/varsup.c:175 access/transam/varsup.c:490 #, c-format msgid "database \"%s\" must be vacuumed within %u transactions" msgstr "ბაზა \"%s\" ტრანზაქციაში %u უნდა მომტვერსასრუტდეს" -#: access/transam/varsup.c:178 access/transam/varsup.c:185 access/transam/varsup.c:493 access/transam/varsup.c:500 +#: access/transam/varsup.c:178 #, c-format msgid "" -"To avoid XID assignment failures, execute a database-wide VACUUM in that database.\n" +"To avoid transaction ID assignment failures, execute a database-wide VACUUM in that database.\n" "You might also need to commit or roll back old prepared transactions, or drop stale replication slots." msgstr "" -"XID-ების მინიჭებების თავიდან ასაცილებლად გაუშვით VACUUM მთელ ბაზაზე იმ მონაცემთა ბაზისთვის.\n" +"ტრანზაქციის ID-ების მინიჭებების თავიდან ასაცილებლად გაუშვით VACUUM მთელ ბაზაზე იმ მონაცემთა ბაზისთვის.\n" "შეიძლება, ასევე, დაგჭირდეთ ძველი მომზადებული ტრანზაქციების კომიტი ან დაბრუნება, ან გამოუყენებელი რეპლიკაციის სლოტების წაშლა." #: access/transam/varsup.c:182 access/transam/varsup.c:497 @@ -2093,10 +2098,19 @@ msgid "database with OID %u must be vacuumed within %u transactions" msgstr "ბაზა \"%u\" %u ტრანზაქციის განმავლობაში უნდა მომტვერსასრუტდეს" +#: access/transam/varsup.c:185 access/transam/varsup.c:493 access/transam/varsup.c:500 +#, c-format +msgid "" +"To avoid XID assignment failures, execute a database-wide VACUUM in that database.\n" +"You might also need to commit or roll back old prepared transactions, or drop stale replication slots." +msgstr "" +"XID-ების მინიჭებების თავიდან ასაცილებლად გაუშვით VACUUM მთელ ბაზაზე იმ მონაცემთა ბაზისთვის.\n" +"შეიძლება, ასევე, დაგჭირდეთ ძველი მომზადებული ტრანზაქციების კომიტი ან დაბრუნება, ან გამოუყენებელი რეპლიკაციის სლოტების წაშლა." + #: access/transam/xact.c:649 #, c-format -msgid "cannot assign XIDs during a parallel operation" -msgstr "პარალელური ოპერაციის დროს XID-ების მინიჭება შეუძლებელია" +msgid "cannot assign transaction IDs during a parallel operation" +msgstr "პარალელური ოპერაციის დროს ტრანზაქციის ID-ების მინიჭება შეუძლებელია" #: access/transam/xact.c:840 #, c-format @@ -2208,446 +2222,446 @@ msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "ტრანზაქციაში 2^32-1 ქვეტრანზაქციაზე მეტი ვერ იქნება" -#: access/transam/xlog.c:1536 +#: access/transam/xlog.c:1542 #, c-format msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X" msgstr "" -#: access/transam/xlog.c:1763 +#: access/transam/xlog.c:1769 #, c-format msgid "cannot read past end of generated WAL: requested %X/%X, current position %X/%X" msgstr "" -#: access/transam/xlog.c:2204 access/transam/xlog.c:4495 +#: access/transam/xlog.c:2210 access/transam/xlog.c:4501 #, c-format msgid "The WAL segment size must be a power of two between 1 MB and 1 GB." msgstr "WAL სეგმენტის ზომა ორის ხარისხი უნდა იყოს, შუალედიდან 1მბ-1გბ." -#: access/transam/xlog.c:2222 +#: access/transam/xlog.c:2228 #, c-format msgid "\"%s\" must be set to -1 during binary upgrade mode." msgstr "ბინარული განახლების რეჟიმისას \"%s\"-ის მნიშვნელობა -1-ზე უნდა დააყენოთ." -#: access/transam/xlog.c:2471 +#: access/transam/xlog.c:2477 #, c-format msgid "could not write to log file \"%s\" at offset %u, length %zu: %m" msgstr "ჟურნალის ფაილში \"%s\" ჩაწერის შეცდომა წანაცვლება %u, სიგრძე %zu: %m" -#: access/transam/xlog.c:3733 access/transam/xlogutils.c:831 replication/walsender.c:3045 +#: access/transam/xlog.c:3739 access/transam/xlogutils.c:831 replication/walsender.c:3045 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "მოთხოვნილი WAL სეგმენტი %s უკვე წაშლილია" -#: access/transam/xlog.c:4055 +#: access/transam/xlog.c:4061 #, c-format msgid "could not rename file \"%s\": %m" msgstr "ფაილის გადარქმევის შეცდომა %s: %m" -#: access/transam/xlog.c:4098 access/transam/xlog.c:4109 access/transam/xlog.c:4130 +#: access/transam/xlog.c:4104 access/transam/xlog.c:4115 access/transam/xlog.c:4136 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "wal-ის აუცილებელი საქაღალდე \"%s\" არ არსებობს" -#: access/transam/xlog.c:4115 access/transam/xlog.c:4136 +#: access/transam/xlog.c:4121 access/transam/xlog.c:4142 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "ნაკლული WAL საქაღალდის შექმნა: \"%s\"" -#: access/transam/xlog.c:4119 access/transam/xlog.c:4139 commands/dbcommands.c:3242 +#: access/transam/xlog.c:4125 access/transam/xlog.c:4145 commands/dbcommands.c:3262 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "ნაკლული საქაღალდის (\"%s\") შექმნის შეცდომა: %m" -#: access/transam/xlog.c:4206 +#: access/transam/xlog.c:4212 #, c-format msgid "could not generate secret authorization token" msgstr "ავთენტიკაციისთვის ერთჯერადი კოდის გენერაციის შეცდომა" -#: access/transam/xlog.c:4357 access/transam/xlog.c:4367 access/transam/xlog.c:4393 access/transam/xlog.c:4401 access/transam/xlog.c:4409 access/transam/xlog.c:4415 access/transam/xlog.c:4423 access/transam/xlog.c:4431 access/transam/xlog.c:4439 access/transam/xlog.c:4447 access/transam/xlog.c:4455 access/transam/xlog.c:4463 access/transam/xlog.c:4473 access/transam/xlog.c:4481 utils/init/miscinit.c:1758 +#: access/transam/xlog.c:4363 access/transam/xlog.c:4373 access/transam/xlog.c:4399 access/transam/xlog.c:4407 access/transam/xlog.c:4415 access/transam/xlog.c:4421 access/transam/xlog.c:4429 access/transam/xlog.c:4437 access/transam/xlog.c:4445 access/transam/xlog.c:4453 access/transam/xlog.c:4461 access/transam/xlog.c:4469 access/transam/xlog.c:4479 access/transam/xlog.c:4487 utils/init/miscinit.c:1812 #, c-format msgid "database files are incompatible with server" msgstr "ბაზის ფაილები სერვერთან თავსებადი არაა" -#: access/transam/xlog.c:4358 +#: access/transam/xlog.c:4364 #, 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:4362 +#: access/transam/xlog.c:4368 #, 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:4368 +#: access/transam/xlog.c:4374 #, 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:4371 access/transam/xlog.c:4397 access/transam/xlog.c:4405 access/transam/xlog.c:4411 +#: access/transam/xlog.c:4377 access/transam/xlog.c:4403 access/transam/xlog.c:4411 access/transam/xlog.c:4417 #, c-format msgid "It looks like you need to initdb." msgstr "როგორც ჩანს, initdb გჭირდებათ." -#: access/transam/xlog.c:4383 +#: access/transam/xlog.c:4389 #, c-format msgid "incorrect checksum in control file" msgstr "არასწორი საკონტროლო ჯამი pg_control-ის ფაილში" -#: access/transam/xlog.c:4394 +#: access/transam/xlog.c:4400 #, 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:4402 +#: access/transam/xlog.c:4408 #, 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:4410 +#: access/transam/xlog.c:4416 #, c-format msgid "The database cluster appears to use a different floating-point number format than the server executable." msgstr "როგორც ჩანს, ბაზის კლასტერი წილადი რიცხვების სხვა ფორმატს იყენებს, ვიდრე სერვერის გამშვები ფაილი." -#: access/transam/xlog.c:4416 +#: access/transam/xlog.c:4422 #, 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:4419 access/transam/xlog.c:4427 access/transam/xlog.c:4435 access/transam/xlog.c:4443 access/transam/xlog.c:4451 access/transam/xlog.c:4459 access/transam/xlog.c:4467 access/transam/xlog.c:4476 access/transam/xlog.c:4484 +#: access/transam/xlog.c:4425 access/transam/xlog.c:4433 access/transam/xlog.c:4441 access/transam/xlog.c:4449 access/transam/xlog.c:4457 access/transam/xlog.c:4465 access/transam/xlog.c:4473 access/transam/xlog.c:4482 access/transam/xlog.c:4490 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "როგორც ჩანს, გჭირდებათ თავიდან ააგოთ პროდუქტი, ან initdb." -#: access/transam/xlog.c:4424 +#: access/transam/xlog.c:4430 #, 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:4432 +#: access/transam/xlog.c:4438 #, 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:4440 +#: access/transam/xlog.c:4446 #, 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:4448 +#: access/transam/xlog.c:4454 #, 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:4456 +#: access/transam/xlog.c:4462 #, 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:4464 +#: access/transam/xlog.c:4470 #, 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:4474 +#: access/transam/xlog.c:4480 #, 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:4482 +#: access/transam/xlog.c:4488 #, c-format msgid "The database cluster was initialized with USE_FLOAT8_BYVAL but the server was compiled without USE_FLOAT8_BYVAL." msgstr "მონაცემთა ბაზის კლასტერის ინიციალიზაცია მოხდა USE_FLOAT8_BYVA -ის გარეშე, მაგრამ სერვერი აგებულია USE_FLOAT8_BYVAL-ით." -#: access/transam/xlog.c:4491 +#: access/transam/xlog.c:4497 #, c-format msgid "invalid WAL segment size in control file (%d byte)" msgid_plural "invalid WAL segment size in control file (%d bytes)" msgstr[0] "არასწორი WAL სეგმენტის ზომა კონტროლის ფაილში (%d ბაიტი)" msgstr[1] "არასწორი WAL სეგმენტის ზომა კონტროლის ფაილში (%d ბაიტი)" -#: access/transam/xlog.c:4504 +#: access/transam/xlog.c:4510 #, 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:4508 +#: access/transam/xlog.c:4514 #, 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:4656 catalog/namespace.c:4681 commands/tablespace.c:1210 commands/user.c:2529 commands/variable.c:72 replication/slot.c:2429 utils/error/elog.c:2214 +#: access/transam/xlog.c:4662 catalog/namespace.c:4696 commands/tablespace.c:1210 commands/user.c:2529 commands/variable.c:72 replication/slot.c:2429 tcop/postgres.c:3715 utils/error/elog.c:2247 #, c-format msgid "List syntax is invalid." msgstr "სია სინტაქსი არასწორია." -#: access/transam/xlog.c:4702 commands/user.c:2545 commands/variable.c:173 utils/error/elog.c:2240 +#: access/transam/xlog.c:4708 commands/user.c:2545 commands/variable.c:173 tcop/postgres.c:3731 utils/error/elog.c:2273 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "უცნობი საკვანძო სიტყვა: \"%s\"." -#: access/transam/xlog.c:5122 +#: access/transam/xlog.c:5129 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "ფაილში წინასწარ-ჩაწერადი ჟურნალის ფაილის დასაწყისის ჩაწერის შეცდომა: %m" -#: access/transam/xlog.c:5130 +#: access/transam/xlog.c:5137 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "ფაილში წინასწარ-ჩაწერადი ჟურნალის ფაილის დასაწყისის fsync-ის შეცდომა: %m" -#: access/transam/xlog.c:5136 +#: access/transam/xlog.c:5143 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "ფაილში წინასწარ-ჩაწერადი ჟურნალის ფაილის დასაწყისის დახურვის შეცდომა: %m" -#: access/transam/xlog.c:5354 +#: access/transam/xlog.c:5368 #, c-format msgid "WAL was generated with \"wal_level=minimal\", cannot continue recovering" msgstr "WAL-ი გენერირებული იყო \"wal_level=minimal\"-ით. აღდგენა ვერ გაგრძელდება" -#: access/transam/xlog.c:5355 +#: access/transam/xlog.c:5369 #, c-format msgid "This happens if you temporarily set \"wal_level=minimal\" on the server." msgstr "ეს ხდება, თუ სერვერზე დროებით \"wal_level=minimal\"-ს დააყენებთ." -#: access/transam/xlog.c:5356 +#: access/transam/xlog.c:5370 #, c-format msgid "Use a backup taken after setting \"wal_level\" to higher than \"minimal\"." msgstr "გამოიყენეთ მარქაფი, რომელიც \"wal_level\"-ის \"minimal\"-ზე მეტზე დაყენების შემდეგ აიღეთ." -#: access/transam/xlog.c:5421 +#: access/transam/xlog.c:5435 #, c-format msgid "control file contains invalid checkpoint location" msgstr "საკონტროლო ფაილი საკონტროლო წერტილის არასწორ მდებარეობას შეიცავს" -#: access/transam/xlog.c:5432 +#: access/transam/xlog.c:5446 #, c-format msgid "database system was shut down at %s" msgstr "მონაცემთა ბაზის სისტემის გათიშვის დრო: %s" -#: access/transam/xlog.c:5438 +#: access/transam/xlog.c:5452 #, c-format msgid "database system was shut down in recovery at %s" msgstr "მონაცემთა ბაზის სისტემის აღდგენისას გათიშვის დრო: %s" -#: access/transam/xlog.c:5444 +#: access/transam/xlog.c:5458 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "მონაცემთა ბაზა შეწყვეტილია; ბოლოს ჩართული იყო: %s" -#: access/transam/xlog.c:5450 +#: access/transam/xlog.c:5464 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "მონაცემთა ბაზის სისტემის აღდგენისას გათიშვის დრო: %s" -#: access/transam/xlog.c:5452 +#: access/transam/xlog.c:5466 #, 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:5458 +#: access/transam/xlog.c:5472 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "მონაცემთა ბაზის სისტემა გაითიშა აღდგენისას ჟურნალის დროს %s" -#: access/transam/xlog.c:5460 +#: access/transam/xlog.c:5474 #, c-format msgid "If this has occurred more than once some data might be corrupted and you might need to choose an earlier recovery target." msgstr "თუ ეს კიდევ ერთხელ მაინც მოხდა, ეს ნიშნავს, რომ მონაცემები დაზიანებულია და უფრო ძველი აღდგენის სამიზნე უნდა აირჩიოთ." -#: access/transam/xlog.c:5466 +#: access/transam/xlog.c:5480 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "მონაცემთა ბაზა შეწყვეტილია; ბოლოს ჩართული იყო: %s" -#: access/transam/xlog.c:5473 +#: access/transam/xlog.c:5487 #, c-format msgid "control file contains invalid database cluster state" msgstr "კონტროლის ფაილი ბაზის კლასტერის არასწორ მდგომარეობას შეიცავს" -#: access/transam/xlog.c:5860 +#: access/transam/xlog.c:5875 #, c-format msgid "WAL ends before end of online backup" msgstr "WAL ონლაინ მარქაფის დასასრულამდე მთავრდება" -#: access/transam/xlog.c:5861 +#: access/transam/xlog.c:5876 #, c-format msgid "All WAL generated while online backup was taken must be available at recovery." msgstr "აღდგენისას ონლაინ მარქაფის აღებისას გენერირებული ყველა WAL-ი ხელმისაწვდომი უნდა იყოს." -#: access/transam/xlog.c:5865 +#: access/transam/xlog.c:5880 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL აღდგენის შეთანხმებულ წერტილამდე მთავრდება" -#: access/transam/xlog.c:5911 +#: access/transam/xlog.c:5926 #, c-format msgid "selected new timeline ID: %u" msgstr "დროის ახალი ხაზის არჩეული ID: %u" -#: access/transam/xlog.c:5944 +#: access/transam/xlog.c:5959 #, c-format msgid "archive recovery complete" msgstr "არქივიდან აღდგენა დასრულდა" -#: access/transam/xlog.c:6552 +#: access/transam/xlog.c:6612 #, c-format msgid "shutting down" msgstr "მიმდინარეობს გამორთვა" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:6591 +#: access/transam/xlog.c:6651 #, 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:6603 +#: access/transam/xlog.c:6663 #, 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:6668 +#: access/transam/xlog.c:6728 #, 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; lsn=%X/%X, redo lsn=%X/%X" msgstr "" -#: access/transam/xlog.c:6691 +#: access/transam/xlog.c:6751 #, 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; lsn=%X/%X, redo lsn=%X/%X" msgstr "" -#: access/transam/xlog.c:7165 +#: access/transam/xlog.c:7233 #, c-format msgid "concurrent write-ahead log activity while database system is shutting down" msgstr "კონკურენტული წინასწარ-ჩაწერადი ჟურნალის აქტივობა, სანამ მონაცემთა ბაზა მუშაობას ასრულებს" -#: access/transam/xlog.c:7749 +#: access/transam/xlog.c:7818 #, c-format msgid "recovery restart point at %X/%X" msgstr "აღდგენის გადატვირთვის წერტილი: %X/%X" -#: access/transam/xlog.c:7751 +#: access/transam/xlog.c:7820 #, c-format msgid "Last completed transaction was at log time %s." msgstr "უკანასკნელად დასრულებული ტრანზაქცია მოხდა ჟურნალის დროით %s." -#: access/transam/xlog.c:8013 +#: access/transam/xlog.c:8082 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "აღდგენის წერტილი \"%s\" შექმნილია %X/%X -სთან" -#: access/transam/xlog.c:8220 +#: access/transam/xlog.c:8289 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "ონლაინ მარქაფი გაუქმდა. აღდგენა ვერ გაგრძელდება" -#: access/transam/xlog.c:8277 +#: access/transam/xlog.c:8347 #, c-format msgid "unexpected timeline ID %u (should be %u) in shutdown checkpoint record" msgstr "გამორთვის საკონტროლო წერტილში ნაპოვნია დროის ხაზი %u მოულოდნელია (უნდა იყოს %u)" -#: access/transam/xlog.c:8335 +#: access/transam/xlog.c:8405 #, c-format msgid "unexpected timeline ID %u (should be %u) in online checkpoint record" msgstr "ჩართვის საკონტროლო წერტილში ნაპოვნია დროის ხაზი %u მოულოდნელია (უნდა იყოს %u)" -#: access/transam/xlog.c:8364 +#: access/transam/xlog.c:8434 #, c-format msgid "unexpected timeline ID %u (should be %u) in end-of-recovery record" msgstr "აღდგენის ბოლო საკონტროლო წერტილში ნაპოვნია დროის ხაზი %u მოულოდნელია (უნდა იყოს %u)" -#: access/transam/xlog.c:8635 +#: access/transam/xlog.c:8705 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "გამჭოლად-ჩაწერადი ფაილის (%s) fsync-ის შეცდომა: %m" -#: access/transam/xlog.c:8640 +#: access/transam/xlog.c:8710 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "ფაილის \"%s\" fdatasync შეუძლებელია: %m" -#: access/transam/xlog.c:8727 access/transam/xlog.c:9063 +#: access/transam/xlog.c:8797 access/transam/xlog.c:9133 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "ონლაინ მარქაფისთვის WAL-ის მიმდინარე დონე საკმარისი არაა" -#: access/transam/xlog.c:8728 access/transam/xlogfuncs.c:248 +#: access/transam/xlog.c:8798 access/transam/xlogfuncs.c:248 #, c-format msgid "\"wal_level\" must be set to \"replica\" or \"logical\" at server start." msgstr "სერვისის გაშვებისას \"wal_level\"-ის მნიშვნელობა უნდა იყოს \"replica\" ან \"logical\"." -#: access/transam/xlog.c:8733 +#: access/transam/xlog.c:8803 #, c-format msgid "backup label too long (max %d bytes)" msgstr "მარქაფის ჭდე ძალიან გრძელია (max %d ბაიტი)" -#: access/transam/xlog.c:8854 +#: access/transam/xlog.c:8924 #, c-format msgid "WAL generated with \"full_page_writes=off\" was replayed since last restartpoint" msgstr "" -#: access/transam/xlog.c:8856 access/transam/xlog.c:9152 +#: access/transam/xlog.c:8926 access/transam/xlog.c:9222 #, 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:8936 backup/basebackup.c:1417 utils/adt/misc.c:354 +#: access/transam/xlog.c:9006 backup/basebackup.c:1417 utils/adt/misc.c:354 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "სიმბოლური ბმის \"%s\" წაკითხვის შეცდომა: %m" -#: access/transam/xlog.c:8943 backup/basebackup.c:1422 utils/adt/misc.c:359 +#: access/transam/xlog.c:9013 backup/basebackup.c:1422 utils/adt/misc.c:359 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "%s: სიმბმული ძალიან გრძელია" -#: access/transam/xlog.c:9064 +#: access/transam/xlog.c:9134 #, c-format msgid "wal_level must be set to \"replica\" or \"logical\" at server start." msgstr "სერვისის გაშვებისას wal_level -ის მნიშვნელობა უნდა იყოს \"replica\" ან \"logical\"." -#: access/transam/xlog.c:9102 backup/basebackup.c:1281 +#: access/transam/xlog.c:9172 backup/basebackup.c:1281 #, c-format msgid "the standby was promoted during online backup" msgstr "უქმე წახალისდა ონლაინ მარქაფის მიმდინარეობის დროს" -#: access/transam/xlog.c:9103 backup/basebackup.c:1282 +#: access/transam/xlog.c:9173 backup/basebackup.c:1282 #, c-format msgid "This means that the backup being taken is corrupt and should not be used. Try taking another online backup." msgstr "ეს ნიშნავს, რომ მარქაფი, რომლის აღებაც მიმდინარეობს, დაზიანებულია და არ უნდა გამოიყენოთ. სცადეთ, სხვა ონლაინ მარქაფი აიღოთ." -#: access/transam/xlog.c:9150 +#: access/transam/xlog.c:9220 #, c-format msgid "WAL generated with \"full_page_writes=off\" was replayed during online backup" msgstr "" -#: access/transam/xlog.c:9266 +#: access/transam/xlog.c:9336 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "ძირითადი მარქაფი დასრულდა. ველოდები აუცილებელი WAL-ის სეგმენტების დაარქივებას" -#: access/transam/xlog.c:9280 +#: access/transam/xlog.c:9350 #, c-format msgid "still waiting for all required WAL segments to be archived (%d seconds elapsed)" msgstr "ჯერ კიდევ ველოდები ყველა აუცილებელი WAL სეგმენტის დაარქივებას (გასულია %d წამი)" -#: access/transam/xlog.c:9282 +#: access/transam/xlog.c:9352 #, 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 "" -#: access/transam/xlog.c:9289 +#: access/transam/xlog.c:9359 #, c-format msgid "all required WAL segments have been archived" msgstr "ყველა საჭირო WAL სეგმენტი დაარქივებულია" -#: access/transam/xlog.c:9293 +#: access/transam/xlog.c:9363 #, 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 "" -#: access/transam/xlog.c:9332 +#: access/transam/xlog.c:9402 #, c-format msgid "aborting backup due to backend exiting before pg_backup_stop was called" msgstr "მარქაფი გაუქმდა, რადგან უკანაბოლომ მუშაობა pg_backup_stop-ის გამოძახებამდე დაასრულა" @@ -3271,7 +3285,7 @@ msgid "Execute pg_wal_replay_resume() to promote." msgstr "წასახალისებლად გაუშვით pg_wal_replay_resume()." -#: access/transam/xlogrecovery.c:2941 access/transam/xlogrecovery.c:4678 +#: access/transam/xlogrecovery.c:2941 access/transam/xlogrecovery.c:4679 #, c-format msgid "recovery has paused" msgstr "აღდგენა შეჩერდა" @@ -3296,117 +3310,117 @@ msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu" msgstr "ჟურნალის სეგმენტიდან (%s, LSN %X/%X, წანაცვლება %u) წაკითხვის შეცდომა: წავიკითხე %d %zu-დან" -#: access/transam/xlogrecovery.c:4060 +#: access/transam/xlogrecovery.c:4061 #, c-format msgid "invalid checkpoint location" msgstr "საკონტროლო წერტილის არასწორი მდებარეობა" -#: access/transam/xlogrecovery.c:4070 +#: access/transam/xlogrecovery.c:4071 #, c-format msgid "invalid checkpoint record" msgstr "საკონტროლო წერტილის არასწორი ჩანაწერი" -#: access/transam/xlogrecovery.c:4076 +#: access/transam/xlogrecovery.c:4077 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "რესურსის მმართველის არასწორი ID საკონტროლო წერტილის ჩანაწერში" -#: access/transam/xlogrecovery.c:4084 +#: access/transam/xlogrecovery.c:4085 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "საკონტროლო წერტილის არასწორი xl_info" -#: access/transam/xlogrecovery.c:4090 +#: access/transam/xlogrecovery.c:4091 #, c-format msgid "invalid length of checkpoint record" msgstr "საკონტროლო წერტილის ჩანაწერის არასწორი სიგრძე" -#: access/transam/xlogrecovery.c:4144 +#: access/transam/xlogrecovery.c:4145 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "ახალი დროის ხაზი %u ბაზის სისტემის დროის ხაზის %u შვილი არაა" -#: access/transam/xlogrecovery.c:4158 +#: access/transam/xlogrecovery.c:4159 #, c-format msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X" msgstr "" -#: access/transam/xlogrecovery.c:4177 +#: access/transam/xlogrecovery.c:4178 #, c-format msgid "new target timeline is %u" msgstr "ახალი სამიზნის დროის ხაზია %u" -#: access/transam/xlogrecovery.c:4380 +#: access/transam/xlogrecovery.c:4381 #, c-format msgid "WAL receiver process shutdown requested" msgstr "მოთხოვნილია WAL-ის მიმღები პროცესის გამორთვა" -#: access/transam/xlogrecovery.c:4440 +#: access/transam/xlogrecovery.c:4441 #, c-format msgid "received promote request" msgstr "მიღებულა დაწინაურების მოთხოვნა" -#: access/transam/xlogrecovery.c:4669 +#: access/transam/xlogrecovery.c:4670 #, c-format msgid "hot standby is not possible because of insufficient parameter settings" msgstr "ცხელი მომლოდინე სერვერის არსებობა შეუძლებელია არასაკმარისი პარამეტრის მნიშვნელობების გამო" -#: access/transam/xlogrecovery.c:4670 access/transam/xlogrecovery.c:4697 access/transam/xlogrecovery.c:4727 +#: access/transam/xlogrecovery.c:4671 access/transam/xlogrecovery.c:4698 access/transam/xlogrecovery.c:4728 #, 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/xlogrecovery.c:4679 +#: access/transam/xlogrecovery.c:4680 #, c-format msgid "If recovery is unpaused, the server will shut down." msgstr "თუ აღდგენა გაგრძელდება, სერვერი გამოირთვება." -#: access/transam/xlogrecovery.c:4680 +#: access/transam/xlogrecovery.c:4681 #, c-format msgid "You can then restart the server after making the necessary configuration changes." msgstr "კონფიგურაციაში საჭირო ცვლილებების შეტანის შემდეგ შეგიძლიათ სერვერი დაარესტარტოთ." -#: access/transam/xlogrecovery.c:4691 +#: access/transam/xlogrecovery.c:4692 #, c-format msgid "promotion is not possible because of insufficient parameter settings" msgstr "დაწინაურება შეუძლებელია არასაკმარისი პარამეტრების მნიშვნელობების გამო" -#: access/transam/xlogrecovery.c:4701 +#: access/transam/xlogrecovery.c:4702 #, c-format msgid "Restart the server after making the necessary configuration changes." msgstr "კონფიგურაციაში საჭირო ცვლილებების შეტანის შემდეგ გადატვირთეთ სერვერი." -#: access/transam/xlogrecovery.c:4725 +#: access/transam/xlogrecovery.c:4726 #, c-format msgid "recovery aborted because of insufficient parameter settings" msgstr "აღდგენა შეწყვეტილია არასაკმარისი პარამეტრების მნიშვნელობების გამო" -#: access/transam/xlogrecovery.c:4731 +#: access/transam/xlogrecovery.c:4732 #, c-format msgid "You can restart the server after making the necessary configuration changes." msgstr "კონფიგურაციაში საჭირო ცვლილებების შეტანის შემდეგ შეგიძლიათ სერვერი დაარესტარტოთ." -#: access/transam/xlogrecovery.c:4773 +#: access/transam/xlogrecovery.c:4774 #, c-format msgid "multiple recovery targets specified" msgstr "მითითებულია აღდგენის მრავალი სამიზნე" -#: access/transam/xlogrecovery.c:4774 +#: access/transam/xlogrecovery.c:4775 #, 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\" მხოლოდ ერთის დაყენება შეგიძლიათ." -#: access/transam/xlogrecovery.c:4785 +#: access/transam/xlogrecovery.c:4786 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "დაშვებულია მხოლოდ ერთი მნიშვნელობა: \"immediate\"." -#: access/transam/xlogrecovery.c:4937 utils/adt/timestamp.c:202 utils/adt/timestamp.c:455 +#: access/transam/xlogrecovery.c:4938 utils/adt/timestamp.c:202 utils/adt/timestamp.c:455 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "დროის შტამპი დიაპაზონს გარეთაა: \"%s\"" -#: access/transam/xlogrecovery.c:4982 +#: access/transam/xlogrecovery.c:4983 #, c-format msgid "\"recovery_target_timeline\" is not a valid number." msgstr "\"recovery_target_timeline\" სწორი რიცხვი არაა." @@ -3436,7 +3450,7 @@ msgid "archive command was terminated by exception 0x%X" msgstr "არქივაციის ბრძანება დასრულდა გამონაკლისით 0x%X" -#: archive/shell_archive.c:109 postmaster/postmaster.c:3094 +#: archive/shell_archive.c:109 postmaster/postmaster.c:3095 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "თექვსმეტობითი მნიშვნელობის აღწერისთვის იხილეთ C-ის ჩასასმელი ფაილი \"ntstatus.h\"." @@ -3620,80 +3634,65 @@ msgid "could not initialize compression library" msgstr "შეკუმშვის ბიბლიოთეკის ინიციალიზაციის შეცდომა" -#: backup/basebackup_incremental.c:300 +#: backup/basebackup_incremental.c:294 #, c-format msgid "manifest contains no required WAL ranges" msgstr "მანიფესტი აუცილებელ WAL შუალედებს არ შეიცავს" -#: backup/basebackup_incremental.c:355 +#: backup/basebackup_incremental.c:349 #, c-format msgid "timeline %u found in manifest, but not in this server's history" msgstr "დროის ხაზი %u ვიპოვე მანიფესტში, სერვერის ისტორიაში კი - ვერა" -#: backup/basebackup_incremental.c:420 +#: backup/basebackup_incremental.c:414 #, c-format msgid "manifest requires WAL from initial timeline %u starting at %X/%X, but that timeline begins at %X/%X" msgstr "მანიფესტი მოითხოვს WAL-ს საწყისი დროის ხაზიდან %u საწყისი წერტილით %X/%X, მაგრამ დროის ხაზი იწყება მნიშვნელობაზე %X/%X" -#: backup/basebackup_incremental.c:430 +#: backup/basebackup_incremental.c:424 #, c-format msgid "manifest requires WAL from continuation timeline %u starting at %X/%X, but that timeline begins at %X/%X" msgstr "მანიფესტი მოითხოვს WAL-ს გაგრძელების დროის ხაზიდან %u საწყისი წერტილით %X/%X, მაგრამ დროის ხაზი იწყება მნიშვნელობაზე %X/%X" -#: backup/basebackup_incremental.c:441 +#: backup/basebackup_incremental.c:435 #, c-format msgid "manifest requires WAL from final timeline %u ending at %X/%X, but this backup starts at %X/%X" msgstr "მანიფესტი მოითხოვს WAL-ს ფინალური დროის ხაზიდან %u საბოლოო წერტილით %X/%X, მაგრამ ეს მარქაფი იწყება მისამართზე %X/%X" -#: backup/basebackup_incremental.c:451 -#, c-format -msgid "manifest requires WAL from non-final timeline %u ending at %X/%X, but this server switched timelines at %X/%X" -msgstr "მანიფესტი მოითხოვს WAL-ს არაფინალური დროის ხაზიდან %u საბოლოო წერტილით %X/%X, მაგრამ ამ სერვერმა გადართო დროის ხაზები მისამართზე %X/%X" - -#: backup/basebackup_incremental.c:518 +#: backup/basebackup_incremental.c:439 #, c-format -msgid "WAL summarization is not progressing" +msgid "This can happen for incremental backups on a standby if there was little activity since the previous backup." msgstr "" -#: backup/basebackup_incremental.c:519 +#: backup/basebackup_incremental.c:446 #, c-format -msgid "Summarization is needed through %X/%X, but is stuck at %X/%X on disk and %X/%X in memory." -msgstr "" - -#: backup/basebackup_incremental.c:532 -#, c-format -msgid "still waiting for WAL summarization through %X/%X after %ld seconds" -msgstr "" - -#: backup/basebackup_incremental.c:535 -#, c-format -msgid "Summarization has reached %X/%X on disk and %X/%X in memory." -msgstr "" +msgid "manifest requires WAL from non-final timeline %u ending at %X/%X, but this server switched timelines at %X/%X" +msgstr "მანიფესტი მოითხოვს WAL-ს არაფინალური დროის ხაზიდან %u საბოლოო წერტილით %X/%X, მაგრამ ამ სერვერმა გადართო დროის ხაზები მისამართზე %X/%X" -#: backup/basebackup_incremental.c:604 +#: backup/basebackup_incremental.c:527 #, c-format msgid "WAL summaries are required on timeline %u from %X/%X to %X/%X, but no summaries for that timeline and LSN range exist" msgstr "" -#: backup/basebackup_incremental.c:611 +#: backup/basebackup_incremental.c:534 #, c-format msgid "WAL summaries are required on timeline %u from %X/%X to %X/%X, but the summaries for that timeline and LSN range are incomplete" msgstr "" -#: backup/basebackup_incremental.c:615 +#: backup/basebackup_incremental.c:538 #, c-format msgid "The first unsummarized LSN in this range is %X/%X." msgstr "" -#: backup/basebackup_incremental.c:1015 +#: backup/basebackup_incremental.c:938 #, c-format msgid "backup manifest version 1 does not support incremental backup" msgstr "მარქაფის მანიფესტის ვერსიას 1 ინკრემენტული მარქაფების მხარდაჭერა არ გააჩნია" -#: backup/basebackup_incremental.c:1033 +#: backup/basebackup_incremental.c:956 #, c-format -msgid "manifest system identifier is %llu, but database system identifier is %llu" -msgstr "მანიფესტის სისტემის იდენტიფიკატორია %llu, მაგრამ კონტროლის ფაილიs მნიშვნელობაა %llu" +msgid "system identifier in backup manifest is %llu, but database system identifier is %llu" +msgstr "სისტემის იდენტიფიკატორი სარეზერვო მანიფესტში არის %llu, მაგრამ მონაცემთა ბაზის სისტემის იდენტიფიკატორია %llu" #: backup/basebackup_lz4.c:67 #, c-format @@ -3725,7 +3724,7 @@ msgid "directory \"%s\" exists but is not empty" msgstr "საქაღალდე \"%s\" არსებობს, მაგრამ ცარიელი არაა" -#: backup/basebackup_server.c:123 utils/init/postinit.c:1177 +#: backup/basebackup_server.c:123 utils/init/postinit.c:1178 #, c-format msgid "could not access directory \"%s\": %m" msgstr "საქაღალდის (%s) წვდომის შეცდომა: %m" @@ -3770,12 +3769,12 @@ msgid "invalid timeline %lld" msgstr "არასწორი დროის ხაზი %lld" -#: bootstrap/bootstrap.c:239 postmaster/postmaster.c:623 tcop/postgres.c:3859 +#: bootstrap/bootstrap.c:239 postmaster/postmaster.c:623 tcop/postgres.c:3946 #, c-format msgid "--%s requires a value" msgstr "--%s მნიშვნელობა სჭირდება" -#: bootstrap/bootstrap.c:244 postmaster/postmaster.c:628 tcop/postgres.c:3864 +#: bootstrap/bootstrap.c:244 postmaster/postmaster.c:628 tcop/postgres.c:3951 #, c-format msgid "-c %s requires a value" msgstr "-c %s მნიშვნელობა სჭირდება" @@ -3790,648 +3789,648 @@ msgid "%s: invalid command-line arguments\n" msgstr "%s: არასწორი ბრძანების სტრიქონის არგუმენტები\n" -#: catalog/aclchk.c:210 +#: catalog/aclchk.c:211 #, c-format msgid "grant options can only be granted to roles" msgstr "უფლებების უფლების მიცემა მხოლოდ როლებზეა შესაძლებელი" -#: catalog/aclchk.c:332 +#: catalog/aclchk.c:333 #, c-format msgid "no privileges were granted for column \"%s\" of relation \"%s\"" msgstr "ურთიერთობის %2$s სვეტის %1$s პრივილეგიები მინიჭებული არაა" -#: catalog/aclchk.c:337 +#: catalog/aclchk.c:338 #, c-format msgid "no privileges were granted for \"%s\"" msgstr "ობიექტს \"%s\" პრივილეგიები მინიჭებული არ აქვს" -#: catalog/aclchk.c:345 +#: catalog/aclchk.c:346 #, c-format msgid "not all privileges were granted for column \"%s\" of relation \"%s\"" msgstr "ურთიერთობის %2$s სვეტის %1$s ყველა პრივილეგია მინიჭებული არაა" -#: catalog/aclchk.c:350 +#: catalog/aclchk.c:351 #, c-format msgid "not all privileges were granted for \"%s\"" msgstr "\"%s\"-სთვის საჭირო ყველა უფლება მინიჭებული არ ყოფილა" -#: catalog/aclchk.c:361 +#: catalog/aclchk.c:362 #, c-format msgid "no privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "ურთიერთობის %2$s სვეტის %1$s მოსახსნელი პრივილეგიები არ არსებობს" -#: catalog/aclchk.c:366 +#: catalog/aclchk.c:367 #, c-format msgid "no privileges could be revoked for \"%s\"" msgstr "%s-სთვის უფლებები არ გაუქმდება" -#: catalog/aclchk.c:374 +#: catalog/aclchk.c:375 #, c-format msgid "not all privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "ურთიერთობის %2$s სვეტს %1$s ყველა პრივილეგიას ვერ მოხსნით" -#: catalog/aclchk.c:379 +#: catalog/aclchk.c:380 #, c-format msgid "not all privileges could be revoked for \"%s\"" msgstr "\"%s\"-ზე ყველა პრივილეგიის გაუქმება შეუძლებელია" -#: catalog/aclchk.c:411 +#: catalog/aclchk.c:412 #, c-format msgid "grantor must be current user" msgstr "მიმნიჭებელი მიმდინარე მომხმარებელი უნდა იყოს" -#: catalog/aclchk.c:479 catalog/aclchk.c:1054 +#: catalog/aclchk.c:480 catalog/aclchk.c:1055 #, c-format msgid "invalid privilege type %s for relation" msgstr "ურთიერთობის პრივილეგიის არასწორი ტიპი: %s" -#: catalog/aclchk.c:483 catalog/aclchk.c:1058 +#: catalog/aclchk.c:484 catalog/aclchk.c:1059 #, c-format msgid "invalid privilege type %s for sequence" msgstr "მიმდევრობის პრივილეგიის არასწორი ტიპი: %s" -#: catalog/aclchk.c:487 +#: catalog/aclchk.c:488 #, c-format msgid "invalid privilege type %s for database" msgstr "ბაზის პრივილეგიის არასწორი ტიპი: %s" -#: catalog/aclchk.c:491 +#: catalog/aclchk.c:492 #, c-format msgid "invalid privilege type %s for domain" msgstr "დომენის პრივილეგიის არასწორი ტიპი: %s" -#: catalog/aclchk.c:495 catalog/aclchk.c:1062 +#: catalog/aclchk.c:496 catalog/aclchk.c:1063 #, c-format msgid "invalid privilege type %s for function" msgstr "ფუნქციის პრივილეგიის არასწორი ტიპი: %s" -#: catalog/aclchk.c:499 +#: catalog/aclchk.c:500 #, c-format msgid "invalid privilege type %s for language" msgstr "ენის პრივილეგიის არასწორი ტიპი: %s" -#: catalog/aclchk.c:503 +#: catalog/aclchk.c:504 #, c-format msgid "invalid privilege type %s for large object" msgstr "დიდი ობიექტის პრივილეგიის არასწორი ტიპი: %s" -#: catalog/aclchk.c:507 catalog/aclchk.c:1078 +#: catalog/aclchk.c:508 catalog/aclchk.c:1079 #, c-format msgid "invalid privilege type %s for schema" msgstr "სქემის პრივილეგიის არასწორი ტიპი: %s" -#: catalog/aclchk.c:511 catalog/aclchk.c:1066 +#: catalog/aclchk.c:512 catalog/aclchk.c:1067 #, c-format msgid "invalid privilege type %s for procedure" msgstr "პროცედურის პრივილეგიის არასწორი ტიპი: %s" -#: catalog/aclchk.c:515 catalog/aclchk.c:1070 +#: catalog/aclchk.c:516 catalog/aclchk.c:1071 #, c-format msgid "invalid privilege type %s for routine" msgstr "ქვეპროგრამის პრივილეგიის არასწორი ტიპი: %s" -#: catalog/aclchk.c:519 +#: catalog/aclchk.c:520 #, c-format msgid "invalid privilege type %s for tablespace" msgstr "ცხრილის სივრცის პრივილეგიის არასწორი ტიპი: %s" -#: catalog/aclchk.c:523 catalog/aclchk.c:1074 +#: catalog/aclchk.c:524 catalog/aclchk.c:1075 #, c-format msgid "invalid privilege type %s for type" msgstr "ტიპის პრივილეგიის არასწორი ტიპი: %s" -#: catalog/aclchk.c:527 +#: catalog/aclchk.c:528 #, c-format msgid "invalid privilege type %s for foreign-data wrapper" msgstr "გარე მონაცემების გადამტანის პრივილეგიის არასწორი ტიპი: %s" -#: catalog/aclchk.c:531 +#: catalog/aclchk.c:532 #, c-format msgid "invalid privilege type %s for foreign server" msgstr "გარე სერვერის პრივილეგიის არასწორი ტიპი: %s" -#: catalog/aclchk.c:535 +#: catalog/aclchk.c:536 #, c-format msgid "invalid privilege type %s for parameter" msgstr "პარამეტრის პრივილეგიის არასწორი ტიპი: %s" -#: catalog/aclchk.c:574 +#: catalog/aclchk.c:575 #, c-format msgid "column privileges are only valid for relations" msgstr "სვეტის პრივილეგიები მხოლოდ ურთიერთობებისთვის მოქმედებს" -#: catalog/aclchk.c:737 catalog/aclchk.c:3626 catalog/objectaddress.c:1054 catalog/pg_largeobject.c:113 storage/large_object/inv_api.c:285 +#: catalog/aclchk.c:738 catalog/aclchk.c:3629 catalog/objectaddress.c:1054 catalog/pg_largeobject.c:113 storage/large_object/inv_api.c:285 #, c-format msgid "large object %u does not exist" msgstr "დიდი ობიექტი %u არ არსებობს" -#: catalog/aclchk.c:1111 +#: catalog/aclchk.c:1112 #, c-format msgid "default privileges cannot be set for columns" msgstr "სვეტებისთვის ნაგულისხმევი პრივილეგიების დაყენება შეუძლებელია" -#: catalog/aclchk.c:1147 +#: catalog/aclchk.c:1148 #, c-format msgid "permission denied to change default privileges" msgstr "ნაგულისხმევი პრივილეგიების შეცვლის წვდომა აკრძალულია" -#: catalog/aclchk.c:1265 +#: catalog/aclchk.c:1266 #, c-format msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "'IN SCHEMA' პირობის გამოყენება GRANT/REVOKE ON SCHEMAS-ის გამოყენებისას შეუძლებელია" -#: catalog/aclchk.c:1616 catalog/catalog.c:629 catalog/objectaddress.c:1523 catalog/pg_publication.c:528 commands/analyze.c:380 commands/copy.c:913 commands/sequence.c:1645 commands/tablecmds.c:7549 commands/tablecmds.c:7703 commands/tablecmds.c:7753 commands/tablecmds.c:7827 commands/tablecmds.c:7897 commands/tablecmds.c:8027 commands/tablecmds.c:8156 commands/tablecmds.c:8250 commands/tablecmds.c:8351 commands/tablecmds.c:8478 commands/tablecmds.c:8508 -#: commands/tablecmds.c:8650 commands/tablecmds.c:8743 commands/tablecmds.c:8877 commands/tablecmds.c:8989 commands/tablecmds.c:12709 commands/tablecmds.c:12890 commands/tablecmds.c:13051 commands/tablecmds.c:14240 commands/tablecmds.c:16866 commands/trigger.c:942 parser/analyze.c:2530 parser/parse_relation.c:737 parser/parse_target.c:1067 parser/parse_type.c:144 parser/parse_utilcmd.c:3538 parser/parse_utilcmd.c:3578 parser/parse_utilcmd.c:3620 utils/adt/acl.c:2917 -#: utils/adt/ruleutils.c:2811 +#: catalog/aclchk.c:1617 catalog/catalog.c:659 catalog/objectaddress.c:1523 catalog/pg_publication.c:528 commands/analyze.c:380 commands/copy.c:951 commands/sequence.c:1655 commands/tablecmds.c:7541 commands/tablecmds.c:7695 commands/tablecmds.c:7745 commands/tablecmds.c:7819 commands/tablecmds.c:7889 commands/tablecmds.c:8019 commands/tablecmds.c:8148 commands/tablecmds.c:8242 commands/tablecmds.c:8343 commands/tablecmds.c:8470 commands/tablecmds.c:8500 +#: commands/tablecmds.c:8642 commands/tablecmds.c:8735 commands/tablecmds.c:8869 commands/tablecmds.c:8981 commands/tablecmds.c:12797 commands/tablecmds.c:12989 commands/tablecmds.c:13150 commands/tablecmds.c:14339 commands/tablecmds.c:16966 commands/trigger.c:942 parser/analyze.c:2530 parser/parse_relation.c:737 parser/parse_target.c:1067 parser/parse_type.c:144 parser/parse_utilcmd.c:3409 parser/parse_utilcmd.c:3449 parser/parse_utilcmd.c:3491 utils/adt/acl.c:2923 +#: utils/adt/ruleutils.c:2812 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "სვეტი \"%s\" ურთიერთობაში %s არ არსებობს" -#: catalog/aclchk.c:1861 +#: catalog/aclchk.c:1862 #, c-format msgid "\"%s\" is an index" msgstr "\"%s\" ინდექსია" -#: catalog/aclchk.c:1868 commands/tablecmds.c:14397 commands/tablecmds.c:17775 +#: catalog/aclchk.c:1869 commands/tablecmds.c:14496 commands/tablecmds.c:17882 #, c-format msgid "\"%s\" is a composite type" msgstr "\"%s\" კომპოზიტური ტიპია" -#: catalog/aclchk.c:1876 catalog/objectaddress.c:1363 commands/tablecmds.c:263 commands/tablecmds.c:17739 utils/adt/acl.c:2101 utils/adt/acl.c:2131 utils/adt/acl.c:2164 utils/adt/acl.c:2200 utils/adt/acl.c:2231 utils/adt/acl.c:2262 +#: catalog/aclchk.c:1877 catalog/objectaddress.c:1363 commands/tablecmds.c:263 commands/tablecmds.c:17846 utils/adt/acl.c:2107 utils/adt/acl.c:2137 utils/adt/acl.c:2170 utils/adt/acl.c:2206 utils/adt/acl.c:2237 utils/adt/acl.c:2268 #, c-format msgid "\"%s\" is not a sequence" msgstr "\"%s\" მიმდევრობა არაა" -#: catalog/aclchk.c:1914 +#: catalog/aclchk.c:1915 #, c-format msgid "sequence \"%s\" only supports USAGE, SELECT, and UPDATE privileges" msgstr "მიმდევრობა \"%s\"-ს მხოლოდ USAGE, SELECT და UPDATE პრივილეგიების მხარდაჭერა გააჩნიათ" -#: catalog/aclchk.c:1931 +#: catalog/aclchk.c:1932 #, c-format msgid "invalid privilege type %s for table" msgstr "ცხრილის პრივილეგიის არასწორი ტიპი: %s" -#: catalog/aclchk.c:2094 +#: catalog/aclchk.c:2097 #, c-format msgid "invalid privilege type %s for column" msgstr "სვეტის პრივილეგიის არასწორი ტიპი: %s" -#: catalog/aclchk.c:2107 +#: catalog/aclchk.c:2110 #, c-format msgid "sequence \"%s\" only supports SELECT column privileges" msgstr "მიმდევრობა \"%s\"-ს მხოლოდ SELECT სვეტის პრივილეგიების მხარდაჭერა გააჩნია" -#: catalog/aclchk.c:2297 +#: catalog/aclchk.c:2301 #, c-format msgid "language \"%s\" is not trusted" msgstr "ენა \"%s\" სანდო არაა" -#: catalog/aclchk.c:2299 +#: catalog/aclchk.c:2303 #, c-format msgid "GRANT and REVOKE are not allowed on untrusted languages, because only superusers can use untrusted languages." msgstr "GRANT და REVOKE არასანდო ენებზე დაშვებული არაა, რადგან არასანდო ენების გამოყენება მხოლოდ ზემომხმარებლებს შეუძლიათ." -#: catalog/aclchk.c:2451 +#: catalog/aclchk.c:2454 #, c-format msgid "cannot set privileges of array types" msgstr "მასივის ტიპების პრივილეგიის დაყენება შეუძლებელია" -#: catalog/aclchk.c:2452 +#: catalog/aclchk.c:2455 #, c-format msgid "Set the privileges of the element type instead." msgstr "ნაცვლად დააყენეთ ელემენტის ტიპის პრივილეგიები." -#: catalog/aclchk.c:2456 +#: catalog/aclchk.c:2459 #, c-format msgid "cannot set privileges of multirange types" msgstr "მრავალშუალედიანი ტიპების პრივილეგიების დაყენება შეუძლებელია" -#: catalog/aclchk.c:2457 +#: catalog/aclchk.c:2460 #, c-format msgid "Set the privileges of the range type instead." msgstr "სანაცვლოდ შუალედის ტიპის პრივილეგიების დაყენება." -#: catalog/aclchk.c:2464 catalog/objectaddress.c:1629 +#: catalog/aclchk.c:2467 catalog/objectaddress.c:1629 #, c-format msgid "\"%s\" is not a domain" msgstr "\"%s\" დომენი არაა" -#: catalog/aclchk.c:2650 +#: catalog/aclchk.c:2653 #, c-format msgid "unrecognized privilege type \"%s\"" msgstr "პრივილეგიის უცნობი ტიპი \"%s\"" -#: catalog/aclchk.c:2717 +#: catalog/aclchk.c:2720 #, c-format msgid "permission denied for aggregate %s" msgstr "წვდომა აკრძალულია აგრეგატზე: \"%s\"" -#: catalog/aclchk.c:2720 +#: catalog/aclchk.c:2723 #, c-format msgid "permission denied for collation %s" msgstr "წვდომა აკრძალულია კოლაციაზე: \"%s\"" -#: catalog/aclchk.c:2723 +#: catalog/aclchk.c:2726 #, c-format msgid "permission denied for column %s" msgstr "წვდომა აკრძალულია სვეტზე: \"%s\"" -#: catalog/aclchk.c:2726 +#: catalog/aclchk.c:2729 #, c-format msgid "permission denied for conversion %s" msgstr "წვდომა აკრძალულია გადაყვანაზე: \"%s\"" -#: catalog/aclchk.c:2729 +#: catalog/aclchk.c:2732 #, c-format msgid "permission denied for database %s" msgstr "წვდომა აკრძალულია აგრეგატზე: \"%s\"" -#: catalog/aclchk.c:2732 +#: catalog/aclchk.c:2735 #, c-format msgid "permission denied for domain %s" msgstr "წვდომა აკრძალულია დომენზე: \"%s\"" -#: catalog/aclchk.c:2735 +#: catalog/aclchk.c:2738 #, c-format msgid "permission denied for event trigger %s" msgstr "წვდომა აკრძალულია მოვლენის ტრიგერზე: \"%s\"" -#: catalog/aclchk.c:2738 +#: catalog/aclchk.c:2741 #, c-format msgid "permission denied for extension %s" msgstr "წვდომა აკრძალულია გაფართოებაზე: \"%s\"" -#: catalog/aclchk.c:2741 +#: catalog/aclchk.c:2744 #, c-format msgid "permission denied for foreign-data wrapper %s" msgstr "წვდომა აკრძალულია გარე მონაცემების გადამტანზე: \"%s\"" -#: catalog/aclchk.c:2744 +#: catalog/aclchk.c:2747 #, c-format msgid "permission denied for foreign server %s" msgstr "წვდომა აკრძალულია გარე სერვერზე: \"%s\"" -#: catalog/aclchk.c:2747 +#: catalog/aclchk.c:2750 #, c-format msgid "permission denied for foreign table %s" msgstr "წვდომა აკრძალულია გარე ცხრილზე: \"%s\"" -#: catalog/aclchk.c:2750 +#: catalog/aclchk.c:2753 #, c-format msgid "permission denied for function %s" msgstr "წვდომა აკრძალულია ფუნქციაზე: \"%s\"" -#: catalog/aclchk.c:2753 +#: catalog/aclchk.c:2756 #, c-format msgid "permission denied for index %s" msgstr "წვდომა აკრძალულია ინდექზე: \"%s\"" -#: catalog/aclchk.c:2756 +#: catalog/aclchk.c:2759 #, c-format msgid "permission denied for language %s" msgstr "წვდომა აკრძალულია ენაზე: \"%s\"" -#: catalog/aclchk.c:2759 +#: catalog/aclchk.c:2762 #, c-format msgid "permission denied for large object %s" msgstr "წვდომა აკრძალულია დიდ ობიექტზე: \"%s\"" -#: catalog/aclchk.c:2762 +#: catalog/aclchk.c:2765 #, c-format msgid "permission denied for materialized view %s" msgstr "წვდომა აკრძალულია მატერიალიზებულ ხედზე: \"%s\"" -#: catalog/aclchk.c:2765 +#: catalog/aclchk.c:2768 #, c-format msgid "permission denied for operator class %s" msgstr "წვდომა აკრძალულია ოპერატორის კლასზე: \"%s\"" -#: catalog/aclchk.c:2768 +#: catalog/aclchk.c:2771 #, c-format msgid "permission denied for operator %s" msgstr "წვდომა აკრძალულია ოპერატორზე: \"%s\"" -#: catalog/aclchk.c:2771 +#: catalog/aclchk.c:2774 #, c-format msgid "permission denied for operator family %s" msgstr "წვდომა აკრძალულია ოპერატორის ოჯახზე: \"%s\"" -#: catalog/aclchk.c:2774 +#: catalog/aclchk.c:2777 #, c-format msgid "permission denied for parameter %s" msgstr "წვდომა აკრძალულია პარამეტრზე: \"%s\"" -#: catalog/aclchk.c:2777 +#: catalog/aclchk.c:2780 #, c-format msgid "permission denied for policy %s" msgstr "წვდომა აკრძალულია წესზე: \"%s\"" -#: catalog/aclchk.c:2780 +#: catalog/aclchk.c:2783 #, c-format msgid "permission denied for procedure %s" msgstr "წვდომა აკრძალულია პროცედურაზე: \"%s\"" -#: catalog/aclchk.c:2783 +#: catalog/aclchk.c:2786 #, c-format msgid "permission denied for publication %s" msgstr "წვდომა აკრძალულია პუბლიკაციაზე: \"%s\"" -#: catalog/aclchk.c:2786 +#: catalog/aclchk.c:2789 #, c-format msgid "permission denied for routine %s" msgstr "წვდომა აკრძალულია ქვეპროგრამაზე: \"%s\"" -#: catalog/aclchk.c:2789 +#: catalog/aclchk.c:2792 #, c-format msgid "permission denied for schema %s" msgstr "წვდომა აკრძალულია სქემაზე: \"%s\"" -#: catalog/aclchk.c:2792 commands/sequence.c:647 commands/sequence.c:873 commands/sequence.c:915 commands/sequence.c:956 commands/sequence.c:1743 commands/sequence.c:1789 +#: catalog/aclchk.c:2795 commands/sequence.c:654 commands/sequence.c:880 commands/sequence.c:922 commands/sequence.c:963 commands/sequence.c:1753 commands/sequence.c:1799 #, c-format msgid "permission denied for sequence %s" msgstr "წვდომა აკრძალულია მიმდევრობაზე: \"%s\"" -#: catalog/aclchk.c:2795 +#: catalog/aclchk.c:2798 #, c-format msgid "permission denied for statistics object %s" msgstr "წვდომა აკრძალულია სტატისტიკის ობიექტზე: \"%s\"" -#: catalog/aclchk.c:2798 +#: catalog/aclchk.c:2801 #, c-format msgid "permission denied for subscription %s" msgstr "წვდომა აკრძალულია გამოწერაზე: \"%s\"" -#: catalog/aclchk.c:2801 +#: catalog/aclchk.c:2804 #, c-format msgid "permission denied for table %s" msgstr "წვდომა აკრძალულია ცხრილზე: \"%s\"" -#: catalog/aclchk.c:2804 +#: catalog/aclchk.c:2807 #, c-format msgid "permission denied for tablespace %s" msgstr "წვდომა აკრძალულია ცხრილების სივრცეზე: \"%s\"" -#: catalog/aclchk.c:2807 +#: catalog/aclchk.c:2810 #, c-format msgid "permission denied for text search configuration %s" msgstr "წვდომა აკრძალულია ტექსტის ძებნის კონფიგურაციაზე: \"%s\"" -#: catalog/aclchk.c:2810 +#: catalog/aclchk.c:2813 #, c-format msgid "permission denied for text search dictionary %s" msgstr "წვდომა აკრძალულია ტექსტის ძებნის ლექსიკონზე: \"%s\"" -#: catalog/aclchk.c:2813 +#: catalog/aclchk.c:2816 #, c-format msgid "permission denied for type %s" msgstr "წვდომა აკრძალულია ტიპტზე: \"%s\"" -#: catalog/aclchk.c:2816 +#: catalog/aclchk.c:2819 #, c-format msgid "permission denied for view %s" msgstr "წვდომა აკრძალულია ხედზე: \"%s\"" -#: catalog/aclchk.c:2852 +#: catalog/aclchk.c:2855 #, c-format msgid "must be owner of aggregate %s" msgstr "უნდა ბრძანდებოდეთ აგრეგატის მფლობელი: %s" -#: catalog/aclchk.c:2855 +#: catalog/aclchk.c:2858 #, c-format msgid "must be owner of collation %s" msgstr "უნდა ბრძანდებოდეთ კოლაციის მფლობელი: %s" -#: catalog/aclchk.c:2858 +#: catalog/aclchk.c:2861 #, c-format msgid "must be owner of conversion %s" msgstr "უნდა ბრძანდებოდეთ გადაყვანის მფლობელი: %s" -#: catalog/aclchk.c:2861 +#: catalog/aclchk.c:2864 #, c-format msgid "must be owner of database %s" msgstr "უნდა ბრძანდებოდეთ ბაზის მფლობელი: %s" -#: catalog/aclchk.c:2864 +#: catalog/aclchk.c:2867 #, c-format msgid "must be owner of domain %s" msgstr "უნდა ბრძანდებოდეთ დომენის მფლობელი: %s" -#: catalog/aclchk.c:2867 +#: catalog/aclchk.c:2870 #, c-format msgid "must be owner of event trigger %s" msgstr "უნდა ბრძანდებოდეთ მოვლენის ტრიგერის მფლობელი: %s" -#: catalog/aclchk.c:2870 +#: catalog/aclchk.c:2873 #, c-format msgid "must be owner of extension %s" msgstr "უნდა ბრძანდებოდეთ გაფართოების მფლობელი: %s" -#: catalog/aclchk.c:2873 +#: catalog/aclchk.c:2876 #, c-format msgid "must be owner of foreign-data wrapper %s" msgstr "უნდა ბრძანდებოდეთ გარე ინფორმაციის გადამტანის მფლობელი: %s" -#: catalog/aclchk.c:2876 +#: catalog/aclchk.c:2879 #, c-format msgid "must be owner of foreign server %s" msgstr "უნდა ბრძანდებოდეთ გარე სერვერის მფლობელი: %s" -#: catalog/aclchk.c:2879 +#: catalog/aclchk.c:2882 #, c-format msgid "must be owner of foreign table %s" msgstr "უნდა ბრძანდებოდეთ გარე ცხრილის მფლობელი: %s" -#: catalog/aclchk.c:2882 +#: catalog/aclchk.c:2885 #, c-format msgid "must be owner of function %s" msgstr "უნდა ბრძანდებოდეთ ფუნქციის მფლობელი: %s" -#: catalog/aclchk.c:2885 +#: catalog/aclchk.c:2888 #, c-format msgid "must be owner of index %s" msgstr "უნდა ბრძანდებოდეთ ინდექსის მფლობელი: %s" -#: catalog/aclchk.c:2888 +#: catalog/aclchk.c:2891 #, c-format msgid "must be owner of language %s" msgstr "უნდა ბრძანდებოდეთ ენის მფლობელი: %s" -#: catalog/aclchk.c:2891 +#: catalog/aclchk.c:2894 #, c-format msgid "must be owner of large object %s" msgstr "უნდა ბრძანდებოდეთ დიდი ობიექტის მფლობელი: %s" -#: catalog/aclchk.c:2894 +#: catalog/aclchk.c:2897 #, c-format msgid "must be owner of materialized view %s" msgstr "უნდა ბრძანდებოდეთ მატერიალიზებული ხედის მფლობელი: %s" -#: catalog/aclchk.c:2897 +#: catalog/aclchk.c:2900 #, c-format msgid "must be owner of operator class %s" msgstr "უნდა ბრძანდებოდეთ ოპერატორის კლასის მფლობელი: %s" -#: catalog/aclchk.c:2900 +#: catalog/aclchk.c:2903 #, c-format msgid "must be owner of operator %s" msgstr "უნდა ბრძანდებოდეთ ოპერატორის მფლობელი: %s" -#: catalog/aclchk.c:2903 +#: catalog/aclchk.c:2906 #, c-format msgid "must be owner of operator family %s" msgstr "უნდა ბრძანდებოდეთ ოპერატორის ოჯახის მფლობელი: %s" -#: catalog/aclchk.c:2906 +#: catalog/aclchk.c:2909 #, c-format msgid "must be owner of procedure %s" msgstr "უნდა ბრძანდებოდეთ პროცედურის მფლობელი: %s" -#: catalog/aclchk.c:2909 +#: catalog/aclchk.c:2912 #, c-format msgid "must be owner of publication %s" msgstr "უნდა ბრძანდებოდეთ პუბლიკაციისმფლობელი: %s" -#: catalog/aclchk.c:2912 +#: catalog/aclchk.c:2915 #, c-format msgid "must be owner of routine %s" msgstr "უნდა ბრძანდებოდეთ ქვეპროგრამის მფლობელი: %s" -#: catalog/aclchk.c:2915 +#: catalog/aclchk.c:2918 #, c-format msgid "must be owner of sequence %s" msgstr "უნდა ბრძანდებოდეთ მიმდევრობის მფლობელი: %s" -#: catalog/aclchk.c:2918 +#: catalog/aclchk.c:2921 #, c-format msgid "must be owner of subscription %s" msgstr "უნდა ბრძანდებოდეთ გამოწერის მფლობელი: %s" -#: catalog/aclchk.c:2921 +#: catalog/aclchk.c:2924 #, c-format msgid "must be owner of table %s" msgstr "უნდა ბრძანდებოდეთ ცხრილის მფლობელი: %s" -#: catalog/aclchk.c:2924 +#: catalog/aclchk.c:2927 #, c-format msgid "must be owner of type %s" msgstr "უნდა ბრძანდებოდეთ ტიპის მფლობელი: %s" -#: catalog/aclchk.c:2927 +#: catalog/aclchk.c:2930 #, c-format msgid "must be owner of view %s" msgstr "უნდა ბრძანდებოდეთ ხედის მფლობელი: %s" -#: catalog/aclchk.c:2930 +#: catalog/aclchk.c:2933 #, c-format msgid "must be owner of schema %s" msgstr "უნდა ბრძანდებოდეთ სქემის მფლობელი: %s" -#: catalog/aclchk.c:2933 +#: catalog/aclchk.c:2936 #, c-format msgid "must be owner of statistics object %s" msgstr "უნდა ბრძანდებოდეთ სტატისტიკის ობიექტის მფლობელი: %s" -#: catalog/aclchk.c:2936 +#: catalog/aclchk.c:2939 #, c-format msgid "must be owner of tablespace %s" msgstr "უნდა ბრძანდებოდეთ ცხრილების სივრცის მფლობელი: %s" -#: catalog/aclchk.c:2939 +#: catalog/aclchk.c:2942 #, c-format msgid "must be owner of text search configuration %s" msgstr "უნდა ბრძანდებოდეთ ტექსტის ძებნის კონფიგურაციის მფლობელი: %s" -#: catalog/aclchk.c:2942 +#: catalog/aclchk.c:2945 #, c-format msgid "must be owner of text search dictionary %s" msgstr "უნდა ბრძანდებოდეთ ტექსტის ძებნის ლექსიკონის მფლობელი: %s" -#: catalog/aclchk.c:2956 +#: catalog/aclchk.c:2959 #, c-format msgid "must be owner of relation %s" msgstr "უნდა ბრძანდებოდეთ ურთიერთობის მფლობელი: %s" -#: catalog/aclchk.c:3002 +#: catalog/aclchk.c:3005 #, c-format msgid "permission denied for column \"%s\" of relation \"%s\"" msgstr "რელაციის (%2$s) სვეტზე (%1$s) წვდომა აკრძალულია" -#: catalog/aclchk.c:3159 catalog/aclchk.c:4167 catalog/aclchk.c:4198 +#: catalog/aclchk.c:3162 catalog/aclchk.c:4170 catalog/aclchk.c:4201 #, c-format msgid "%s with OID %u does not exist" msgstr "%s OID-ით %u არ არსებობს" -#: catalog/aclchk.c:3242 catalog/aclchk.c:3261 +#: catalog/aclchk.c:3245 catalog/aclchk.c:3264 #, c-format msgid "attribute %d of relation with OID %u does not exist" msgstr "ურთერთობის (OID-ით %2$u) ატრიბუტი არ არსებობს: %1$d" -#: catalog/aclchk.c:3299 catalog/aclchk.c:3362 catalog/aclchk.c:4001 +#: catalog/aclchk.c:3302 catalog/aclchk.c:3365 catalog/aclchk.c:4004 #, c-format msgid "relation with OID %u does not exist" msgstr "ურთიერთობა OID-ით %u არ არსებობს" -#: catalog/aclchk.c:3547 +#: catalog/aclchk.c:3550 #, c-format msgid "parameter ACL with OID %u does not exist" msgstr "პარამეტრის ACL OID-ით %u არ არსებობს" -#: catalog/aclchk.c:3720 commands/collationcmds.c:853 commands/publicationcmds.c:1739 +#: catalog/aclchk.c:3723 commands/collationcmds.c:853 commands/publicationcmds.c:1739 #, c-format msgid "schema with OID %u does not exist" msgstr "სქემა OID-ით %u არ არსებობს" -#: catalog/aclchk.c:3794 catalog/aclchk.c:3821 catalog/aclchk.c:3850 utils/cache/typcache.c:392 utils/cache/typcache.c:447 +#: catalog/aclchk.c:3797 catalog/aclchk.c:3824 catalog/aclchk.c:3853 utils/cache/typcache.c:392 utils/cache/typcache.c:447 #, c-format msgid "type with OID %u does not exist" msgstr "ტიპი OID-ით %u არ არსებობს" -#: catalog/catalog.c:447 +#: catalog/catalog.c:477 #, c-format msgid "still searching for an unused OID in relation \"%s\"" msgstr "ურთიერთობაში \"%s\" გამოუყენებელი OID-ების ძებნა ჯერ კიდევ მიმდინარეობს" -#: catalog/catalog.c:449 +#: catalog/catalog.c:479 #, c-format msgid "OID candidates have been checked %llu time, but no unused OID has been found yet." msgid_plural "OID candidates have been checked %llu times, but no unused OID has been found yet." msgstr[0] "OID-ის კანდიდატები %llu-ჯერ შემოწმდა, მაგრამ გამოუყენებელი OID-ი ნაპოვნი არაა." msgstr[1] "OID-ის კანდიდატები %llu-ჯერ შემოწმდა, მაგრამ გამოუყენებელი OID-ი ნაპოვნი არაა." -#: catalog/catalog.c:474 +#: catalog/catalog.c:504 #, c-format msgid "new OID has been assigned in relation \"%s\" after %llu retry" msgid_plural "new OID has been assigned in relation \"%s\" after %llu retries" msgstr[0] "ახალი OID მინიჭებულია ურთიერთობაში \"%s\" %llu ცდის შემდეგ" msgstr[1] "ახალი OID მინიჭებულია ურთიერთობაში \"%s\" %llu ცდის შემდეგ" -#: catalog/catalog.c:607 catalog/catalog.c:674 +#: catalog/catalog.c:637 catalog/catalog.c:704 #, c-format msgid "must be superuser to call %s()" msgstr "%s()-ის გამოსაძახებლად ზემომხმარებელი უნდა იყოთ" -#: catalog/catalog.c:616 +#: catalog/catalog.c:646 #, c-format msgid "pg_nextoid() can only be used on system catalogs" msgstr "pg_nextoid() მხოლოდ სისტემურ კატალოგებზე შეიძლება იყოს გამოყენებული" -#: catalog/catalog.c:621 parser/parse_utilcmd.c:2245 +#: catalog/catalog.c:651 parser/parse_utilcmd.c:2270 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "ინდექსი %s ცხრილს \"%s\" არ მიეკუთვნება" -#: catalog/catalog.c:638 +#: catalog/catalog.c:668 #, c-format msgid "column \"%s\" is not of type oid" msgstr "სვეტი \"%s\" oild-ის ტიპი არაა" -#: catalog/catalog.c:645 +#: catalog/catalog.c:675 #, c-format msgid "index \"%s\" is not the index for column \"%s\"" msgstr "ინდექსი \"%s\" სვეტის \"%s\" ინდექსი არაა" -#: catalog/dependency.c:497 catalog/pg_shdepend.c:695 +#: catalog/dependency.c:497 catalog/pg_shdepend.c:703 #, c-format msgid "cannot drop %s because it is required by the database system" msgstr "%s-ის წაშლა შეუძლებელია. საჭიროა ბაზის სისტემისთვის" @@ -4456,7 +4455,7 @@ msgid "drop cascades to %s" msgstr "წაშლა %s-ზეც ვრცელდება" -#: catalog/dependency.c:1138 catalog/pg_shdepend.c:860 +#: catalog/dependency.c:1138 catalog/pg_shdepend.c:868 #, c-format msgid "" "\n" @@ -4476,8 +4475,8 @@ msgid "cannot drop %s because other objects depend on it" msgstr "%s-ის წაშლა შეუძლებელია, რადგან არის ობიექტები, რომლებიც მას ეყრდნობა" -#: catalog/dependency.c:1153 catalog/dependency.c:1160 catalog/dependency.c:1171 commands/tablecmds.c:1447 commands/tablecmds.c:14989 commands/tablespace.c:460 commands/user.c:1302 commands/vacuum.c:211 commands/view.c:441 libpq/auth.c:324 replication/logical/applyparallelworker.c:1041 replication/syncrep.c:1011 storage/lmgr/deadlock.c:1134 storage/lmgr/proc.c:1427 utils/misc/guc.c:3169 utils/misc/guc.c:3210 utils/misc/guc.c:3285 utils/misc/guc.c:6781 -#: utils/misc/guc.c:6815 utils/misc/guc.c:6849 utils/misc/guc.c:6892 utils/misc/guc.c:6934 +#: catalog/dependency.c:1153 catalog/dependency.c:1160 catalog/dependency.c:1171 commands/tablecmds.c:1459 commands/tablecmds.c:15088 commands/tablespace.c:460 commands/user.c:1302 commands/vacuum.c:211 commands/view.c:441 executor/execExprInterp.c:4655 executor/execExprInterp.c:4663 libpq/auth.c:324 replication/logical/applyparallelworker.c:1041 replication/syncrep.c:1011 storage/lmgr/deadlock.c:1134 storage/lmgr/proc.c:1432 utils/misc/guc.c:3169 +#: utils/misc/guc.c:3210 utils/misc/guc.c:3285 utils/misc/guc.c:6825 utils/misc/guc.c:6859 utils/misc/guc.c:6893 utils/misc/guc.c:6936 utils/misc/guc.c:6978 #, c-format msgid "%s" msgstr "%s" @@ -4499,12 +4498,12 @@ msgstr[0] "წაშლა გავრცელდება %d სხვა ობიექტზე" msgstr[1] "წაშლა გავრცელდება %d სხვა ობიექტზე" -#: catalog/dependency.c:1848 +#: catalog/dependency.c:1850 #, c-format msgid "constant of the type %s cannot be used here" msgstr "%s ტიპის კონსტანტის აქ გამოყენება არ შეიძლება" -#: catalog/dependency.c:2373 parser/parse_relation.c:3407 parser/parse_relation.c:3417 +#: catalog/dependency.c:2375 parser/parse_relation.c:3407 parser/parse_relation.c:3417 #, c-format msgid "column %d of relation \"%s\" does not exist" msgstr "სვეტი \"%d\" ურთიერთობაში %s არ არსებობს" @@ -4519,12 +4518,12 @@ msgid "System catalog modifications are currently disallowed." msgstr "სისტემური კატალოგების შეცვლა ამჟამად აკრძალულია." -#: catalog/heap.c:467 commands/tablecmds.c:2483 commands/tablecmds.c:2905 commands/tablecmds.c:7171 +#: catalog/heap.c:467 commands/tablecmds.c:2495 commands/tablecmds.c:2917 commands/tablecmds.c:7163 #, c-format msgid "tables can have at most %d columns" msgstr "ცხრილებს მაქსიმუმ %d სვეტი შეიძლება ჰქონდეს" -#: catalog/heap.c:485 commands/tablecmds.c:7440 +#: catalog/heap.c:485 commands/tablecmds.c:7432 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "სვეტის სახელი კონფლიქტშია სისტემური სვეტის სახელთან: \"%s\"" @@ -4556,12 +4555,12 @@ msgid "no collation was derived for partition key column %s with collatable type %s" msgstr "" -#: catalog/heap.c:676 commands/createas.c:198 commands/createas.c:507 +#: catalog/heap.c:676 commands/createas.c:198 commands/createas.c:505 #, c-format msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "" -#: catalog/heap.c:1161 catalog/index.c:899 commands/createas.c:403 commands/tablecmds.c:4142 commands/tablecmds.c:20463 commands/tablecmds.c:20725 +#: catalog/heap.c:1161 catalog/index.c:899 commands/createas.c:401 commands/tablecmds.c:4171 #, c-format msgid "relation \"%s\" already exists" msgstr "ურთიერთობა \"%s\" უკვე არსებობს" @@ -4591,112 +4590,112 @@ msgid "relfilenumber value not set when in binary upgrade mode" msgstr "relfilenumber-ის მნიშვნელობა ბინარული განახლების დროს დაყენებული არაა" -#: catalog/heap.c:2121 +#: catalog/heap.c:2130 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "დაყოფილი ცხრილს (\"%s\") NO INHERIT შეზღუდვას ვერ დაამატებთ" -#: catalog/heap.c:2393 +#: catalog/heap.c:2402 #, c-format msgid "check constraint \"%s\" already exists" msgstr "შეზღუდვის შემმოწმებელი \"%s\" უკვე არსებობს" -#: catalog/heap.c:2565 catalog/index.c:913 catalog/pg_constraint.c:724 commands/tablecmds.c:9364 +#: catalog/heap.c:2574 catalog/index.c:913 catalog/pg_constraint.c:724 commands/tablecmds.c:9356 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "შეზღუდვა \"%s\" ურთიერთობისთვის \"%s\" უკვე არსებობს" -#: catalog/heap.c:2572 +#: catalog/heap.c:2581 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "შეზღუდვა \"%s\" კონფლიქტშია არა-მემკვიდრეობით მიღებულ შეზღუდვასთან ურთიერთობაზე \"%s\"" -#: catalog/heap.c:2583 +#: catalog/heap.c:2592 #, c-format msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "შეზღუდვა \"%s\" კონფლიქტშია მემკვიდრეობით მიღებულ შეზღუდვასთან ურთიერთობაზე \"%s\"" -#: catalog/heap.c:2593 +#: catalog/heap.c:2602 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" msgstr "შეზღუდვა \"%s\" კონფლიქტშია შეზღუდვასთან NOT VALID ურთიერთობაზე \"%s\"" -#: catalog/heap.c:2598 +#: catalog/heap.c:2607 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "შეზღუდვის (\"%s\") შერწყმა მემკვიდრეობითი აღწერით" -#: catalog/heap.c:2624 catalog/pg_constraint.c:853 commands/tablecmds.c:3062 commands/tablecmds.c:3365 commands/tablecmds.c:7097 commands/tablecmds.c:15807 commands/tablecmds.c:15938 +#: catalog/heap.c:2633 catalog/pg_constraint.c:853 commands/tablecmds.c:3074 commands/tablecmds.c:3377 commands/tablecmds.c:7089 commands/tablecmds.c:15907 commands/tablecmds.c:16038 #, c-format msgid "too many inheritance parents" msgstr "მეტისმეტად ბევრი მემკვიდრეობის მშობლები" -#: catalog/heap.c:2708 +#: catalog/heap.c:2717 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "სვეტის გენერაციის გამოსახულებაში გენერირებული სვეტის (%s) გამოყენება შეუძლებელია" -#: catalog/heap.c:2710 +#: catalog/heap.c:2719 #, c-format msgid "A generated column cannot reference another generated column." msgstr "გენერირებული სვეტი სხვა გენერირებული სვეტის მიმართვა ვერ იქნება." -#: catalog/heap.c:2716 +#: catalog/heap.c:2725 #, c-format msgid "cannot use whole-row variable in column generation expression" msgstr "" -#: catalog/heap.c:2717 +#: catalog/heap.c:2726 #, c-format msgid "This would cause the generated column to depend on its own value." msgstr "ამან შეიძლება დაგენერირებული სვეტის თავის საკუთარ მნიშვნელობაზე დამოკიდებულება გამოიწვიოს." -#: catalog/heap.c:2772 +#: catalog/heap.c:2781 #, c-format msgid "generation expression is not immutable" msgstr "თაობის გამოსახულება უცვლელი არაა" -#: catalog/heap.c:2800 rewrite/rewriteHandler.c:1281 +#: catalog/heap.c:2809 rewrite/rewriteHandler.c:1276 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "სვეტის \"%s\" ტიპია %s, მაგრამ ნაგულისხმევი გამოსახულების ტიპია %s" -#: catalog/heap.c:2805 commands/prepare.c:331 parser/analyze.c:2758 parser/parse_target.c:592 parser/parse_target.c:882 parser/parse_target.c:892 rewrite/rewriteHandler.c:1286 +#: catalog/heap.c:2814 commands/prepare.c:331 parser/analyze.c:2758 parser/parse_target.c:592 parser/parse_target.c:882 parser/parse_target.c:892 rewrite/rewriteHandler.c:1281 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "საჭიროა გამოსახულების გარდაქმნა ან გადაყვანა." -#: catalog/heap.c:2852 +#: catalog/heap.c:2861 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "შემოწმების შეზღუდვაში მხოლოდ %s ცხრილზე მიმართვა შეიძლება" -#: catalog/heap.c:3158 +#: catalog/heap.c:3167 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "\"ON COMMIT\"-ისა და გარე გასაღების წყვილი მხარდაუჭერელია" -#: catalog/heap.c:3159 +#: catalog/heap.c:3168 #, c-format msgid "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT setting." msgstr "ცხრილი \"%s\", მითითება \"%s\", მაგრამ მათ იგივე ON COMMIT პარამეტრი არ აქვთ." -#: catalog/heap.c:3164 +#: catalog/heap.c:3173 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "გარე გასაღების შეზღუდვაში მიმართული ცხრილის შემცველობის დაცარიელება შეუძლებელია" -#: catalog/heap.c:3165 +#: catalog/heap.c:3174 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "ცხრილი \"%s\" მიუთითებს \"%s\"." -#: catalog/heap.c:3167 +#: catalog/heap.c:3176 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "წაშალეთ შემცველობა ცხრილისთვის \"%s\" პარალელურად, ან გამოიყენეთ TRUNCATE ... CASCADE." -#: catalog/index.c:219 parser/parse_utilcmd.c:2151 +#: catalog/index.c:219 parser/parse_utilcmd.c:2176 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "ცხრილისთვის \"%s\" ერთზე მეტი ძირითადი გასაღები დაუშვებელია" @@ -4716,7 +4715,7 @@ msgid "primary key column \"%s\" is not marked NOT NULL" msgstr "ძირითადის გასაღების ტიპის სვეტი \"%s\" არაა აღწერილი, როგორც NOT NULL" -#: catalog/index.c:798 catalog/index.c:1914 +#: catalog/index.c:798 catalog/index.c:1915 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "სისტემური კატალოგების ცხრილებზე მომხმარებლის მიერ აღწერილი ინდექსების დადება შეუძლებელია" @@ -4731,7 +4730,7 @@ msgid "concurrent index creation on system catalog tables is not supported" msgstr "სისტემური კატალოგების ცხრილებზე ინდექსების პარალელური შექმნა მხარდაუჭერელია" -#: catalog/index.c:862 catalog/index.c:1330 +#: catalog/index.c:862 catalog/index.c:1331 #, c-format msgid "concurrent index creation for exclusion constraints is not supported" msgstr "პარალელური ინდექსის შექმნა გამორიცხვის შეზღუდვებისთვის მხარდაჭერილი არაა" @@ -4741,7 +4740,7 @@ msgid "shared indexes cannot be created after initdb" msgstr "გაზიარებული ინდექსების შექმნა შეუძლებელია initdb-ის შემდეგ" -#: catalog/index.c:891 commands/createas.c:418 commands/sequence.c:159 parser/parse_utilcmd.c:212 +#: catalog/index.c:891 commands/createas.c:416 commands/sequence.c:159 parser/parse_utilcmd.c:209 #, c-format msgid "relation \"%s\" already exists, skipping" msgstr "შეერთება \"%s\" უკვე არსებობს, გამოტოვება" @@ -4751,187 +4750,187 @@ msgid "pg_class index OID value not set when in binary upgrade mode" msgstr "ბინარული განახლების რეჟიმში pg_class-ის ინდექსის OID-ის მნიშვნელობა დაყენებული არაა" -#: catalog/index.c:951 utils/cache/relcache.c:3787 +#: catalog/index.c:951 utils/cache/relcache.c:3791 #, c-format msgid "index relfilenumber value not set when in binary upgrade mode" msgstr "index relfilenumber-ის მნიშვნელობა ბინარული განახლების დროს დაყენებული არაა" -#: catalog/index.c:2213 +#: catalog/index.c:2214 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY ტრანზაქციის პირველი ქმედება უნდა იყოს" -#: catalog/index.c:3669 +#: catalog/index.c:3668 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "სხვა სესიების დროებითი ცხრილების რეინდექსი შეუძლებელია" -#: catalog/index.c:3680 commands/indexcmds.c:3648 +#: catalog/index.c:3679 commands/indexcmds.c:3626 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "\"TOAST\" ცხრილზე არასწორი ინდექსის რეინდექსი შეუძლებელია" -#: catalog/index.c:3696 commands/indexcmds.c:3526 commands/indexcmds.c:3672 commands/tablecmds.c:3557 +#: catalog/index.c:3695 commands/indexcmds.c:3504 commands/indexcmds.c:3650 commands/tablecmds.c:3581 #, c-format msgid "cannot move system relation \"%s\"" msgstr "სისტემური ურთიერთობის გაადაადგილება არ შეიძლება: \"%s\"" -#: catalog/index.c:3833 +#: catalog/index.c:3832 #, c-format msgid "index \"%s\" was reindexed" msgstr "\"%s\"-ის რეინდექსი დასრულდა" -#: catalog/index.c:3999 +#: catalog/index.c:3998 #, c-format msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" msgstr "'TOAST' ცხრილზე მდებარე არასწორი ინდექსის \"%s.%s\" რეინდექსი შეუძლებელია. გამოტოვება" -#: catalog/namespace.c:447 catalog/namespace.c:651 catalog/namespace.c:743 commands/trigger.c:5729 +#: catalog/namespace.c:462 catalog/namespace.c:666 catalog/namespace.c:758 commands/trigger.c:5729 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "ბაზებს შორის ბმულები განხორციელებული არაა: \"%s.%s.%s\"" -#: catalog/namespace.c:504 +#: catalog/namespace.c:519 #, c-format msgid "temporary tables cannot specify a schema name" msgstr "დროებით ცხრილებს სქემის სახელი არ მიეთითებათ" -#: catalog/namespace.c:585 +#: catalog/namespace.c:600 #, c-format msgid "could not obtain lock on relation \"%s.%s\"" msgstr "ბლოკის მიღების შეცდომა ურთიერთობაზე %s.%s\"" -#: catalog/namespace.c:590 commands/lockcmds.c:143 commands/lockcmds.c:223 +#: catalog/namespace.c:605 commands/lockcmds.c:143 commands/lockcmds.c:223 #, c-format msgid "could not obtain lock on relation \"%s\"" msgstr "ბლოკის მიღების შეცდომა ურთიერთობაზე %s\"" -#: catalog/namespace.c:618 parser/parse_relation.c:1430 +#: catalog/namespace.c:633 parser/parse_relation.c:1430 #, c-format msgid "relation \"%s.%s\" does not exist" msgstr "ურთიერთობა \"%s.%s\" არ არსებობს" -#: catalog/namespace.c:623 parser/parse_relation.c:1443 parser/parse_relation.c:1451 utils/adt/regproc.c:913 +#: catalog/namespace.c:638 parser/parse_relation.c:1443 parser/parse_relation.c:1451 utils/adt/regproc.c:913 #, c-format msgid "relation \"%s\" does not exist" msgstr "ურთიერთობა \"%s\" არ არსებობს" -#: catalog/namespace.c:689 catalog/namespace.c:3507 commands/extension.c:1607 commands/extension.c:1613 +#: catalog/namespace.c:704 catalog/namespace.c:3522 commands/extension.c:1607 commands/extension.c:1613 #, c-format msgid "no schema has been selected to create in" msgstr "შიგნით შესაქმნელი სქემა მონიშნული არაა" -#: catalog/namespace.c:841 catalog/namespace.c:854 +#: catalog/namespace.c:856 catalog/namespace.c:869 #, c-format msgid "cannot create relations in temporary schemas of other sessions" msgstr "სხვა სესიების დროებით სქემებთან ურთიერთობის შექმნა შეუძლებელია" -#: catalog/namespace.c:845 +#: catalog/namespace.c:860 #, c-format msgid "cannot create temporary relation in non-temporary schema" msgstr "დროებითი ურთიერთობების შექმნა არა-დროებით სქემაში შეუძლებელია" -#: catalog/namespace.c:860 +#: catalog/namespace.c:875 #, c-format msgid "only temporary relations may be created in temporary schemas" msgstr "დროებით სქემებში მხოლოდ დროებითი ურთიერთობების შექმნა შეიძლება" -#: catalog/namespace.c:2604 +#: catalog/namespace.c:2619 #, c-format msgid "statistics object \"%s\" does not exist" msgstr "სტატისტიკის ობიექტი \"%s\" არ არსებობს" -#: catalog/namespace.c:2746 +#: catalog/namespace.c:2761 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "ტექსტის ძებნის დამმუშავებელი \"%s\" არ არსებობს" -#: catalog/namespace.c:2891 utils/adt/regproc.c:1459 +#: catalog/namespace.c:2906 utils/adt/regproc.c:1459 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "ტექსტის ძებნის ლექსიკონი \"%s\" არ არსებობს" -#: catalog/namespace.c:3037 +#: catalog/namespace.c:3052 #, c-format msgid "text search template \"%s\" does not exist" msgstr "ტექსტის ძებნის შაბლონი \"%s\" არ არსებობს" -#: catalog/namespace.c:3182 commands/tsearchcmds.c:1168 utils/adt/regproc.c:1349 utils/cache/ts_cache.c:635 +#: catalog/namespace.c:3197 commands/tsearchcmds.c:1168 utils/adt/regproc.c:1349 utils/cache/ts_cache.c:635 #, c-format msgid "text search configuration \"%s\" does not exist" msgstr "ტექსტის ძებნის კონფიგურაცია \"%s\" არ არსებობს" -#: catalog/namespace.c:3314 parser/parse_expr.c:869 parser/parse_target.c:1259 +#: catalog/namespace.c:3329 parser/parse_expr.c:868 parser/parse_target.c:1259 #, c-format msgid "cross-database references are not implemented: %s" msgstr "ბაზებს შორის ბმულები განხორციელებული არაა: %s" -#: catalog/namespace.c:3320 gram.y:19230 gram.y:19270 parser/parse_expr.c:876 parser/parse_target.c:1266 +#: catalog/namespace.c:3335 gram.y:19181 gram.y:19221 parser/parse_expr.c:875 parser/parse_target.c:1266 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "არასწორი სრული სახელი (ძალიან ბევრი წერტილიანი სახელი): %s" -#: catalog/namespace.c:3450 +#: catalog/namespace.c:3465 #, c-format msgid "cannot move objects into or out of temporary schemas" msgstr "ობიექტის დროებითი სქემიდან გამოტანა ან სქემაში შეტანა შეუძლებელია" -#: catalog/namespace.c:3456 +#: catalog/namespace.c:3471 #, c-format msgid "cannot move objects into or out of TOAST schema" msgstr "\"TOAST\" სქემიდან ობიექტს ვერც გამოიტანთ, ვერც შეიტანთ" -#: catalog/namespace.c:3529 commands/schemacmds.c:264 commands/schemacmds.c:344 commands/tablecmds.c:1392 utils/adt/regproc.c:1688 +#: catalog/namespace.c:3544 commands/schemacmds.c:264 commands/schemacmds.c:344 commands/tablecmds.c:1404 utils/adt/regproc.c:1688 #, c-format msgid "schema \"%s\" does not exist" msgstr "სქემა \"%s\" არ არსებობს" -#: catalog/namespace.c:3560 +#: catalog/namespace.c:3575 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "ურთიერთობის არასწორი სახელი (ძალიან ბევრი წერტილიანი სახელი): %s" -#: catalog/namespace.c:4001 utils/adt/regproc.c:1056 +#: catalog/namespace.c:4016 utils/adt/regproc.c:1056 #, c-format msgid "collation \"%s\" for encoding \"%s\" does not exist" msgstr "კოლაცია \"%s\" კოდირებისთვის \"%s\" არ არსებობს" -#: catalog/namespace.c:4056 +#: catalog/namespace.c:4071 #, c-format msgid "conversion \"%s\" does not exist" msgstr "გადაყვანა \"%s\" არ არსებობს" -#: catalog/namespace.c:4397 +#: catalog/namespace.c:4412 #, c-format msgid "permission denied to create temporary tables in database \"%s\"" msgstr "ბაზაში \"%s\" დროებითი ცხრილების შექმნის წვდომა აკრძალულია" -#: catalog/namespace.c:4413 +#: catalog/namespace.c:4428 #, c-format msgid "cannot create temporary tables during recovery" msgstr "აღდგენისას დროებითი ცხრილების შექმნა შეუძლებელია" -#: catalog/namespace.c:4419 +#: catalog/namespace.c:4434 #, c-format msgid "cannot create temporary tables during a parallel operation" msgstr "პარალელური ოპერაციის მიმდინარეობისას დროებითი ცხრილების შექმნა შეუძლებელია" -#: catalog/objectaddress.c:1371 commands/policy.c:93 commands/policy.c:373 commands/tablecmds.c:257 commands/tablecmds.c:299 commands/tablecmds.c:2315 commands/tablecmds.c:12826 parser/parse_utilcmd.c:3249 +#: catalog/objectaddress.c:1371 commands/policy.c:93 commands/policy.c:373 commands/tablecmds.c:257 commands/tablecmds.c:299 commands/tablecmds.c:2327 commands/tablecmds.c:12925 #, c-format msgid "\"%s\" is not a table" msgstr "\"%s\" ცხრილი არაა" -#: catalog/objectaddress.c:1378 commands/tablecmds.c:269 commands/tablecmds.c:17744 commands/view.c:114 +#: catalog/objectaddress.c:1378 commands/tablecmds.c:269 commands/tablecmds.c:17851 commands/view.c:114 #, c-format msgid "\"%s\" is not a view" msgstr "\"%s\" ხედი არაა" -#: catalog/objectaddress.c:1385 commands/matview.c:183 commands/tablecmds.c:275 commands/tablecmds.c:17749 +#: catalog/objectaddress.c:1385 commands/matview.c:199 commands/tablecmds.c:275 commands/tablecmds.c:17856 #, c-format msgid "\"%s\" is not a materialized view" msgstr "\"%s\" არ არის მატერიალიზებული ხედი" -#: catalog/objectaddress.c:1392 commands/tablecmds.c:293 commands/tablecmds.c:17754 +#: catalog/objectaddress.c:1392 commands/tablecmds.c:293 commands/tablecmds.c:17861 #, c-format msgid "\"%s\" is not a foreign table" msgstr "\"%s\" გარე ცხრილი არაა" @@ -4951,7 +4950,7 @@ msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "ურთიერთობის (%2$s) სვეტის (%1$s) ნაგულისხმევი მნიშვნელობა არ არსებობს" -#: catalog/objectaddress.c:1618 commands/functioncmds.c:132 commands/tablecmds.c:285 commands/typecmds.c:278 commands/typecmds.c:3843 parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:801 utils/adt/acl.c:4554 +#: catalog/objectaddress.c:1618 commands/functioncmds.c:132 commands/tablecmds.c:285 commands/typecmds.c:278 commands/typecmds.c:3843 parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:801 utils/adt/acl.c:4560 #, c-format msgid "type \"%s\" does not exist" msgstr "ტიპი \"%s\" არ არსებობს" @@ -4971,7 +4970,7 @@ msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "სერვერზე (%2$s) მომხმარებლის ბმა %1$s-სთვის არ არსებობს" -#: catalog/objectaddress.c:1834 commands/foreigncmds.c:430 commands/foreigncmds.c:993 commands/foreigncmds.c:1356 foreign/foreign.c:703 +#: catalog/objectaddress.c:1834 commands/foreigncmds.c:430 commands/foreigncmds.c:993 commands/foreigncmds.c:1356 foreign/foreign.c:713 #, c-format msgid "server \"%s\" does not exist" msgstr "სერვერი \"%s\" არ არსებობს" @@ -5072,74 +5071,74 @@ msgstr "ობიექტის უცნობი ტიპი: %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2903 +#: catalog/objectaddress.c:2928 #, c-format msgid "column %s of %s" msgstr "სვეტი %s %s-ზე" -#: catalog/objectaddress.c:2918 +#: catalog/objectaddress.c:2943 #, c-format msgid "function %s" msgstr "ფუნქცია %s" -#: catalog/objectaddress.c:2931 +#: catalog/objectaddress.c:2956 #, c-format msgid "type %s" msgstr "ტიპი %s" -#: catalog/objectaddress.c:2968 +#: catalog/objectaddress.c:2993 #, c-format msgid "cast from %s to %s" msgstr "%s-დან %s" -#: catalog/objectaddress.c:3001 +#: catalog/objectaddress.c:3026 #, c-format msgid "collation %s" msgstr "კოლაცია %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3032 +#: catalog/objectaddress.c:3057 #, c-format msgid "constraint %s on %s" msgstr "%s-ის შეზღუდვა %s-ზე" -#: catalog/objectaddress.c:3038 +#: catalog/objectaddress.c:3063 #, c-format msgid "constraint %s" msgstr "შეზღუდვა %s" -#: catalog/objectaddress.c:3070 +#: catalog/objectaddress.c:3095 #, c-format msgid "conversion %s" msgstr "გარდაქმნა: %s" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:3092 +#: catalog/objectaddress.c:3117 #, c-format msgid "default value for %s" msgstr "%s-ის ნაგულისხმევი მნიშვნელობა" -#: catalog/objectaddress.c:3103 +#: catalog/objectaddress.c:3128 #, c-format msgid "language %s" msgstr "ენა %s" -#: catalog/objectaddress.c:3111 +#: catalog/objectaddress.c:3136 #, c-format msgid "large object %u" msgstr "დიდი ობიექტი %u" -#: catalog/objectaddress.c:3124 +#: catalog/objectaddress.c:3149 #, c-format msgid "operator %s" msgstr "ოპერატორი %s" -#: catalog/objectaddress.c:3161 +#: catalog/objectaddress.c:3186 #, c-format msgid "operator class %s for access method %s" msgstr "ოპერატორის კლასის %s წვდომის მეთოდისთვის %s" -#: catalog/objectaddress.c:3189 +#: catalog/objectaddress.c:3214 #, c-format msgid "access method %s" msgstr "წვდომის მეთოდი: %s" @@ -5148,7 +5147,7 @@ #. 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:3238 +#: catalog/objectaddress.c:3269 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "ოპერატორი %d (%s, %s) of %s: %s" @@ -5157,236 +5156,236 @@ #. 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:3295 +#: catalog/objectaddress.c:3334 #, c-format msgid "function %d (%s, %s) of %s: %s" msgstr "ფუნქცია %d (%s, %s) of %s: %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3347 +#: catalog/objectaddress.c:3388 #, c-format msgid "rule %s on %s" msgstr "წესი %s %s-ზე" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3393 +#: catalog/objectaddress.c:3434 #, c-format msgid "trigger %s on %s" msgstr "ტრიგერი %s %s-ზე" -#: catalog/objectaddress.c:3413 +#: catalog/objectaddress.c:3454 #, c-format msgid "schema %s" msgstr "სქემა %s" -#: catalog/objectaddress.c:3441 +#: catalog/objectaddress.c:3482 #, c-format msgid "statistics object %s" msgstr "სტატისტიკის ობიექტი %s" -#: catalog/objectaddress.c:3472 +#: catalog/objectaddress.c:3513 #, c-format msgid "text search parser %s" msgstr "ტექსტის ძებნის დამმუშავებელი \"%s\"" -#: catalog/objectaddress.c:3503 +#: catalog/objectaddress.c:3544 #, c-format msgid "text search dictionary %s" msgstr "ტექსტის ძებნის ლექსიკონი %s" -#: catalog/objectaddress.c:3534 +#: catalog/objectaddress.c:3575 #, c-format msgid "text search template %s" msgstr "ტექსტის ძებნის შაბლონი %s" -#: catalog/objectaddress.c:3565 +#: catalog/objectaddress.c:3606 #, c-format msgid "text search configuration %s" msgstr "ტექსტის ძებნის კონფიგურაცია \"%s\"" -#: catalog/objectaddress.c:3578 +#: catalog/objectaddress.c:3619 #, c-format msgid "role %s" msgstr "როლი %s" -#: catalog/objectaddress.c:3615 catalog/objectaddress.c:5464 +#: catalog/objectaddress.c:3656 catalog/objectaddress.c:5505 #, c-format msgid "membership of role %s in role %s" msgstr "როლის (%s) წევრობა როლში %s" -#: catalog/objectaddress.c:3636 +#: catalog/objectaddress.c:3677 #, c-format msgid "database %s" msgstr "ბაზა: %s" -#: catalog/objectaddress.c:3652 +#: catalog/objectaddress.c:3693 #, c-format msgid "tablespace %s" msgstr "ცხრილების სივრცე %s" -#: catalog/objectaddress.c:3663 +#: catalog/objectaddress.c:3704 #, c-format msgid "foreign-data wrapper %s" msgstr "გარე-მონაცემების გადამტანი %s" -#: catalog/objectaddress.c:3673 +#: catalog/objectaddress.c:3714 #, c-format msgid "server %s" msgstr "სერვერი %s" -#: catalog/objectaddress.c:3706 +#: catalog/objectaddress.c:3747 #, c-format msgid "user mapping for %s on server %s" msgstr "მომხმარებლის ბმა %s-სთვის სერვერზე %s" -#: catalog/objectaddress.c:3758 +#: catalog/objectaddress.c:3799 #, c-format msgid "default privileges on new relations belonging to role %s in schema %s" msgstr "ნაგულისხმევი პრივილეგიები ახალ ურთიერთობებზე, რომელიც ეკუთვნის როლს %s, სქემაში %s" -#: catalog/objectaddress.c:3762 +#: catalog/objectaddress.c:3803 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "ნაგულისხმევი პრივილეგიები ახალ ურთიერთობებზე, რომელიც ეკუთვნის როლს %s" -#: catalog/objectaddress.c:3768 +#: catalog/objectaddress.c:3809 #, c-format msgid "default privileges on new sequences belonging to role %s in schema %s" msgstr "ნაგულისხმევი პრივილეგიები ახალ მიმდევრობებზე, რომელიც ეკუთვნის როლს %s სქემაში %s" -#: catalog/objectaddress.c:3772 +#: catalog/objectaddress.c:3813 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "ნაგულისხმევი პრივილეგიები ახალ მიმდევრობებზე, რომელიც ეკუთვნის როლს %s" -#: catalog/objectaddress.c:3778 +#: catalog/objectaddress.c:3819 #, c-format msgid "default privileges on new functions belonging to role %s in schema %s" msgstr "ნაგულისხმევი პრივილეგიები ახალ ფუნქციებზე, რომელიც ეკუთვნის როლს %s სქემაში %s" -#: catalog/objectaddress.c:3782 +#: catalog/objectaddress.c:3823 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "ნაგულისხმევი პრივილეგიები ახალ ფუნქციებზე, რომელიც ეკუთვნის როლს %s" -#: catalog/objectaddress.c:3788 +#: catalog/objectaddress.c:3829 #, c-format msgid "default privileges on new types belonging to role %s in schema %s" msgstr "ნაგულისხმევი პრივილეგიები ახალ სქემაზე, რომელიც ეკუთვნის როლს %s სქემაში %s" -#: catalog/objectaddress.c:3792 +#: catalog/objectaddress.c:3833 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "ნაგულისხმევი პრივილეგიები ახალ ტიპებზე, რომელიც ეკუთვნის როლს %s" -#: catalog/objectaddress.c:3798 +#: catalog/objectaddress.c:3839 #, c-format msgid "default privileges on new schemas belonging to role %s" msgstr "ნაგულისხმევი პრივილეგიები ახალ სქემაზე, რომელიც ეკუთვნის როლს %s" -#: catalog/objectaddress.c:3805 +#: catalog/objectaddress.c:3846 #, c-format msgid "default privileges belonging to role %s in schema %s" msgstr "სქემაში (%s) როლის (%s) ნაგულისხმევი პრივილეგიები" -#: catalog/objectaddress.c:3809 +#: catalog/objectaddress.c:3850 #, c-format msgid "default privileges belonging to role %s" msgstr "როლის (%s) ნაგულისხმევი პრივილეგიები" -#: catalog/objectaddress.c:3831 +#: catalog/objectaddress.c:3872 #, c-format msgid "extension %s" msgstr "გაფართოებa %s" -#: catalog/objectaddress.c:3848 +#: catalog/objectaddress.c:3889 #, c-format msgid "event trigger %s" msgstr "მოვლენის ტრიგერი %s" -#: catalog/objectaddress.c:3872 +#: catalog/objectaddress.c:3913 #, c-format msgid "parameter %s" msgstr "პარამეტრი %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3915 +#: catalog/objectaddress.c:3956 #, c-format msgid "policy %s on %s" msgstr "წესი %s %s-ზე" -#: catalog/objectaddress.c:3929 +#: catalog/objectaddress.c:3970 #, c-format msgid "publication %s" msgstr "პუბლიკაცია %s" -#: catalog/objectaddress.c:3942 +#: catalog/objectaddress.c:3983 #, c-format msgid "publication of schema %s in publication %s" msgstr "სქემის (%s) პუბლიკაცია პუბლიკაციაში %s" #. translator: first %s is, e.g., "table %s" -#: catalog/objectaddress.c:3973 +#: catalog/objectaddress.c:4014 #, c-format msgid "publication of %s in publication %s" msgstr "%s-ის პუბლიკაცია პუბლიკაციაში %s" -#: catalog/objectaddress.c:3986 +#: catalog/objectaddress.c:4027 #, c-format msgid "subscription %s" msgstr "გამოწერა %s" -#: catalog/objectaddress.c:4007 +#: catalog/objectaddress.c:4048 #, c-format msgid "transform for %s language %s" msgstr "გარდაქმნა %s-სთვის, ენისთვის %s" -#: catalog/objectaddress.c:4076 +#: catalog/objectaddress.c:4117 #, c-format msgid "table %s" msgstr "ცხრილი %s" -#: catalog/objectaddress.c:4081 +#: catalog/objectaddress.c:4122 #, c-format msgid "index %s" msgstr "ინდექსი %s" -#: catalog/objectaddress.c:4085 +#: catalog/objectaddress.c:4126 #, c-format msgid "sequence %s" msgstr "თანმიმდევრობა %s" -#: catalog/objectaddress.c:4089 +#: catalog/objectaddress.c:4130 #, c-format msgid "toast table %s" msgstr "toast ცხრილი \"%s\"" -#: catalog/objectaddress.c:4093 +#: catalog/objectaddress.c:4134 #, c-format msgid "view %s" msgstr "%s-ის ხედი" -#: catalog/objectaddress.c:4097 +#: catalog/objectaddress.c:4138 #, c-format msgid "materialized view %s" msgstr "მატერიალიზებული ხედი %s" -#: catalog/objectaddress.c:4101 +#: catalog/objectaddress.c:4142 #, c-format msgid "composite type %s" msgstr "კომპოზიტის ტიპი \"%s\"" -#: catalog/objectaddress.c:4105 +#: catalog/objectaddress.c:4146 #, c-format msgid "foreign table %s" msgstr "გარე ცხრილი \"%s\"" -#: catalog/objectaddress.c:4110 +#: catalog/objectaddress.c:4151 #, c-format msgid "relation %s" msgstr "ურთიერთობა %s" -#: catalog/objectaddress.c:4151 +#: catalog/objectaddress.c:4192 #, c-format msgid "operator family %s for access method %s" msgstr "ოპერატორის ოჯახი %s წვდომის მეთოდისთვის %s" @@ -5428,7 +5427,7 @@ msgid "return type of inverse transition function %s is not %s" msgstr "ინვერსიული გარდამავალი ფუნქციის (\"%s\") დაბრუნების ტიპი %s არაა" -#: catalog/pg_aggregate.c:352 executor/nodeWindowAgg.c:2992 +#: catalog/pg_aggregate.c:352 executor/nodeWindowAgg.c:2991 #, c-format msgid "strictness of aggregate's forward and inverse transition functions must match" msgstr "" @@ -5694,7 +5693,7 @@ msgid "The partition is being detached concurrently or has an unfinished detach." msgstr "ხდება დანაყოფის პარალელური მოხსნა ან მოხსნა დაუმთავრებელია." -#: catalog/pg_inherits.c:595 commands/tablecmds.c:4778 commands/tablecmds.c:16053 +#: catalog/pg_inherits.c:595 commands/tablecmds.c:4800 commands/tablecmds.c:16153 #, c-format msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation." msgstr "მოხსნის ოპერაციის დასასრულებლად გამოიყენეთ ALTER TABLE ... DETACH PARTITION ... FINALIZE ." @@ -5885,7 +5884,7 @@ msgid "SQL functions cannot have arguments of type %s" msgstr "SQL ფუნქციებს \"%s\" ტიპის არგუმენტები ვერ იქნება" -#: catalog/pg_proc.c:986 executor/functions.c:1467 +#: catalog/pg_proc.c:986 executor/functions.c:1468 #, c-format msgid "SQL function \"%s\"" msgstr "SQL ფუნქცია \"%s\"" @@ -5950,7 +5949,7 @@ msgid "schema \"%s\" is already member of publication \"%s\"" msgstr "სქემა %s პუბლიკაციის (%s) ნაწილს უკვე წარმოადგენს" -#: catalog/pg_shdepend.c:867 +#: catalog/pg_shdepend.c:875 #, c-format msgid "" "\n" @@ -5965,60 +5964,60 @@ "\n" "და ობიექტები %d სხვა ბაზაში (სიისთვის იხილეთ სერვერის ჟურნალი)" -#: catalog/pg_shdepend.c:1214 +#: catalog/pg_shdepend.c:1222 #, c-format msgid "role %u was concurrently dropped" msgstr "როლი %u სხვა პროცესის მიერ წაიშალა" -#: catalog/pg_shdepend.c:1226 +#: catalog/pg_shdepend.c:1234 #, c-format msgid "tablespace %u was concurrently dropped" msgstr "ცხრილების სივრცე %u სხვა პროცესის მიერ წაიშალა" -#: catalog/pg_shdepend.c:1240 +#: catalog/pg_shdepend.c:1248 #, c-format msgid "database %u was concurrently dropped" msgstr "ბაზა %u სხვა პროცესის მიერ წაიშალა" -#: catalog/pg_shdepend.c:1291 +#: catalog/pg_shdepend.c:1299 #, c-format msgid "owner of %s" msgstr "%s -ის მფლობელი" -#: catalog/pg_shdepend.c:1293 +#: catalog/pg_shdepend.c:1301 #, c-format msgid "privileges for %s" msgstr "პრივილეგიები %s-სთვის" -#: catalog/pg_shdepend.c:1295 +#: catalog/pg_shdepend.c:1303 #, c-format msgid "initial privileges for %s" msgstr "საწყისი პრივილეგიები %s-სთვის" -#: catalog/pg_shdepend.c:1297 +#: catalog/pg_shdepend.c:1305 #, c-format msgid "target of %s" msgstr "%s-ის სამიზნე" -#: catalog/pg_shdepend.c:1299 +#: catalog/pg_shdepend.c:1307 #, c-format msgid "tablespace for %s" msgstr "ცხრილების სივრცე %s-სთვის" #. translator: %s will always be "database %s" -#: catalog/pg_shdepend.c:1307 +#: catalog/pg_shdepend.c:1315 #, c-format msgid "%d object in %s" msgid_plural "%d objects in %s" msgstr[0] "%d ობიექტი %s-ში" msgstr[1] "%d ობიექტი %s-ში" -#: catalog/pg_shdepend.c:1371 +#: catalog/pg_shdepend.c:1379 #, c-format msgid "cannot drop objects owned by %s because they are required by the database system" msgstr "%s-ის წაშლა შეუძლებელია. საჭიროა ბაზის სისტემისთვის" -#: catalog/pg_shdepend.c:1545 +#: catalog/pg_shdepend.c:1560 #, c-format msgid "cannot reassign ownership of objects owned by %s because they are required by the database system" msgstr "%s-ის მფლობელობაში მყოფი ობიექტების წვდომების თავიდან მინიჭება შეუძლებელია, რადგან ისინი ბაზის სისტემისთვისაა საჭირო" @@ -6081,7 +6080,7 @@ msgid "You can manually specify a multirange type name using the \"multirange_type_name\" attribute." msgstr "მრავალდიაპაზონიანი ტიპის სახელი ხელით, \"multirange_type_name\" ატრიბუტით უნდა მიუთითოთ." -#: catalog/storage.c:508 storage/buffer/bufmgr.c:1540 +#: catalog/storage.c:533 storage/buffer/bufmgr.c:1540 #, c-format msgid "invalid page in block %u of relation %s" msgstr "ურთიერთობის (%2$s) ბლოკის (%1$u) არასწორ გვერდი" @@ -6176,82 +6175,82 @@ msgid "parameter \"%s\" must be READ_ONLY, SHAREABLE, or READ_WRITE" msgstr "პარამეტრი \"%s\" READ_ONLY, SHAREABLE, ან READ_WRITE უნდა იყოს" -#: commands/alter.c:82 commands/event_trigger.c:191 +#: commands/alter.c:83 commands/event_trigger.c:191 #, c-format msgid "event trigger \"%s\" already exists" msgstr "მოვლენის ტრიგერი უკვე არსებობს: %s" -#: commands/alter.c:85 commands/foreigncmds.c:593 +#: commands/alter.c:86 commands/foreigncmds.c:593 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "გარე მონაცემების გადამტანი უკვე არსებობს: %s" -#: commands/alter.c:88 commands/foreigncmds.c:884 +#: commands/alter.c:89 commands/foreigncmds.c:884 #, c-format msgid "server \"%s\" already exists" msgstr "სერვერი \"%s\" უკვე არსებობს" -#: commands/alter.c:91 commands/proclang.c:131 +#: commands/alter.c:92 commands/proclang.c:131 #, c-format msgid "language \"%s\" already exists" msgstr "ენა \"%s\" უკვე არსებობს" -#: commands/alter.c:94 commands/publicationcmds.c:764 +#: commands/alter.c:95 commands/publicationcmds.c:764 #, c-format msgid "publication \"%s\" already exists" msgstr "პუბლიკაცია \"%s\" უკვე არსებობს" -#: commands/alter.c:97 commands/subscriptioncmds.c:669 +#: commands/alter.c:98 commands/subscriptioncmds.c:669 #, c-format msgid "subscription \"%s\" already exists" msgstr "გამოწერა \"%s\" უკვე არსებობს" -#: commands/alter.c:120 +#: commands/alter.c:121 #, c-format msgid "conversion \"%s\" already exists in schema \"%s\"" msgstr "გადაყვანა \"%s\" უკვე არსებობს სქემაში \"%s\"" -#: commands/alter.c:124 +#: commands/alter.c:125 #, c-format msgid "statistics object \"%s\" already exists in schema \"%s\"" msgstr "სტატისტიკის ობიექტი \"%s\" უკვე არსებობს სქემაში \"%s\"" -#: commands/alter.c:128 +#: commands/alter.c:129 #, c-format msgid "text search parser \"%s\" already exists in schema \"%s\"" msgstr "ტექსტის ძებნის დამმუშავებელი \"%s\" უკვე არსებობს სქემაში \"%s\"" -#: commands/alter.c:132 +#: commands/alter.c:133 #, c-format msgid "text search dictionary \"%s\" already exists in schema \"%s\"" msgstr "ტექსტის ძებნის ლექსიკონი \"%s\" უკვე არსებობს სქემაში \"%s\"" -#: commands/alter.c:136 +#: commands/alter.c:137 #, c-format msgid "text search template \"%s\" already exists in schema \"%s\"" msgstr "ტექსტის ძიების შაბლონი \"%s\" უკვე არსებობს სქემაში \"%s\"" -#: commands/alter.c:140 +#: commands/alter.c:141 #, c-format msgid "text search configuration \"%s\" already exists in schema \"%s\"" msgstr "ტექსტის ძიების კონფიგურაცია \"%s\" უკვე არსებობს სქემაში \"%s\"" -#: commands/alter.c:213 +#: commands/alter.c:214 #, c-format msgid "must be superuser to rename %s" msgstr "%s -ის სახელის გადარქმევისთვის საჭიროა ზემომხმარებლის უფლებები" -#: commands/alter.c:255 commands/subscriptioncmds.c:648 commands/subscriptioncmds.c:1129 commands/subscriptioncmds.c:1212 commands/subscriptioncmds.c:1918 +#: commands/alter.c:256 commands/subscriptioncmds.c:648 commands/subscriptioncmds.c:1129 commands/subscriptioncmds.c:1212 commands/subscriptioncmds.c:1918 #, c-format msgid "password_required=false is superuser-only" msgstr "password_required=false მხოლოდ superuser-only-სთვისაა" -#: commands/alter.c:256 commands/subscriptioncmds.c:649 commands/subscriptioncmds.c:1130 commands/subscriptioncmds.c:1213 commands/subscriptioncmds.c:1919 +#: commands/alter.c:257 commands/subscriptioncmds.c:649 commands/subscriptioncmds.c:1130 commands/subscriptioncmds.c:1213 commands/subscriptioncmds.c:1919 #, c-format msgid "Subscriptions with the password_required option set to false may only be created or modified by the superuser." msgstr "გამოწერები, რომლის password_required პარამეტრი ჭეშმარიტი არაა, მხოლოდ ზემომხმარებლის მიერ შეიძლება შეიქმნას და შეიცვალოს." -#: commands/alter.c:734 +#: commands/alter.c:735 #, c-format msgid "must be superuser to set schema of %s" msgstr "%s-ის სქემის დასაყენებლად საჭიროა ზემომხმარებლის უფლებები" @@ -6271,7 +6270,7 @@ msgid "access method \"%s\" already exists" msgstr "წვდომის მეთოდი \"%s\" უკვე არსებობს" -#: commands/amcmds.c:154 commands/indexcmds.c:221 commands/indexcmds.c:841 commands/opclasscmds.c:374 commands/opclasscmds.c:832 +#: commands/amcmds.c:154 commands/indexcmds.c:224 commands/indexcmds.c:850 commands/opclasscmds.c:375 commands/opclasscmds.c:833 #, c-format msgid "access method \"%s\" does not exist" msgstr "წვდომის მეთოდი \"%s\" არ არსებობს" @@ -6311,22 +6310,22 @@ msgid "column \"%s\" of relation \"%s\" appears more than once" msgstr "ურთიერთობის (%2$s) სვეტი (%1$s) ერთზე მეტჯერ ჩნდება" -#: commands/analyze.c:780 +#: commands/analyze.c:785 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"\n" msgstr "ცხრილის ავტომატური ანალიზი \"%s.%s.%s\"\n" -#: commands/analyze.c:1295 +#: commands/analyze.c:1300 #, c-format msgid "\"%s\": scanned %d of %u pages, containing %.0f live rows and %.0f dead rows; %d rows in sample, %.0f estimated total rows" msgstr "\"%s\": სკანირებული %d გვერდი %u-დან, შეიცავს %.0f ცოცხალ მწკრივს და %.0f მკვდარ მწკრივს; %d მწკრივს სემპლში, %.0f დაახლოებით მწკრივები სულ" -#: commands/analyze.c:1379 +#: commands/analyze.c:1384 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no child tables" msgstr "\"%s.%s\"-ის მემკვიდრეობის ხის ანალიზის გამოტოვება --- მემკვიდრეობითობის ხე შვილ ცხრილებს არ შეიცავს" -#: commands/analyze.c:1477 +#: commands/analyze.c:1482 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no analyzable child tables" msgstr "\"%s.%s\"-ის მემკვიდრეობის ხის ანალიზის გამოტოვება --- მემკვიდრეობითობის ხე გაანალიზებად შვილ ცხრილებს არ შეიცავს" @@ -6386,7 +6385,7 @@ msgid "there is no previously clustered index for table \"%s\"" msgstr "ცხრილისთვის \"%s\" წინასწარ დაკლასტერებული ინდექსი არ არსებობს" -#: commands/cluster.c:191 commands/tablecmds.c:14698 commands/tablecmds.c:16629 +#: commands/cluster.c:191 commands/tablecmds.c:14797 commands/tablecmds.c:16729 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "ინდექსი %s ცხრილისთვის %s არ არსებობს" @@ -6401,7 +6400,7 @@ msgid "cannot vacuum temporary tables of other sessions" msgstr "სხვა სესიების დროებითი ცხრილების მომტვერსასრუტება შეუძლებელია" -#: commands/cluster.c:513 commands/tablecmds.c:16639 +#: commands/cluster.c:513 commands/tablecmds.c:16739 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "\"%s\" არ წარმოადგენს ინდექსს ცხრილისთვის \"%s\"" @@ -6465,7 +6464,7 @@ msgid "collation attribute \"%s\" not recognized" msgstr "კოლაციის უცნობი ატრიბუტი: \"%s\"" -#: commands/collationcmds.c:123 commands/collationcmds.c:129 commands/define.c:388 commands/tablecmds.c:8137 replication/pgoutput/pgoutput.c:307 replication/pgoutput/pgoutput.c:330 replication/pgoutput/pgoutput.c:344 replication/pgoutput/pgoutput.c:354 replication/pgoutput/pgoutput.c:364 replication/pgoutput/pgoutput.c:374 replication/pgoutput/pgoutput.c:386 replication/walsender.c:1146 replication/walsender.c:1168 replication/walsender.c:1178 +#: commands/collationcmds.c:123 commands/collationcmds.c:129 commands/define.c:388 commands/tablecmds.c:8129 replication/pgoutput/pgoutput.c:314 replication/pgoutput/pgoutput.c:337 replication/pgoutput/pgoutput.c:351 replication/pgoutput/pgoutput.c:361 replication/pgoutput/pgoutput.c:371 replication/pgoutput/pgoutput.c:381 replication/pgoutput/pgoutput.c:393 replication/walsender.c:1146 replication/walsender.c:1168 replication/walsender.c:1178 #: replication/walsender.c:1187 replication/walsender.c:1426 #, c-format msgid "conflicting or redundant options" @@ -6533,22 +6532,22 @@ #. translator: %s is an SQL command #. translator: %s is an SQL ALTER command -#: commands/collationcmds.c:447 commands/subscriptioncmds.c:1376 commands/tablecmds.c:7913 commands/tablecmds.c:7923 commands/tablecmds.c:7925 commands/tablecmds.c:14400 commands/tablecmds.c:17777 commands/tablecmds.c:17798 commands/typecmds.c:3787 commands/typecmds.c:3872 commands/typecmds.c:4226 +#: commands/collationcmds.c:447 commands/subscriptioncmds.c:1376 commands/tablecmds.c:7905 commands/tablecmds.c:7915 commands/tablecmds.c:7917 commands/tablecmds.c:14499 commands/tablecmds.c:17884 commands/tablecmds.c:17905 commands/typecmds.c:3787 commands/typecmds.c:3872 commands/typecmds.c:4226 #, c-format msgid "Use %s instead." msgstr "ამის ნაცვლად %s გამოიყენეთ." -#: commands/collationcmds.c:480 commands/dbcommands.c:2550 +#: commands/collationcmds.c:480 commands/dbcommands.c:2566 #, c-format msgid "changing version from %s to %s" msgstr "ვერსიის შეცვლა %s-დან %s-ზე" -#: commands/collationcmds.c:495 commands/dbcommands.c:2563 +#: commands/collationcmds.c:495 commands/dbcommands.c:2579 #, c-format msgid "version has not changed" msgstr "ვერსია არ შეცვლილა" -#: commands/collationcmds.c:528 commands/dbcommands.c:2729 +#: commands/collationcmds.c:528 commands/dbcommands.c:2749 #, c-format msgid "database with OID %u does not exist" msgstr "ბაზა OID-ით %u არ არსებობს" @@ -6568,7 +6567,7 @@ msgid "no usable system locales were found" msgstr "გამოყენებადი სისტემური ენები ნაპოვნი არაა" -#: commands/comment.c:61 commands/dbcommands.c:1663 commands/dbcommands.c:1875 commands/dbcommands.c:1985 commands/dbcommands.c:2183 commands/dbcommands.c:2421 commands/dbcommands.c:2512 commands/dbcommands.c:2633 commands/dbcommands.c:3141 utils/init/postinit.c:1033 utils/init/postinit.c:1097 utils/init/postinit.c:1170 +#: commands/comment.c:61 commands/dbcommands.c:1665 commands/dbcommands.c:1883 commands/dbcommands.c:1995 commands/dbcommands.c:2193 commands/dbcommands.c:2433 commands/dbcommands.c:2526 commands/dbcommands.c:2650 commands/dbcommands.c:3161 utils/init/postinit.c:1034 utils/init/postinit.c:1098 utils/init/postinit.c:1171 #, c-format msgid "database \"%s\" does not exist" msgstr "მონაცემთა ბაზა \"%s\" არ არსებობს" @@ -6673,197 +6672,129 @@ msgid "%s requires a Boolean value or \"match\"" msgstr "%s -ს ლოგიკური მნიშვნელობა უნდა ჰქონდეს, ან \"match\"" -#: commands/copy.c:400 +#. translator: first %s is the name of a COPY option, e.g. ON_ERROR, +#. second %s is a COPY with direction, e.g. COPY TO +#: commands/copy.c:402 commands/copy.c:782 commands/copy.c:798 commands/copy.c:815 commands/copy.c:841 commands/copy.c:851 #, c-format -msgid "COPY ON_ERROR cannot be used with COPY TO" -msgstr "COPY ON_ERROR-ს COPY TO-სთან ერთად ვერ გამოიყენებთ" +msgid "COPY %s cannot be used with %s" +msgstr "COPY %s-ს %s-სთან ერთად ვერ გამოიყენებთ" -#: commands/copy.c:413 +#. translator: first %s is the name of a COPY option, e.g. ON_ERROR +#: commands/copy.c:416 commands/copy.c:441 #, c-format -msgid "COPY ON_ERROR \"%s\" not recognized" -msgstr "COPY ON_ERROR \"%s\" უცნობია" +msgid "COPY %s \"%s\" not recognized" +msgstr "COPY %s \"%s\" უცნობია" -#: commands/copy.c:437 -#, c-format -msgid "COPY LOG_VERBOSITY \"%s\" not recognized" -msgstr "COPY LOG_VERBOSITY \"%s\" უცნობია" - -#: commands/copy.c:498 +#: commands/copy.c:502 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "COPY-ის უცნობი ფორმატი: \"%s\"" -#: commands/copy.c:556 commands/copy.c:571 commands/copy.c:586 commands/copy.c:605 +#: commands/copy.c:560 commands/copy.c:575 commands/copy.c:590 commands/copy.c:609 #, c-format msgid "argument to option \"%s\" must be a list of column names" msgstr "პარამეტრის (%s) არგუმენტი სვეტების სახელების სია უნდა იყოს" -#: commands/copy.c:617 +#: commands/copy.c:621 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "პარამეტრის (%s) არგუმენტი კოდირების სწორი სახელი უნდა იყოს" -#: commands/copy.c:638 commands/dbcommands.c:866 commands/dbcommands.c:2369 +#: commands/copy.c:642 commands/dbcommands.c:866 commands/dbcommands.c:2381 #, c-format msgid "option \"%s\" not recognized" msgstr "უცნობი პარამეტრი: %s" -#: commands/copy.c:650 +#. translator: %s is the name of a COPY option, e.g. ON_ERROR +#: commands/copy.c:655 commands/copy.c:660 commands/copy.c:665 commands/copy.c:740 #, c-format -msgid "cannot specify DELIMITER in BINARY mode" -msgstr "რეჟიმში BINARY \"DELIMITER\"-ს ვერ მიუთითებთ" +msgid "cannot specify %s in BINARY mode" +msgstr "რეჟიმში BINARY \"%s\"-ს ვერ მიუთითებთ" -#: commands/copy.c:655 -#, c-format -msgid "cannot specify NULL in BINARY mode" -msgstr "რეჟიმში BINARY \"NULL\"-ს ვერ მიუთითებთ" - -#: commands/copy.c:660 -#, c-format -msgid "cannot specify DEFAULT in BINARY mode" -msgstr "'BINARY' რეჟიმში DEFAULT-ს ვერ მიუთითებთ" - -#: commands/copy.c:665 +#: commands/copy.c:670 #, c-format msgid "only ON_ERROR STOP is allowed in BINARY mode" msgstr "" -#: commands/copy.c:687 +#: commands/copy.c:692 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "COPY-ის გამყოფი ერთბაიტიანი სიმბოლო უნდა იყოს" -#: commands/copy.c:694 +#: commands/copy.c:699 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "COPY-ის გამყოფი ხაზის გადატანა ან კარეტის დაბრუნება არ უნდა იყოს" -#: commands/copy.c:700 +#: commands/copy.c:705 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "COPY-ის ნულოვან რეპრეზენტაციას ახალი ხაზის ან კარეტის დაბრუნება გამოყენება არ შეუძლია" -#: commands/copy.c:710 +#: commands/copy.c:715 #, c-format msgid "COPY default representation cannot use newline or carriage return" msgstr "COPY-ის ნაგულისხმევ რეპრეზენტაციას ახალი ხაზის ან კარეტის დაბრუნება გამოყენება არ შეუძლია" -#: commands/copy.c:728 +#: commands/copy.c:733 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "COPY-ის გამყოფი \"%s\" არ შეიძლება იყოს" -#: commands/copy.c:734 +#. translator: %s is the name of a COPY option, e.g. ON_ERROR +#: commands/copy.c:747 commands/copy.c:764 commands/copy.c:776 commands/copy.c:791 commands/copy.c:807 #, c-format -msgid "cannot specify HEADER in BINARY mode" -msgstr "რეჟიმში BINARY \"HEADER\"-ს ვერ მიუთითებთ" +msgid "COPY %s requires CSV mode" +msgstr "COPY %s-ს CSV რეჟიმი სჭირდება" -#: commands/copy.c:740 -#, c-format -msgid "COPY QUOTE requires CSV mode" -msgstr "COPY QUOTE-ს CSV რეჟიმი სჭირდება" - -#: commands/copy.c:745 +#: commands/copy.c:752 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "COPY-ის ბრჭყალი ერთბაიტიანი სიმბოლო უნდა იყოს" -#: commands/copy.c:750 +#: commands/copy.c:757 #, c-format msgid "COPY delimiter and quote must be different" msgstr "COPY-ის გამყოფი და ბრჭყალი სხვადასხვა სიმბოლო უნდა იყოს" -#: commands/copy.c:756 -#, c-format -msgid "COPY ESCAPE requires CSV mode" -msgstr "COPY ESCAPE-ს CSV რეჟიმი სჭირდება" - -#: commands/copy.c:761 +#: commands/copy.c:769 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "COPY-ის სპეცსიმბოლო ერთბაიტიანი სიმბოლო უნდა იყოს" -#: commands/copy.c:767 -#, c-format -msgid "COPY FORCE_QUOTE requires CSV mode" -msgstr "COPY FORCE_QUOTE-ს CSV რეჟიმი სჭირდება" - -#: commands/copy.c:771 +#. translator: %s is the name of a COPY option, e.g. NULL +#: commands/copy.c:823 commands/copy.c:859 #, c-format -msgid "COPY FORCE_QUOTE cannot be used with COPY FROM" -msgstr "COPY FORCE_QUOTE-ს COPY FROM-სთან ერთად ვერ გამოიყენებთ" +msgid "COPY delimiter character must not appear in the %s specification" +msgstr "COPY-ის გამყოფი სიმბოლო %s-ის სპეციფიკაციაში არ უნდა ჩანდეს" -#: commands/copy.c:777 +#. translator: %s is the name of a COPY option, e.g. NULL +#: commands/copy.c:832 commands/copy.c:868 #, c-format -msgid "COPY FORCE_NOT_NULL requires CSV mode" -msgstr "COPY FORCE_NOT_NULL-ს CSV რეჟიმი სჭირდება" +msgid "CSV quote character must not appear in the %s specification" +msgstr "CSV-ის ბრჭყალის სიმბოლო %s-ის სპეციფიკაციაში არ უნდა გამოჩნდეს" -#: commands/copy.c:781 -#, c-format -msgid "COPY FORCE_NOT_NULL cannot be used with COPY TO" -msgstr "COPY FORCE_NOT_NULL-ს COPY TO-სთან ერთად ვერ გამოიყენებთ" - -#: commands/copy.c:787 -#, c-format -msgid "COPY FORCE_NULL requires CSV mode" -msgstr "COPY FORCE_NULL-ს CSV რეჟიმი სჭირდება" - -#: commands/copy.c:792 -#, c-format -msgid "COPY FORCE_NULL cannot be used with COPY TO" -msgstr "COPY FORCE_NULL-ს COPY TO-სთან ერთად ვერ გამოიყენებთ" - -#: commands/copy.c:798 -#, c-format -msgid "COPY delimiter character must not appear in the NULL specification" -msgstr "COPY-ის გამყოფი სიმბოლო NULL-ის სპეციფიკაციაში არ ჩანდეს" - -#: commands/copy.c:805 -#, c-format -msgid "CSV quote character must not appear in the NULL specification" -msgstr "CSV-ის ბრჭყალის სიმბოლო NULL-ის სპეციფიკაციაში არ უნდა გამოჩნდეს" - -#: commands/copy.c:811 -#, c-format -msgid "COPY FREEZE cannot be used with COPY TO" -msgstr "COPY FREEZE-ს COPY TO-სთან ერთად ვერ გამოიყენებთ" - -#: commands/copy.c:818 -#, c-format -msgid "COPY DEFAULT only available using COPY FROM" -msgstr "COPY DEFAULT მხოლოდ COPY FROM-ის გამოყენების დროსაა ხელმისაწვდომი" - -#: commands/copy.c:824 -#, c-format -msgid "COPY delimiter must not appear in the DEFAULT specification" -msgstr "COPY-ის გამყოფი DEFAULT-ის სპეციფიკაციაში არ უნდა გამოჩნდეს" - -#: commands/copy.c:831 -#, c-format -msgid "CSV quote character must not appear in the DEFAULT specification" -msgstr "CSV-ის ბრჭყალის სიმბოლო DEFAULT-ის სპეციფიკაციაში არ უნდა გამოჩნდეს" - -#: commands/copy.c:839 +#: commands/copy.c:877 #, c-format msgid "NULL specification and DEFAULT specification cannot be the same" msgstr "NULL-ის სპეციფიკაცია და DEFAULT-ის სპეციფიკაცია ერთი და იგივე ვერ იქნება" -#: commands/copy.c:901 +#: commands/copy.c:939 #, c-format msgid "column \"%s\" is a generated column" msgstr "სვეტი \"%s\" გენერირებული სვეტია" -#: commands/copy.c:903 +#: commands/copy.c:941 #, c-format msgid "Generated columns cannot be used in COPY." msgstr "გენერირებული სვეტები COPY-ში არ გამოიყენება." -#: commands/copy.c:918 commands/indexcmds.c:1915 commands/statscmds.c:239 commands/tablecmds.c:2514 commands/tablecmds.c:2985 commands/tablecmds.c:3781 parser/parse_relation.c:3692 parser/parse_relation.c:3702 parser/parse_relation.c:3720 parser/parse_relation.c:3727 parser/parse_relation.c:3741 utils/adt/tsvector_op.c:2853 +#: commands/copy.c:956 commands/indexcmds.c:1890 commands/statscmds.c:239 commands/tablecmds.c:2526 commands/tablecmds.c:2997 commands/tablecmds.c:3808 parser/parse_relation.c:3692 parser/parse_relation.c:3702 parser/parse_relation.c:3720 parser/parse_relation.c:3727 parser/parse_relation.c:3741 utils/adt/tsvector_op.c:2853 #, c-format msgid "column \"%s\" does not exist" msgstr "სვეტი არ არსებობს: \"%s\"" -#: commands/copy.c:925 commands/tablecmds.c:2540 commands/trigger.c:951 parser/parse_target.c:1083 parser/parse_target.c:1094 +#: commands/copy.c:963 commands/tablecmds.c:2552 commands/trigger.c:951 parser/parse_target.c:1083 parser/parse_target.c:1094 #, c-format msgid "column \"%s\" specified more than once" msgstr "სვეტი ერთზე მეტჯერაა მითითებული: \"%s\"" @@ -6945,37 +6876,34 @@ msgstr[0] "გამოტოვებულია %llu მწკრივი მონაცემების ტიპის შეუთავსებლობის გამო" msgstr[1] "გამოტოვებულია %llu მწკრივი მონაცემების ტიპის შეუთავსებლობის გამო" -#: commands/copyfrom.c:1447 -#, c-format -msgid "FORCE_NOT_NULL column \"%s\" not referenced by COPY" -msgstr "FORCE_NOT_NULL სვეტი \"%s\" COPY-ის მიერ მითითებული არაა" - -#: commands/copyfrom.c:1489 +#. translator: first %s is the name of a COPY option, e.g. FORCE_NOT_NULL +#. translator: %s is the name of a COPY option, e.g. FORCE_NOT_NULL +#: commands/copyfrom.c:1448 commands/copyfrom.c:1491 commands/copyto.c:601 #, c-format -msgid "FORCE_NULL column \"%s\" not referenced by COPY" -msgstr "FORCE_NULL სვეტი \"%s\" COPY-ის მიერ მითითებული არაა" +msgid "%s column \"%s\" not referenced by COPY" +msgstr "%s-ის სვეტი \"%s\"-ს COPY არ მიმართავს" -#: commands/copyfrom.c:1542 utils/mb/mbutils.c:385 +#: commands/copyfrom.c:1544 utils/mb/mbutils.c:385 #, c-format msgid "default conversion function for encoding \"%s\" to \"%s\" does not exist" msgstr "ნაგულისხმევი გადაყვანის ფუნქცია კოდირებისთვის \"%s\"-დან %s-ზე არ არსებობს" -#: commands/copyfrom.c:1740 +#: commands/copyfrom.c:1742 #, c-format msgid "COPY FROM instructs the PostgreSQL server process to read a file. You may want a client-side facility such as psql's \\copy." msgstr "ინსტრუქცია 'COPY TO' PostgreSQL-ის სერვერის პროცესს ფაილიდან წაკითხვას უბრძანებს. შეიძლება გნებავთ კლიენტის მხარე, როგორიცაა psql-ის \\copy." -#: commands/copyfrom.c:1753 commands/copyto.c:701 +#: commands/copyfrom.c:1755 commands/copyto.c:706 #, c-format msgid "\"%s\" is a directory" msgstr "\"%s\" საქაღალდეა" -#: commands/copyfrom.c:1821 commands/copyto.c:299 libpq/be-secure-common.c:83 +#: commands/copyfrom.c:1823 commands/copyto.c:299 libpq/be-secure-common.c:83 #, c-format msgid "could not close pipe to external command: %m" msgstr "გარე ბრძანებამდე ფაიფის დახურვის შეცდომა: %m" -#: commands/copyfrom.c:1836 commands/copyto.c:304 +#: commands/copyfrom.c:1838 commands/copyto.c:304 #, c-format msgid "program \"%s\" failed" msgstr "პროგრამის (\"%s\") შეცდომა" @@ -7015,7 +6943,7 @@ msgid "could not read from COPY file: %m" msgstr "\"COPY\" ფაილიდან წაკითხვის შეცდომა: %m" -#: commands/copyfromparse.c:278 commands/copyfromparse.c:303 replication/walsender.c:756 replication/walsender.c:782 tcop/postgres.c:377 +#: commands/copyfromparse.c:278 commands/copyfromparse.c:303 replication/walsender.c:756 replication/walsender.c:782 tcop/postgres.c:381 #, c-format msgid "unexpected EOF on client connection with an open transaction" msgstr "მოულოდნელი EOF ღია ტრანზაქციის მქონე კლიენტის შეერთებაზე" @@ -7057,12 +6985,12 @@ #: commands/copyfromparse.c:990 #, c-format -msgid "skipping row due to data type incompatibility at line %llu for column %s: \"%s\"" +msgid "skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"" msgstr "" #: commands/copyfromparse.c:998 #, c-format -msgid "skipping row due to data type incompatibility at line %llu for column %s: null input" +msgid "skipping row due to data type incompatibility at line %llu for column \"%s\": null input" msgstr "" #: commands/copyfromparse.c:1044 @@ -7212,8 +7140,8 @@ #: commands/copyto.c:478 #, c-format -msgid "DO ALSO rules are not supported for the COPY" -msgstr "DO ALSO -ის წესები COPY-სთვის მხარდაუჭერელია" +msgid "DO ALSO rules are not supported for COPY" +msgstr "DO ALSO -ის წესები COPY-სთვის მხარდაჭერილი არაა" #: commands/copyto.c:483 #, c-format @@ -7225,42 +7153,42 @@ msgid "COPY (SELECT INTO) is not supported" msgstr "COPY (SELECT INTO) მხარდაუჭერელია" -#: commands/copyto.c:511 +#: commands/copyto.c:499 +#, c-format +msgid "COPY query must not be a utility command" +msgstr "" + +#: commands/copyto.c:515 #, c-format msgid "COPY query must have a RETURNING clause" msgstr "COPY მოთხოვნას RETURNING პირობა აუცილებლად უნდა გააჩნდეს" -#: commands/copyto.c:540 +#: commands/copyto.c:544 #, c-format msgid "relation referenced by COPY statement has changed" msgstr "" -#: commands/copyto.c:596 -#, c-format -msgid "FORCE_QUOTE column \"%s\" not referenced by COPY" -msgstr "FORCE_QUOTE სვეტი \"%s\" COPY-ის მიერ მითითებული არაა" - -#: commands/copyto.c:666 +#: commands/copyto.c:671 #, c-format msgid "relative path not allowed for COPY to file" msgstr "ფაილში COPY-სთვის შედარებითი ბილიკის მითითება დაუშვებელია" -#: commands/copyto.c:685 +#: commands/copyto.c:690 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "ფაილის (\"%s\") ჩასაწერად გახსნა შეუძლებელია: %m" -#: commands/copyto.c:688 +#: commands/copyto.c:693 #, c-format msgid "COPY TO instructs the PostgreSQL server process to write a file. You may want a client-side facility such as psql's \\copy." msgstr "ინსტრუქცია 'COPY TO' PostgreSQL-ის სერვერის პროცესს ფაილში ჩაწერას უბრძანებს. შეიძლება გნებავთ კლიენტის მხარე, როგორიცაა psql-ის \\copy." -#: commands/createas.c:210 commands/createas.c:518 +#: commands/createas.c:210 commands/createas.c:516 #, c-format msgid "too many column names were specified" msgstr "მითითებულია მეტისმეტად ბევრი სვეტის სახელი" -#: commands/createas.c:541 +#: commands/createas.c:539 #, c-format msgid "policies not yet implemented for this command" msgstr "ამ ბრძანებისთვის წესები ჯერ არ არსებობს" @@ -7295,7 +7223,7 @@ msgid "unrecognized locale provider: %s" msgstr "ენის უცნობი მომწოდებელი: %s" -#: commands/dbcommands.c:944 commands/dbcommands.c:2402 commands/user.c:299 commands/user.c:739 +#: commands/dbcommands.c:944 commands/dbcommands.c:2414 commands/user.c:299 commands/user.c:739 #, c-format msgid "invalid connection limit: %d" msgstr "კავშირის არასწორი ლიმიტი: %d" @@ -7315,7 +7243,7 @@ msgid "cannot use invalid database \"%s\" as template" msgstr "არასწორი მონაცემთა ბაზის \"%s\" შაბლონად გამოყენება შეუძლებელია" -#: commands/dbcommands.c:1000 commands/dbcommands.c:2431 utils/init/postinit.c:1112 +#: commands/dbcommands.c:1000 commands/dbcommands.c:2444 utils/init/postinit.c:1113 #, c-format msgid "Use DROP DATABASE to drop invalid databases." msgstr "არასწორი მონაცემთა ბაზების წასაშლელად გამოიყენეთ ბრძანება DROP DATABASE." @@ -7460,7 +7388,7 @@ msgid "Rebuild all objects in the template database that use the default collation and run ALTER DATABASE %s REFRESH COLLATION VERSION, or build PostgreSQL with the right library version." msgstr "სანიმუშე ბაზაში ყველა ობიექტი, რომლებიც ნაგულისხმევ კოლაციას იყენებს, თავიან ააგეთ და გაუშვით ALTER DATABASE %s REFRESH COLLATION VERSION, ან PostgreSQL სწორი ბიბლიოთეკის ვერსიით ააგეთ." -#: commands/dbcommands.c:1298 commands/dbcommands.c:2031 +#: commands/dbcommands.c:1298 commands/dbcommands.c:2041 #, c-format msgid "pg_global cannot be used as default tablespace" msgstr "pg_global არ შეიძლება გამოყენებულ იქნას როგორც ნაგულისხმევი ცხრილის სივრცე" @@ -7475,7 +7403,7 @@ msgid "There is a conflict because database \"%s\" already has some tables in this tablespace." msgstr "არსებობს კონფლიქტი, რადგან მონაცემთა ბაზას \"%s\" ამ ცხრილების სივრცეში ცხრილები უკვე გააჩნია." -#: commands/dbcommands.c:1356 commands/dbcommands.c:1904 +#: commands/dbcommands.c:1356 commands/dbcommands.c:1912 #, c-format msgid "database \"%s\" already exists" msgstr "ბაზა \"%s\" უკვე არსებობს" @@ -7495,7 +7423,7 @@ msgid "data directory with the specified OID %u already exists" msgstr "მონაცემების საქაღალდე მითითებული OID-ით (%u) უკვე არსებობს" -#: commands/dbcommands.c:1571 commands/dbcommands.c:1586 utils/adt/pg_locale.c:2565 +#: commands/dbcommands.c:1571 commands/dbcommands.c:1586 utils/adt/pg_locale.c:2588 #, c-format msgid "encoding \"%s\" does not match locale \"%s\"" msgstr "კოდირება (%s) ენას (%s) არ ემთხვევა" @@ -7510,130 +7438,130 @@ msgid "The chosen LC_COLLATE setting requires encoding \"%s\"." msgstr "\"LC_COLLATE\"-ის არჩეულ პარამეტრს სჭირდება კოდირება: \"%s\"." -#: commands/dbcommands.c:1670 +#: commands/dbcommands.c:1672 #, c-format msgid "database \"%s\" does not exist, skipping" msgstr "მონაცემთა ბაზა \"%s\" არ არსებობს, გამოტოვება" -#: commands/dbcommands.c:1694 +#: commands/dbcommands.c:1696 #, c-format msgid "cannot drop a template database" msgstr "შაბლონური ბაზის წაშლა შეუძლებელია" -#: commands/dbcommands.c:1700 +#: commands/dbcommands.c:1702 #, c-format msgid "cannot drop the currently open database" msgstr "ღია ბაზის წაშლა შეუძლებელია" -#: commands/dbcommands.c:1713 +#: commands/dbcommands.c:1715 #, c-format msgid "database \"%s\" is used by an active logical replication slot" msgstr "ბაზა %s აქტიური ლოგიკური რეპლიკაციის სლოტის მიერ გამოიყენება" -#: commands/dbcommands.c:1715 +#: commands/dbcommands.c:1717 #, c-format msgid "There is %d active slot." msgid_plural "There are %d active slots." msgstr[0] "ხელმისაწვდომია %d აქტიური სლოტი." msgstr[1] "ხელმისაწვდომია %d აქტიური სლოტი." -#: commands/dbcommands.c:1729 +#: commands/dbcommands.c:1731 #, c-format msgid "database \"%s\" is being used by logical replication subscription" msgstr "ბაზა %s ლოგიკური რეპლიკაციის გამოწერის მიერ გამოიყენება" -#: commands/dbcommands.c:1731 +#: commands/dbcommands.c:1733 #, c-format msgid "There is %d subscription." msgid_plural "There are %d subscriptions." msgstr[0] "აღმოჩენილია %d გამოწერა." msgstr[1] "აღმოჩენილია %d გამოწერა." -#: commands/dbcommands.c:1752 commands/dbcommands.c:1926 commands/dbcommands.c:2053 +#: commands/dbcommands.c:1754 commands/dbcommands.c:1934 commands/dbcommands.c:2063 #, c-format msgid "database \"%s\" is being accessed by other users" msgstr "ბაზა %s-სთან ამჟამად სხვა მომხმარებლებიცაა მიერთებული" -#: commands/dbcommands.c:1886 +#: commands/dbcommands.c:1894 #, c-format msgid "permission denied to rename database" msgstr "ბაზის სახელის გადარქმევის წვდომა აკრძალულია" -#: commands/dbcommands.c:1915 +#: commands/dbcommands.c:1923 #, c-format msgid "current database cannot be renamed" msgstr "მიმდინარე ბაზის სახელის გადარქმევა შეუძლებელია" -#: commands/dbcommands.c:2009 +#: commands/dbcommands.c:2019 #, c-format msgid "cannot change the tablespace of the currently open database" msgstr "ღია ბაზის ცხრილების სივრცის შეცვლა შეუძლებელია" -#: commands/dbcommands.c:2115 +#: commands/dbcommands.c:2125 #, c-format msgid "some relations of database \"%s\" are already in tablespace \"%s\"" msgstr "ბაზის (%s) ზოგიერთი ურთიერთობა ცხრილების სივრცეში \"%s\" უკვე იმყოფება" -#: commands/dbcommands.c:2117 +#: commands/dbcommands.c:2127 #, c-format msgid "You must move them back to the database's default tablespace before using this command." msgstr "ამ ბრძანების გამოყენებამდე ბაზის ნაგულისხმევ ცხრილების სივრცეში უნდა დაბრუნდეთ." -#: commands/dbcommands.c:2244 commands/dbcommands.c:2979 commands/dbcommands.c:3279 commands/dbcommands.c:3392 +#: commands/dbcommands.c:2256 commands/dbcommands.c:2999 commands/dbcommands.c:3299 commands/dbcommands.c:3412 #, c-format msgid "some useless files may be left behind in old database directory \"%s\"" msgstr "ძველი ბაზის საქაღალდეში \"%s\" შეიძლება რამდენიმე გამოუსადეგარი ფაილი დარჩა" -#: commands/dbcommands.c:2305 +#: commands/dbcommands.c:2317 #, c-format msgid "unrecognized DROP DATABASE option \"%s\"" msgstr "\"DROP DATABASE\"-ის უცნობი პარამეტრი \"%s\"" -#: commands/dbcommands.c:2383 +#: commands/dbcommands.c:2395 #, c-format msgid "option \"%s\" cannot be specified with other options" msgstr "პარამეტრის \"%s\" მითითება სხვა პარამეტრებთან ერთად აკრძალულია" -#: commands/dbcommands.c:2430 +#: commands/dbcommands.c:2443 #, c-format msgid "cannot alter invalid database \"%s\"" msgstr "არასწორი ბაზის (\"%s\") შეცვლა შეუძლებელია" -#: commands/dbcommands.c:2447 +#: commands/dbcommands.c:2460 #, c-format msgid "cannot disallow connections for current database" msgstr "მიმდინარე ბაზასთან დაკავშირების უარყოფა შეუძლებელია" -#: commands/dbcommands.c:2673 +#: commands/dbcommands.c:2690 #, c-format msgid "permission denied to change owner of database" msgstr "ბაზის მფლობელის შეცვლის წვდომა აკრძალულია" -#: commands/dbcommands.c:3085 +#: commands/dbcommands.c:3105 #, c-format msgid "There are %d other session(s) and %d prepared transaction(s) using the database." msgstr "ამ ბაზას %d სხვა სესია და %d მომზადებული ტრანზაქცია იყენებს." -#: commands/dbcommands.c:3088 +#: commands/dbcommands.c:3108 #, c-format msgid "There is %d other session using the database." msgid_plural "There are %d other sessions using the database." msgstr[0] "%d სხვა სესია, რომელიც ბაზას იყენებს." msgstr[1] "%d სხვა სესია, რომელიც ბაზას იყენებს." -#: commands/dbcommands.c:3093 storage/ipc/procarray.c:3847 +#: commands/dbcommands.c:3113 storage/ipc/procarray.c:3859 #, c-format msgid "There is %d prepared transaction using the database." msgid_plural "There are %d prepared transactions using the database." msgstr[0] "ბაზას %d მომზადებული ტრანზაქცია იყენებს." msgstr[1] "ბაზას %d მომზადებული ტრანზაქცია იყენებს." -#: commands/dbcommands.c:3235 +#: commands/dbcommands.c:3255 #, c-format msgid "missing directory \"%s\"" msgstr "ნაკლული საქაღალდე \"%s\"" -#: commands/dbcommands.c:3293 commands/tablespace.c:184 commands/tablespace.c:633 +#: commands/dbcommands.c:3313 commands/tablespace.c:184 commands/tablespace.c:633 #, c-format msgid "could not stat directory \"%s\": %m" msgstr "საქაღალდის \"%s\" პოვნა შეუძლებელია: %m" @@ -7673,7 +7601,7 @@ msgid "invalid argument for %s: \"%s\"" msgstr "%s-ის არასწორი არგუმენტი: \"%s\"" -#: commands/dropcmds.c:96 commands/functioncmds.c:1382 utils/adt/ruleutils.c:2909 +#: commands/dropcmds.c:96 commands/functioncmds.c:1382 utils/adt/ruleutils.c:2910 #, c-format msgid "\"%s\" is an aggregate function" msgstr "\"%s\" აგრეგატული ფუნქციაა" @@ -7683,12 +7611,12 @@ msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "აგრეგირებული ფუნქციების წასაშლელად გამოიყენეთ DROP AGGREGATE." -#: commands/dropcmds.c:153 commands/sequence.c:462 commands/tablecmds.c:3865 commands/tablecmds.c:4023 commands/tablecmds.c:4075 commands/tablecmds.c:17061 tcop/utility.c:1325 +#: commands/dropcmds.c:153 commands/sequence.c:462 commands/tablecmds.c:3892 commands/tablecmds.c:4050 commands/tablecmds.c:4102 commands/tablecmds.c:17161 tcop/utility.c:1325 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "ურთიერთობა \"%s\" არ არსებობს, გამოტოვებს" -#: commands/dropcmds.c:183 commands/dropcmds.c:282 commands/tablecmds.c:1397 +#: commands/dropcmds.c:183 commands/dropcmds.c:282 commands/tablecmds.c:1409 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "სქემა \"%s\" არ არსებობს, გამოტოვება" @@ -7869,67 +7797,67 @@ msgid "filter variable \"%s\" specified more than once" msgstr "ფილტრის ცვლადი ერთზე მეტჯერაა მითითებული: %s" -#: commands/event_trigger.c:435 commands/event_trigger.c:487 commands/event_trigger.c:581 +#: commands/event_trigger.c:438 commands/event_trigger.c:490 commands/event_trigger.c:584 #, c-format msgid "event trigger \"%s\" does not exist" msgstr "მოვლენის ტრიგერი არ არსებობს: \"%s\"" -#: commands/event_trigger.c:519 +#: commands/event_trigger.c:522 #, c-format msgid "event trigger with OID %u does not exist" msgstr "მოვლენის ტრიგერი OID-ით %u არ არსებობს" -#: commands/event_trigger.c:549 +#: commands/event_trigger.c:552 #, c-format msgid "permission denied to change owner of event trigger \"%s\"" msgstr "მოვლენის ტრიგერის მფლობელის შეცვლის წვდომა აკრძალულია: %s" -#: commands/event_trigger.c:551 +#: commands/event_trigger.c:554 #, c-format msgid "The owner of an event trigger must be a superuser." msgstr "მოვლენის ტრიგერის მფლობელი ზემომხმარებელი უნდა იყოს." -#: commands/event_trigger.c:1411 +#: commands/event_trigger.c:1409 #, c-format msgid "%s can only be called in a sql_drop event trigger function" msgstr "%s-ის გამოძახება sql_drop მოვლენის ტრიგერიდან შეგიძლიათ" -#: commands/event_trigger.c:1504 commands/event_trigger.c:1525 +#: commands/event_trigger.c:1502 commands/event_trigger.c:1523 #, c-format msgid "%s can only be called in a table_rewrite event trigger function" msgstr "%s-ის გამოძახება table_rewrite მოვლენის ტრიგერიდან შეგიძლიათ" -#: commands/event_trigger.c:1938 +#: commands/event_trigger.c:1936 #, c-format msgid "%s can only be called in an event trigger function" msgstr "%s-ის გამოძახება მხოლოდ მოვლენის ტრიგერის ფუნქციიდან შეგიძლიათ" -#: commands/explain.c:240 commands/explain.c:265 +#: commands/explain.c:241 commands/explain.c:266 #, c-format msgid "unrecognized value for EXPLAIN option \"%s\": \"%s\"" msgstr "\"EXPLAIN\"-ის უცნობი პარამეტრი \"%s\": \"%s\"" -#: commands/explain.c:272 +#: commands/explain.c:273 #, c-format msgid "unrecognized EXPLAIN option \"%s\"" msgstr "\"EXPLAIN\"-ის უცნობი პარამეტრი \"%s\"" -#: commands/explain.c:281 +#: commands/explain.c:282 #, c-format msgid "EXPLAIN option WAL requires ANALYZE" msgstr "EXPLAIN -ის პარამეტრ WAL-ს ANALYZE სჭირდება" -#: commands/explain.c:290 +#: commands/explain.c:291 #, c-format msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "EXPLAIN -ის პარამეტრ TIMING-ს ANALYZE სჭირდება" -#: commands/explain.c:296 +#: commands/explain.c:297 #, c-format msgid "EXPLAIN option SERIALIZE requires ANALYZE" msgstr "EXPLAIN-ის პარამეტრს SERIALIZE 'ANALYZE' სჭირდება" -#: commands/explain.c:302 +#: commands/explain.c:303 #, c-format msgid "EXPLAIN options ANALYZE and GENERIC_PLAN cannot be used together" msgstr "EXPLAIN-ის პარამეტრები ANALYZE და GENERIC_PLAN ერთად არ შეიძლება, გამოიყენოთ" @@ -8239,7 +8167,7 @@ msgid "The owner of a foreign-data wrapper must be a superuser." msgstr "გარე მონაცემების გადამტანის მფლობელი ზემომხმარებელი უნდა იყოს." -#: commands/foreigncmds.c:291 commands/foreigncmds.c:707 foreign/foreign.c:681 +#: commands/foreigncmds.c:291 commands/foreigncmds.c:707 foreign/foreign.c:691 #, c-format msgid "foreign-data wrapper \"%s\" does not exist" msgstr "გარე მონაცემების გადამტანი არ არსებობს: %s" @@ -8309,7 +8237,7 @@ msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "მომხმარებლის ბმა %s სერვერისთვის %s არ არსებობს, გამოტოვება" -#: commands/foreigncmds.c:1507 foreign/foreign.c:394 +#: commands/foreigncmds.c:1507 foreign/foreign.c:404 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "გარე-მონაცემების გადამტანს დამმუშავებელი არ გააჩნია: %s" @@ -8484,12 +8412,12 @@ msgid "no language specified" msgstr "ენა არ არის მითითებული" -#: commands/functioncmds.c:1099 commands/functioncmds.c:2104 commands/proclang.c:235 +#: commands/functioncmds.c:1099 commands/functioncmds.c:2117 commands/proclang.c:235 #, c-format msgid "language \"%s\" does not exist" msgstr "ენა \"%s\" არ არსებობს" -#: commands/functioncmds.c:1101 commands/functioncmds.c:2106 +#: commands/functioncmds.c:1101 commands/functioncmds.c:2119 #, c-format msgid "Use CREATE EXTENSION to load the language into the database." msgstr "ენის ბაზაში შესატვირთად გამოიყენეთ CREATE EXTENSION." @@ -8584,399 +8512,404 @@ msgid "source and target data types are not physically compatible" msgstr "საწყისი და სამიზნე მონაცემის ტიპები ფიზიკურად შეუთავსებელია" -#: commands/functioncmds.c:1704 +#: commands/functioncmds.c:1709 #, c-format msgid "composite data types are not binary-compatible" msgstr "მონაცემების კომპოზიტური ტიპები შეუთავსებელია ორობით დონეზე" -#: commands/functioncmds.c:1710 -#, c-format -msgid "enum data types are not binary-compatible" -msgstr "მონაცემების ჩამონათვალის ტიპები შეუთავსებელია ორობით დონეზე" - -#: commands/functioncmds.c:1716 +#: commands/functioncmds.c:1715 #, c-format msgid "array data types are not binary-compatible" msgstr "მასივის მონაცემების ტიპები შეუთავსებელია ორობით დონეზე" -#: commands/functioncmds.c:1733 +#: commands/functioncmds.c:1723 +#, c-format +msgid "range data types are not binary-compatible" +msgstr "შუალედის მონაცემის ტიპები შეუთავსებელია ორობით დონეზე" + +#: commands/functioncmds.c:1729 +#, c-format +msgid "enum data types are not binary-compatible" +msgstr "მონაცემების ჩამონათვალის ტიპები შეუთავსებელია ორობით დონეზე" + +#: commands/functioncmds.c:1746 #, c-format msgid "domain data types must not be marked binary-compatible" msgstr "დომენის მონაცემების ტიპები შეუთავსებელია ორობით დონეზე" -#: commands/functioncmds.c:1743 +#: commands/functioncmds.c:1756 #, c-format msgid "source data type and target data type are the same" msgstr "საწყისი და სამიზნე მონაცემების ტიპები ერთი და იგივეა" -#: commands/functioncmds.c:1776 +#: commands/functioncmds.c:1789 #, c-format msgid "transform function must not be volatile" msgstr "გარდაქმნის ფუნქცია ცვალებადი არ უნდა იყოს" -#: commands/functioncmds.c:1780 +#: commands/functioncmds.c:1793 #, c-format msgid "transform function must be a normal function" msgstr "გარდაქმნის ფუნქცია ნორმალური ფუნქცია უნდა იყოს" -#: commands/functioncmds.c:1784 +#: commands/functioncmds.c:1797 #, c-format msgid "transform function must not return a set" msgstr "გარდაქმნის ფუნქციამ სეტი არ უნდა დააბრუნოს" -#: commands/functioncmds.c:1788 +#: commands/functioncmds.c:1801 #, c-format msgid "transform function must take one argument" msgstr "გარდაქმნის ფუნქციამ ერთი არგუმენტი უნდა მიიღოს" -#: commands/functioncmds.c:1792 +#: commands/functioncmds.c:1805 #, c-format msgid "first argument of transform function must be type %s" msgstr "გარდაქმნის ფუნქციის პირველი არგუმენტის ტიპი %s უნდა იყოს" -#: commands/functioncmds.c:1831 +#: commands/functioncmds.c:1844 #, c-format msgid "data type %s is a pseudo-type" msgstr "მონაცემთა ტიპი %s ფსევდო ტიპია" -#: commands/functioncmds.c:1837 +#: commands/functioncmds.c:1850 #, c-format msgid "data type %s is a domain" msgstr "მონაცემების ტიპი %s დომენია" -#: commands/functioncmds.c:1877 +#: commands/functioncmds.c:1890 #, c-format msgid "return data type of FROM SQL function must be %s" msgstr "\"FROM SQL\" ფუნქციის დაბრუნებული მონაცემები აუცილებლად უნდა იყოს: %s" -#: commands/functioncmds.c:1903 +#: commands/functioncmds.c:1916 #, c-format msgid "return data type of TO SQL function must be the transform data type" msgstr "" -#: commands/functioncmds.c:1930 +#: commands/functioncmds.c:1943 #, c-format msgid "transform for type %s language \"%s\" already exists" msgstr "გადაყვანა ტიპისთვის %s ენა \"%s\" უკვე არსებობს" -#: commands/functioncmds.c:2016 +#: commands/functioncmds.c:2029 #, c-format msgid "transform for type %s language \"%s\" does not exist" msgstr "გადაყვანა ტიპისთვის %s ენა \"%s\" არ არსებობს" -#: commands/functioncmds.c:2040 +#: commands/functioncmds.c:2053 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "ფუნქცია (%s) სქემაში (%s) უკვე არსებობს" -#: commands/functioncmds.c:2091 +#: commands/functioncmds.c:2104 #, c-format msgid "no inline code specified" msgstr "ჩადგმული კოდი მითითებული არაა" -#: commands/functioncmds.c:2137 +#: commands/functioncmds.c:2150 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "" -#: commands/functioncmds.c:2232 +#: commands/functioncmds.c:2245 #, c-format msgid "cannot pass more than %d argument to a procedure" msgid_plural "cannot pass more than %d arguments to a procedure" msgstr[0] "პროცედურისთვის %d-ზე მეტი არგუმენტის გადაცემა შეუძლებელია" msgstr[1] "პროცედურისთვის %d-ზე მეტი არგუმენტის გადაცემა შეუძლებელია" -#: commands/indexcmds.c:647 +#: commands/indexcmds.c:656 #, c-format msgid "must specify at least one column" msgstr "უნდა მიეთითოს მინიმუმ ერთი სვეტი" -#: commands/indexcmds.c:651 +#: commands/indexcmds.c:660 #, c-format msgid "cannot use more than %d columns in an index" msgstr "ინდექსში %d სვეტზე მეტს ვერ გამოიყენებთ" -#: commands/indexcmds.c:694 +#: commands/indexcmds.c:703 #, c-format msgid "cannot create index on relation \"%s\"" msgstr "ურთიერთბაზე \"%s\" ინდექსის შექმნა შეიძლებელია" -#: commands/indexcmds.c:720 +#: commands/indexcmds.c:729 #, c-format msgid "cannot create index on partitioned table \"%s\" concurrently" msgstr "ინდექსს დაყოფილ ცხრილზე %s პარალელურად ვერ შექმნით" -#: commands/indexcmds.c:730 +#: commands/indexcmds.c:739 #, c-format msgid "cannot create indexes on temporary tables of other sessions" msgstr "სხვა სესიების დროებითი ცხრილებზე ინდექსების შექმნა შეუძლებელია" -#: commands/indexcmds.c:768 commands/tablecmds.c:806 commands/tablespace.c:1178 +#: commands/indexcmds.c:777 commands/tablecmds.c:818 commands/tablespace.c:1178 #, c-format msgid "cannot specify default tablespace for partitioned relations" msgstr "დაყოფილი ურთიერთობებისთვის ნაგულისხმევი ცხრილის სივრცეების მითითება შეუძლებელია" -#: commands/indexcmds.c:800 commands/tablecmds.c:837 commands/tablecmds.c:3564 +#: commands/indexcmds.c:809 commands/tablecmds.c:849 commands/tablecmds.c:3588 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "pg_global ცხრილის სივრცეში მხოლოდ გაზიარებული ურთიერთობების მოთავსება შეგიძლიათ" -#: commands/indexcmds.c:833 +#: commands/indexcmds.c:842 #, c-format msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "მოძველებული მეთოდი \"rtree\" წვდომის მეთოდით \"gist\" ჩანაცვლდება" -#: commands/indexcmds.c:854 +#: commands/indexcmds.c:863 #, c-format msgid "access method \"%s\" does not support unique indexes" msgstr "სწვდომის მეთოდს (%s) უნიკალური ინდექსების მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:859 +#: commands/indexcmds.c:868 #, c-format msgid "access method \"%s\" does not support included columns" msgstr "სწვდომის მეთოდს (%s) ჩასმული სვეტების მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:864 +#: commands/indexcmds.c:873 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "სწვდომის მეთოდს (%s) მრავალსვეტიანი ინდექსების მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:869 +#: commands/indexcmds.c:878 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "სწვდომის მეთოდს (%s) გამორიცხვის შეზღუდვების მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:998 +#: commands/indexcmds.c:1007 #, c-format msgid "cannot match partition key to an index using access method \"%s\"" msgstr "წვდომის მეთოდით \"%s\" დანაყოფის გასაღების ინდექსთან დამთხვევა შეუძლებელია" -#: commands/indexcmds.c:1008 +#: commands/indexcmds.c:1017 #, c-format msgid "unsupported %s constraint with partition key definition" msgstr "მხარდაუჭერელი %s შეზღუდვა დანაყოფის გასაღების აღწერით" -#: commands/indexcmds.c:1010 +#: commands/indexcmds.c:1019 #, c-format msgid "%s constraints cannot be used when partition keys include expressions." msgstr "" -#: commands/indexcmds.c:1060 +#: commands/indexcmds.c:1069 #, c-format msgid "cannot match partition key to index on column \"%s\" using non-equal operator \"%s\"" msgstr "დანაყოფის გასაღების დამთხვევა სვეტზე \"%s\" მდებარე ინდექსთან უტოლობის ოპერატორით \"%s\" შეუძლებელია" -#: commands/indexcmds.c:1076 +#: commands/indexcmds.c:1085 #, c-format msgid "unique constraint on partitioned table must include all partitioning columns" msgstr "დაყოფილ ცხრილზე არსებული უნიკალური შეზღუდვა ყველა დაყოფის სვეტს უნდა შეიცავდეს" -#: commands/indexcmds.c:1077 +#: commands/indexcmds.c:1086 #, c-format msgid "%s constraint on table \"%s\" lacks column \"%s\" which is part of the partition key." msgstr "" -#: commands/indexcmds.c:1096 commands/indexcmds.c:1115 +#: commands/indexcmds.c:1105 commands/indexcmds.c:1124 #, c-format msgid "index creation on system columns is not supported" msgstr "სისტემური სვეტებზე ინდექსების შექმნა მხარდაუჭერელია" -#: commands/indexcmds.c:1344 tcop/utility.c:1515 +#: commands/indexcmds.c:1354 tcop/utility.c:1515 #, c-format msgid "cannot create unique index on partitioned table \"%s\"" msgstr "დაყოფილ ცხრილზე (%s) უნიკალური ინდექსის შექმნა შეუძლებელია" -#: commands/indexcmds.c:1346 tcop/utility.c:1517 +#: commands/indexcmds.c:1356 tcop/utility.c:1517 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." msgstr "ცხრილი (%s) შეიცავს დანაყოფებს, რომლებც გარე ცხრილებია." -#: commands/indexcmds.c:1831 +#: commands/indexcmds.c:1806 #, c-format msgid "functions in index predicate must be marked IMMUTABLE" msgstr "ფუნქციები ინდექსის პრედიკატში მონიშნეთ, როგორც IMMUTABLE" -#: commands/indexcmds.c:1910 parser/parse_utilcmd.c:2494 parser/parse_utilcmd.c:2629 +#: commands/indexcmds.c:1885 parser/parse_utilcmd.c:2519 parser/parse_utilcmd.c:2654 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "გასაღებში დასახელებული სვეტი არ არსებობს: %s" -#: commands/indexcmds.c:1934 parser/parse_utilcmd.c:1782 +#: commands/indexcmds.c:1909 parser/parse_utilcmd.c:1807 #, c-format msgid "expressions are not supported in included columns" msgstr "ჩასმულ სვეტებში გამოსახულებები მხარდაჭერილი არაა" -#: commands/indexcmds.c:1975 +#: commands/indexcmds.c:1950 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "ფუნქციები ინდექსის გამოსახულებაში მონიშნეთ, როგორც IMMUTABLE" -#: commands/indexcmds.c:1990 +#: commands/indexcmds.c:1965 #, c-format msgid "including column does not support a collation" msgstr "ჩასმულ სვეტს კოლაციის მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:1994 +#: commands/indexcmds.c:1969 #, c-format msgid "including column does not support an operator class" msgstr "ჩასმულ სვეტს ოპერატორის კლასის მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:1998 +#: commands/indexcmds.c:1973 #, c-format msgid "including column does not support ASC/DESC options" msgstr "ჩასმულ სვეტს ASC/DESC პარამეტრების მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:2002 +#: commands/indexcmds.c:1977 #, c-format msgid "including column does not support NULLS FIRST/LAST options" msgstr "ჩასმულ სვეტს NULLS FIRST/LAST მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:2044 +#: commands/indexcmds.c:2020 #, c-format msgid "could not determine which collation to use for index expression" msgstr "ინდექსის გამოსახულებისთვის გამოსაყენებელი კოლაციის გამოცნობა შეუძლებელია" -#: commands/indexcmds.c:2052 commands/tablecmds.c:18078 commands/typecmds.c:811 parser/parse_expr.c:2785 parser/parse_type.c:568 parser/parse_utilcmd.c:3918 utils/adt/misc.c:630 +#: commands/indexcmds.c:2028 commands/tablecmds.c:18185 commands/typecmds.c:811 parser/parse_expr.c:2785 parser/parse_type.c:568 parser/parse_utilcmd.c:3771 utils/adt/misc.c:630 #, c-format msgid "collations are not supported by type %s" msgstr "ტიპს \"%s\" კოლაციების მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:2117 +#: commands/indexcmds.c:2095 #, c-format msgid "operator %s is not commutative" msgstr "ოპერატორი %s არაკომუტაციურია" -#: commands/indexcmds.c:2119 +#: commands/indexcmds.c:2097 #, c-format msgid "Only commutative operators can be used in exclusion constraints." msgstr "გამორიცხვის შეზღუდვებში მხოლოდ კომუტაციური ოპერატორების გამოყენება შეგიძლიათ." -#: commands/indexcmds.c:2145 +#: commands/indexcmds.c:2123 #, c-format msgid "operator %s is not a member of operator family \"%s\"" msgstr "ოპერატორი (%s) ოპერატორის ოჯახის (%s) წევრი არაა" -#: commands/indexcmds.c:2148 +#: commands/indexcmds.c:2126 #, c-format msgid "The exclusion operator must be related to the index operator class for the constraint." msgstr "" -#: commands/indexcmds.c:2183 +#: commands/indexcmds.c:2161 #, c-format msgid "access method \"%s\" does not support ASC/DESC options" msgstr "წვდომის მეთოდს \"%s\" ASC/DESC პარამეტრების მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:2188 +#: commands/indexcmds.c:2166 #, c-format msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "წვდომის მეთოდს \"%s\" 'NULLS FIRST/LAST' პარამეტრების მხარდაჭერა არ გააჩნია" -#: commands/indexcmds.c:2232 commands/tablecmds.c:18103 commands/tablecmds.c:18109 commands/typecmds.c:2311 +#: commands/indexcmds.c:2210 commands/tablecmds.c:18210 commands/tablecmds.c:18216 commands/typecmds.c:2311 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "მონაცემის ტიპს %s წვდომის მეთოდისთვის \"%s\" ნაგულისხმევი ოპერატორის კლასი არ გააჩნია" -#: commands/indexcmds.c:2234 +#: commands/indexcmds.c:2212 #, 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:2263 commands/indexcmds.c:2271 commands/opclasscmds.c:204 +#: commands/indexcmds.c:2241 commands/indexcmds.c:2249 commands/opclasscmds.c:205 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\"" msgstr "ოპერატორის კლასი \"%s\" წვდომის მეთოდისთვის \"%s\" არ არსებობს" -#: commands/indexcmds.c:2285 commands/typecmds.c:2299 +#: commands/indexcmds.c:2263 commands/typecmds.c:2299 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "ოპერატორის კლასი \"%s\" მონაცემების ტიპს %s არ იღებს" -#: commands/indexcmds.c:2375 +#: commands/indexcmds.c:2353 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "მონაცემის ტიპისთვის %s ერთზე მეტი ნაგულისხმევი ოპერატორის კლასი არსებობს" -#: commands/indexcmds.c:2703 +#: commands/indexcmds.c:2681 #, c-format msgid "unrecognized REINDEX option \"%s\"" msgstr "\"REINDEX\"-ის უცნობი პარამეტრი \"%s\"" -#: commands/indexcmds.c:2935 +#: commands/indexcmds.c:2913 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" msgstr "ცხრილს \"%s\" არ გააჩნია ინდექსები, რომლების პარალელური რეინდექსიც შესაძლებელია" -#: commands/indexcmds.c:2949 +#: commands/indexcmds.c:2927 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "ცხრილს \"%s\" რეინდექსისთვის ცხრილები არ არ გააჩნია" -#: commands/indexcmds.c:2996 commands/indexcmds.c:3507 commands/indexcmds.c:3637 +#: commands/indexcmds.c:2974 commands/indexcmds.c:3485 commands/indexcmds.c:3615 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "სისტემური კატალოგების ერთდროული რეინდექსი შეუძლებელია" -#: commands/indexcmds.c:3020 +#: commands/indexcmds.c:2998 #, c-format msgid "can only reindex the currently open database" msgstr "შესაძლებელია მხოლოდ ამჟამად ღია ბაზის რეინდექსი" -#: commands/indexcmds.c:3112 +#: commands/indexcmds.c:3090 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "სისტემური კატალოგების ერთდროული რეინდექსი შეუძლებელია. ყველას გამოტოვება" -#: commands/indexcmds.c:3145 +#: commands/indexcmds.c:3123 #, c-format msgid "cannot move system relations, skipping all" msgstr "სისტემური დანაყოფების გადაადგილება შეუძლებელია. ყველას გამოტოვება" -#: commands/indexcmds.c:3191 +#: commands/indexcmds.c:3169 #, c-format msgid "while reindexing partitioned table \"%s.%s\"" msgstr "დაყოფილი ცხრილის რეინდექსისას: \"%s.%s\"" -#: commands/indexcmds.c:3194 +#: commands/indexcmds.c:3172 #, c-format msgid "while reindexing partitioned index \"%s.%s\"" msgstr "დაყოფილი ინდექსის რეინდექსისას: \"%s.%s\"" -#: commands/indexcmds.c:3387 commands/indexcmds.c:4255 +#: commands/indexcmds.c:3365 commands/indexcmds.c:4241 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "\"%s.%s\"-ის რეინდექსი დასრულდა" -#: commands/indexcmds.c:3539 commands/indexcmds.c:3592 +#: commands/indexcmds.c:3517 commands/indexcmds.c:3570 #, c-format msgid "skipping reindex of invalid index \"%s.%s\"" msgstr "რეინდექსის გამოტოვება არასწორი ინდექსისთვის \"%s.%s\"" -#: commands/indexcmds.c:3542 commands/indexcmds.c:3595 +#: commands/indexcmds.c:3520 commands/indexcmds.c:3573 #, c-format msgid "Use DROP INDEX or REINDEX INDEX." msgstr "გამოიყენეთ DROP INDEX ან REINDEX INDEX." -#: commands/indexcmds.c:3546 +#: commands/indexcmds.c:3524 #, c-format msgid "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" msgstr "გამორიცხვის შეზღუდვის ინდექსის \"%s.%s\" პარალელური რეინდექსი შეუძლებელია. გამოტოვება" -#: commands/indexcmds.c:3702 +#: commands/indexcmds.c:3680 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "ამ ტიპის ურთიერთობის პარალელური რეინდექსი შეუძლებელია" -#: commands/indexcmds.c:3720 +#: commands/indexcmds.c:3698 #, c-format msgid "cannot move non-shared relation to tablespace \"%s\"" msgstr "არაგაზიარებული ურთიერთობის ცხრილების სივრცეში \"%s\" გადატანა შეუძლებელია" -#: commands/indexcmds.c:4236 commands/indexcmds.c:4248 +#: commands/indexcmds.c:4222 commands/indexcmds.c:4234 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "\"%s.%s\"-ის რეინდექსი დასრულდა" -#: commands/indexcmds.c:4238 commands/indexcmds.c:4257 +#: commands/indexcmds.c:4224 commands/indexcmds.c:4243 #, c-format msgid "%s." msgstr "%s." @@ -8986,252 +8919,252 @@ msgid "cannot lock relation \"%s\"" msgstr "ურთიერთობის დაბლოკვა (\"%s\") შეუძლებელია" -#: commands/matview.c:190 +#: commands/matview.c:206 #, c-format msgid "CONCURRENTLY cannot be used when the materialized view is not populated" msgstr "CONCURRENTLY-ის გამოყენება შეუძლებელია, როცა მატერიალიზებული ხედი შევსებული არაა" -#: commands/matview.c:196 gram.y:18967 +#: commands/matview.c:212 gram.y:18918 #, c-format msgid "%s and %s options cannot be used together" msgstr "პარამეტრები %s და %s შეუთავსებლებია" -#: commands/matview.c:253 +#: commands/matview.c:269 #, c-format msgid "cannot refresh materialized view \"%s\" concurrently" msgstr "მატერიალიზებული ხედის (%s) პარალელური განახლება შეუძლებელია" -#: commands/matview.c:256 +#: commands/matview.c:272 #, c-format msgid "Create a unique index with no WHERE clause on one or more columns of the materialized view." msgstr "" -#: commands/matview.c:650 +#: commands/matview.c:666 #, c-format msgid "new data for materialized view \"%s\" contains duplicate rows without any null columns" msgstr "ახალი მონაცემები მატერიალიზებულ ხედისთვის \"%s\" დუბლირებულ მწკრივებს შეიცავს, ნულოვანი მწკრივების გარეშე" -#: commands/matview.c:652 +#: commands/matview.c:668 #, c-format msgid "Row: %s" msgstr "მწკრივი: %s" -#: commands/opclasscmds.c:123 +#: commands/opclasscmds.c:124 #, c-format msgid "operator family \"%s\" does not exist for access method \"%s\"" msgstr "წვდომის მეთოდისთვის (%2$s) ოპერატორის ოჯახი (%1$s) არ არსებობს" -#: commands/opclasscmds.c:266 +#: commands/opclasscmds.c:267 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists" msgstr "წვდომის მეთოდისთვის (%2$s) ოპერატორის ოჯახი (%1$s) უკვე არსებობს" -#: commands/opclasscmds.c:415 +#: commands/opclasscmds.c:416 #, c-format msgid "must be superuser to create an operator class" msgstr "ოპერატორის კლასის შესაქმნელად ზემომხმარებლის უფლებება საჭირო" -#: commands/opclasscmds.c:492 commands/opclasscmds.c:909 commands/opclasscmds.c:1055 +#: commands/opclasscmds.c:493 commands/opclasscmds.c:910 commands/opclasscmds.c:1056 #, c-format msgid "invalid operator number %d, must be between 1 and %d" msgstr "ოპერატორის არასწორი ნომერი: %d. უნდა იყოს დიაპაზონში 1..%d" -#: commands/opclasscmds.c:537 commands/opclasscmds.c:959 commands/opclasscmds.c:1071 +#: commands/opclasscmds.c:538 commands/opclasscmds.c:960 commands/opclasscmds.c:1072 #, c-format msgid "invalid function number %d, must be between 1 and %d" msgstr "ფუნქციის არასწორი ნომერი: %d. უნდა იყოს დიაპაზონში 1..%d" -#: commands/opclasscmds.c:566 +#: commands/opclasscmds.c:567 #, c-format msgid "storage type specified more than once" msgstr "საცავის ტიპი ერთზე მეტჯერაა მითითებული" -#: commands/opclasscmds.c:593 +#: commands/opclasscmds.c:594 #, c-format msgid "storage type cannot be different from data type for access method \"%s\"" msgstr "წვდომის მეთოდისთვის \"%s\" საცავის ტიპი არ შეიძლება, მონაცემის ტიპისგან განსხვავდებოდეს" -#: commands/opclasscmds.c:609 +#: commands/opclasscmds.c:610 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists" msgstr "ოპერატორის კლასი \"%s\" წვდომის მეთოდისთვის \"%s\" უკვე არსებობს" -#: commands/opclasscmds.c:637 +#: commands/opclasscmds.c:638 #, c-format msgid "could not make operator class \"%s\" be default for type %s" msgstr "ოპერატორის კლასის \"%s\" ტიპისთვის %s ნაგულისხმევად დაყენება შეუძლებელია" -#: commands/opclasscmds.c:640 +#: commands/opclasscmds.c:641 #, c-format msgid "Operator class \"%s\" already is the default." msgstr "ოპერატორის კლასი \"%s\" უკვე ნაგულისხმევია." -#: commands/opclasscmds.c:800 +#: commands/opclasscmds.c:801 #, c-format msgid "must be superuser to create an operator family" msgstr "ოპერატორის ოჯახის შესაქმნელად საჭიროა ზემომხმარებლის უფლებები" -#: commands/opclasscmds.c:860 +#: commands/opclasscmds.c:861 #, c-format msgid "must be superuser to alter an operator family" msgstr "ოპერატორის ოჯახის შესაცვლელად საჭიროა ზემომხმარებლის უფლებები" -#: commands/opclasscmds.c:918 +#: commands/opclasscmds.c:919 #, c-format msgid "operator argument types must be specified in ALTER OPERATOR FAMILY" msgstr "'ALTER OPERATOR FAMILY'-ში ოპერატორის არგუმენის ტიპების მითითება აუცილებელია" -#: commands/opclasscmds.c:993 +#: commands/opclasscmds.c:994 #, c-format msgid "STORAGE cannot be specified in ALTER OPERATOR FAMILY" msgstr "ALTER OPERATOR FAMILY-ში STORAGE-ს ვერ მიუთითებთ" -#: commands/opclasscmds.c:1127 +#: commands/opclasscmds.c:1128 #, c-format msgid "one or two argument types must be specified" msgstr "უნდა იყოს მითითებული ერთი ან ორი არგუმენტის ტიპი" -#: commands/opclasscmds.c:1153 +#: commands/opclasscmds.c:1154 #, c-format msgid "index operators must be binary" msgstr "ინდექსის ოპერატორები ბინარული უნდა იყოს" -#: commands/opclasscmds.c:1172 +#: commands/opclasscmds.c:1173 #, c-format msgid "access method \"%s\" does not support ordering operators" msgstr "სწვდომის მეთოდს (%s) ოპერატორების დალაგების მხარდაჭერა არ გააჩნია" -#: commands/opclasscmds.c:1183 +#: commands/opclasscmds.c:1184 #, c-format msgid "index search operators must return boolean" msgstr "ინდექსის ძებნის ოპერატორებმა ლოგიკური მნიშვნელობა უნდა დააბრუნონ" -#: commands/opclasscmds.c:1223 +#: commands/opclasscmds.c:1224 #, c-format msgid "associated data types for operator class options parsing functions must match opclass input type" msgstr "ოპერატორის კლასის პარამეტრების დამუშავების ფუნქციებისთვის ასოცირებული მონაცემის ტიპები opclass-ის შეყვანის ტიპებს უნდა ემთხვეოდეს" -#: commands/opclasscmds.c:1230 +#: commands/opclasscmds.c:1231 #, c-format msgid "left and right associated data types for operator class options parsing functions must match" msgstr "" -#: commands/opclasscmds.c:1238 +#: commands/opclasscmds.c:1239 #, c-format msgid "invalid operator class options parsing function" msgstr "კლასის კლასის პარამეტრების დამუშავების ფუნქციის არასწორი ოპერატორი" -#: commands/opclasscmds.c:1239 +#: commands/opclasscmds.c:1240 #, c-format msgid "Valid signature of operator class options parsing function is %s." msgstr "ოპერატორის კლასის პარამეტრების დამმუშავებელი ფუნქციის სწორი სიგნატურაა %s." -#: commands/opclasscmds.c:1258 +#: commands/opclasscmds.c:1259 #, c-format msgid "btree comparison functions must have two arguments" msgstr "ორობითი ხის შედარებით ფუნქციებს ორი არგუმენტი უნდა ჰქონდეთ" -#: commands/opclasscmds.c:1262 +#: commands/opclasscmds.c:1263 #, c-format msgid "btree comparison functions must return integer" msgstr "ორობითი ხის შედარებით ფუნქციებმა ორი მთელი რიცხვი უნდა დააბრუნოს" -#: commands/opclasscmds.c:1279 +#: commands/opclasscmds.c:1280 #, c-format msgid "btree sort support functions must accept type \"internal\"" msgstr "ორობითი ხის დალაგების ფუნქციები უნდა იღებდნენ ტიპს \"internal\"" -#: commands/opclasscmds.c:1283 +#: commands/opclasscmds.c:1284 #, c-format msgid "btree sort support functions must return void" msgstr "ორობითი ხის დალაგების ფუნქციებმა არაფერი უნდა დააბრუნონ" -#: commands/opclasscmds.c:1294 +#: commands/opclasscmds.c:1295 #, c-format msgid "btree in_range functions must have five arguments" msgstr "btree in_range ფუნქციებს 5 არგუმენტი უნდა ჰქონდეთ" -#: commands/opclasscmds.c:1298 +#: commands/opclasscmds.c:1299 #, c-format msgid "btree in_range functions must return boolean" msgstr "ორობითი ხის in_range ფუნქციები ლოგიკურ მნიშვნელობებს უნდა აბრუნებდნენ" -#: commands/opclasscmds.c:1314 +#: commands/opclasscmds.c:1315 #, c-format msgid "btree equal image functions must have one argument" msgstr "ორობითი ტოლობის ასლის ფუნქციებს ერთი არგუმენტი უნდა ჰქონდეთ" -#: commands/opclasscmds.c:1318 +#: commands/opclasscmds.c:1319 #, c-format msgid "btree equal image functions must return boolean" msgstr "ორობითი ტოლობის ასლის ფუნქციებმა ლოგიკური მნიშვნელობა უნდა დააბრუნონ" -#: commands/opclasscmds.c:1331 +#: commands/opclasscmds.c:1332 #, c-format msgid "btree equal image functions must not be cross-type" msgstr "ორობითი ტოლობის ასლის ფუნქციები ჯვარედინი ტიპის არ უნდა იყოს" -#: commands/opclasscmds.c:1341 +#: commands/opclasscmds.c:1342 #, c-format msgid "hash function 1 must have one argument" msgstr "ჰეშის ფუნქცია 1-ს ერთი არგუმენტი უნდა ჰქონდეს" -#: commands/opclasscmds.c:1345 +#: commands/opclasscmds.c:1346 #, c-format msgid "hash function 1 must return integer" msgstr "ჰეშის ფუნქცია 1-მა მთელი რიცხვი უნდა დააბრუნოს" -#: commands/opclasscmds.c:1352 +#: commands/opclasscmds.c:1353 #, c-format msgid "hash function 2 must have two arguments" msgstr "ჰეშის ფუნქცია 2-ს ორი არგუმენტი უნდა ჰქონდეს" -#: commands/opclasscmds.c:1356 +#: commands/opclasscmds.c:1357 #, c-format msgid "hash function 2 must return bigint" msgstr "ჰეშის ფუნქცია 2-მა bigint უნდა დააბრინოს" -#: commands/opclasscmds.c:1381 +#: commands/opclasscmds.c:1382 #, c-format msgid "associated data types must be specified for index support function" msgstr "ინდექსის მხარდაჭერის ფუნქციისთვის ასოცირებული მონაცემის ტიპების მითითება აუცილებელია" -#: commands/opclasscmds.c:1406 +#: commands/opclasscmds.c:1407 #, c-format msgid "function number %d for (%s,%s) appears more than once" msgstr "ფუნქციის ნომერი %d (%s,%s)-სთვის ერთზე მეტჯერ ჩნდება" -#: commands/opclasscmds.c:1413 +#: commands/opclasscmds.c:1414 #, c-format msgid "operator number %d for (%s,%s) appears more than once" msgstr "ოპერატორის ნომერი %d (%s,%s)-სთვის ერთზე მეტჯერ ჩნდება" -#: commands/opclasscmds.c:1459 +#: commands/opclasscmds.c:1460 #, c-format msgid "operator %d(%s,%s) already exists in operator family \"%s\"" msgstr "ოპერატორი %d(%s,%s) ოპერატორის ოჯახში \"%s\" უკვე არსებობს" -#: commands/opclasscmds.c:1565 +#: commands/opclasscmds.c:1589 #, c-format msgid "function %d(%s,%s) already exists in operator family \"%s\"" msgstr "ფუნქცია %d(%s,%s) ოპერატორის ოჯახში \"%s\" უკვე არსებობს" -#: commands/opclasscmds.c:1646 +#: commands/opclasscmds.c:1744 #, c-format msgid "operator %d(%s,%s) does not exist in operator family \"%s\"" msgstr "ოპერატორი %d(%s,%s) ოპერატორის ოჯახში \"%s\" არ არსებობს" -#: commands/opclasscmds.c:1686 +#: commands/opclasscmds.c:1784 #, c-format msgid "function %d(%s,%s) does not exist in operator family \"%s\"" msgstr "ფუნქცია %d(%s,%s) ოპერატორის ოჯახში \"%s\" არ არსებობს" -#: commands/opclasscmds.c:1717 +#: commands/opclasscmds.c:1815 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "ოპერატორის კლასი \"%s\" წვდომის მეთოდისთვის \"%s\" სქემაში \"%s\" უკვე არსებობს" -#: commands/opclasscmds.c:1740 +#: commands/opclasscmds.c:1838 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "ოპერატორის ოჯახი \"%s\" წვდომის მეთოდისთვის \"%s\" სქემაში \"%s\" უკვე არსებობს" @@ -9301,7 +9234,7 @@ msgid "operator attribute \"%s\" cannot be changed if it has already been set" msgstr "ოპერატორის ატრიბუტს \"%s\", თუ ის უკვე დაყენებულია, ვერ შეცვლით" -#: commands/policy.c:86 commands/policy.c:379 commands/statscmds.c:146 commands/tablecmds.c:1728 commands/tablecmds.c:2328 commands/tablecmds.c:3675 commands/tablecmds.c:6613 commands/tablecmds.c:9645 commands/tablecmds.c:17665 commands/tablecmds.c:17700 commands/trigger.c:316 commands/trigger.c:1332 commands/trigger.c:1442 rewrite/rewriteDefine.c:268 rewrite/rewriteDefine.c:779 rewrite/rewriteRemove.c:74 +#: commands/policy.c:86 commands/policy.c:379 commands/statscmds.c:146 commands/tablecmds.c:1740 commands/tablecmds.c:2340 commands/tablecmds.c:3702 commands/tablecmds.c:6605 commands/tablecmds.c:9637 commands/tablecmds.c:17772 commands/tablecmds.c:17807 commands/trigger.c:316 commands/trigger.c:1332 commands/trigger.c:1442 rewrite/rewriteDefine.c:268 rewrite/rewriteDefine.c:779 rewrite/rewriteRemove.c:74 #, c-format msgid "permission denied: \"%s\" is a system catalog" msgstr "წვდომა აკრძალულია: '%s\" სისტემური კატალოგია" @@ -9351,7 +9284,7 @@ msgid "cannot create a cursor WITH HOLD within security-restricted operation" msgstr "უსაფრთხოებაზე-შეზღუდული ოპერაციის შიგნით კურსორს WITH HOLD ვერ შექმნით" -#: commands/portalcmds.c:189 commands/portalcmds.c:242 executor/execCurrent.c:70 utils/adt/xml.c:2873 utils/adt/xml.c:3043 +#: commands/portalcmds.c:189 commands/portalcmds.c:242 executor/execCurrent.c:70 utils/adt/xml.c:2936 utils/adt/xml.c:3106 #, c-format msgid "cursor \"%s\" does not exist" msgstr "კურსორი \"%s\" არ არსებობს" @@ -9396,7 +9329,7 @@ msgid "must be superuser to create custom procedural language" msgstr "პროცედურული ენის ხელით მისათითებლად ზემომხმარებლის პრივილეგიებია საჭირო" -#: commands/publicationcmds.c:124 postmaster/postmaster.c:1108 postmaster/postmaster.c:1210 utils/init/miscinit.c:1811 +#: commands/publicationcmds.c:124 postmaster/postmaster.c:1108 postmaster/postmaster.c:1210 utils/init/miscinit.c:1865 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "არასწორი სიის სინტაქსი პარამეტრში \"%s\"" @@ -9630,122 +9563,122 @@ msgid "cannot set security label on relation \"%s\"" msgstr "ურთიერთობაზე \"%s\" უსაფრთხოების ჭდის დადება შეუძლებელია" -#: commands/sequence.c:741 +#: commands/sequence.c:748 #, c-format msgid "nextval: reached maximum value of sequence \"%s\" (%lld)" msgstr "nextval: მიღწეულია მაქსიმალური მნიშვნელობა მიმდევრობისთვის \"%s\" (%lld)" -#: commands/sequence.c:760 +#: commands/sequence.c:767 #, c-format msgid "nextval: reached minimum value of sequence \"%s\" (%lld)" msgstr "nextval: მიღწეულია მინიმალური მნიშვნელობა მიმდევრობისთვის \"%s\" (%lld)" -#: commands/sequence.c:879 +#: commands/sequence.c:886 #, c-format msgid "currval of sequence \"%s\" is not yet defined in this session" msgstr "მიმდევრობის \"%s\" მიმდინარე მნიშვნელობა ამ სესიაში ჯერ აღწერილი არაა" -#: commands/sequence.c:898 commands/sequence.c:904 +#: commands/sequence.c:905 commands/sequence.c:911 #, c-format msgid "lastval is not yet defined in this session" msgstr "ამ სესიაში lastval ჯერ აღწერილი არაა" -#: commands/sequence.c:984 +#: commands/sequence.c:991 #, c-format msgid "setval: value %lld is out of bounds for sequence \"%s\" (%lld..%lld)" msgstr "setval: მნიშვნელობა %lld საზღვრებს გარეთაა მიმდევრობისთვის \"%s\" (%lld..%lld)" -#: commands/sequence.c:1347 +#: commands/sequence.c:1357 #, c-format msgid "invalid sequence option SEQUENCE NAME" msgstr "მიმდევრობის არასწორი პარამეტრი SEQUENCE NAME" -#: commands/sequence.c:1373 +#: commands/sequence.c:1383 #, c-format msgid "identity column type must be smallint, integer, or bigint" msgstr "იდენტიფიკაციის სვეტის ტიპი smallint, integer ან bigint უნდა იყოს" -#: commands/sequence.c:1374 +#: commands/sequence.c:1384 #, c-format msgid "sequence type must be smallint, integer, or bigint" msgstr "მიმდევრობის ტიპი smallint, integer ან bigint უნდა იყოს" -#: commands/sequence.c:1408 +#: commands/sequence.c:1418 #, c-format msgid "INCREMENT must not be zero" msgstr "INCREMENT ნული არ უნდა იყოს" -#: commands/sequence.c:1456 +#: commands/sequence.c:1466 #, c-format msgid "MAXVALUE (%lld) is out of range for sequence data type %s" msgstr "MAXVALUE (%lld) მიმდევრობის მონაცემის ტიპის დიაპაზონს გარეთაა %s" -#: commands/sequence.c:1488 +#: commands/sequence.c:1498 #, c-format msgid "MINVALUE (%lld) is out of range for sequence data type %s" msgstr "MINVALUE (%lld) მიმდევრობის მონაცემის ტიპის დიაპაზონს გარეთაა %s" -#: commands/sequence.c:1496 +#: commands/sequence.c:1506 #, c-format msgid "MINVALUE (%lld) must be less than MAXVALUE (%lld)" msgstr "MINVALUE (%lld)-ი MAXVALUE (%lld)-ზე ნაკლები არ უნდა იყოს" -#: commands/sequence.c:1517 +#: commands/sequence.c:1527 #, c-format msgid "START value (%lld) cannot be less than MINVALUE (%lld)" msgstr "START -ის მნიშვნელობა (%lld)-ი MINVALUE (%lld)-ზე ნაკლები არ უნდა იყოს" -#: commands/sequence.c:1523 +#: commands/sequence.c:1533 #, c-format msgid "START value (%lld) cannot be greater than MAXVALUE (%lld)" msgstr "START -ის მნიშვნელობა (%lld)-ი MAXVALUE (%lld)-ზე მეტი არ უნდა იყოს" -#: commands/sequence.c:1547 +#: commands/sequence.c:1557 #, c-format msgid "RESTART value (%lld) cannot be less than MINVALUE (%lld)" msgstr "RESTART -ის მნიშვნელობა (%lld) MINVALUE (%lld)-ზე ნაკლები არ უნდა იყოს" -#: commands/sequence.c:1553 +#: commands/sequence.c:1563 #, c-format msgid "RESTART value (%lld) cannot be greater than MAXVALUE (%lld)" msgstr "RESTART -ის მნიშვნელობა (%lld) MAXVALUE (%lld)-ზე დიდი არ უნდა იყოს" -#: commands/sequence.c:1564 +#: commands/sequence.c:1574 #, c-format msgid "CACHE (%lld) must be greater than zero" msgstr "CACHE (%lld) ნულზე მეტი უნდა იყოს" -#: commands/sequence.c:1600 +#: commands/sequence.c:1610 #, c-format msgid "invalid OWNED BY option" msgstr "არასწორი პარამეტრი OWNED BY" -#: commands/sequence.c:1601 +#: commands/sequence.c:1611 #, c-format msgid "Specify OWNED BY table.column or OWNED BY NONE." msgstr "მიუთითეთ OWNED BY ცხრილი.სვეტი ან OWNED BY NONE." -#: commands/sequence.c:1626 +#: commands/sequence.c:1636 #, c-format msgid "sequence cannot be owned by relation \"%s\"" msgstr "მიმდევრობის მფლობელი ურთიერთობა %s ვერ იქნება" -#: commands/sequence.c:1634 +#: commands/sequence.c:1644 #, c-format msgid "sequence must have same owner as table it is linked to" msgstr "მიმდევრობას იგივე მფლობელი უნდა ჰყავდეს, რაც ცხრილს, რომელზედაც ის მიბმულია" -#: commands/sequence.c:1638 +#: commands/sequence.c:1648 #, c-format msgid "sequence must be in same schema as table it is linked to" msgstr "მიმდევრობას იგივე სქემა უნდა ჰქონდეს, რაც ცხრილს, რომელზედაც ის მიბმულია" -#: commands/sequence.c:1660 +#: commands/sequence.c:1670 #, c-format msgid "cannot change ownership of identity sequence" msgstr "იდენტიფიკაციის მიმდევრობის მფლობელის შეცვლა შეუძლებელია" -#: commands/sequence.c:1661 commands/tablecmds.c:14387 commands/tablecmds.c:17081 +#: commands/sequence.c:1671 commands/tablecmds.c:14486 commands/tablecmds.c:17181 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "მიმდევრობა %s მიბმულია ცხრილზე \"%s\"." @@ -9815,12 +9748,12 @@ msgid "duplicate expression in statistics definition" msgstr "დუბლირებული გამოსახულება სტატისტიკის აღწერაში" -#: commands/statscmds.c:628 commands/tablecmds.c:8628 +#: commands/statscmds.c:628 commands/tablecmds.c:8620 #, c-format msgid "statistics target %d is too low" msgstr "სტატისტიკის სამიზნე %d ძალიან დაბალია" -#: commands/statscmds.c:636 commands/tablecmds.c:8636 +#: commands/statscmds.c:636 commands/tablecmds.c:8628 #, c-format msgid "lowering statistics target to %d" msgstr "სტატისტიკის სამიზნის ჩამოწევა %d-მდე" @@ -9835,7 +9768,7 @@ msgid "unrecognized subscription parameter: \"%s\"" msgstr "უცნობი გამოწერის პარამეტრი: \"%s\"" -#: commands/subscriptioncmds.c:340 replication/pgoutput/pgoutput.c:397 +#: commands/subscriptioncmds.c:340 replication/pgoutput/pgoutput.c:404 #, c-format msgid "unrecognized origin value: \"%s\"" msgstr "\"origin\"-ის უცნობი მნიშვნელობა: \"%s\"" @@ -9911,8 +9844,8 @@ #: commands/subscriptioncmds.c:1233 #, c-format -msgid "cannot set %s for a subscription that does not have a slot name" -msgstr "გამოწერებისთვის, რომლებსაც სლოტის სახელი არ აქვთ, %s-ს ვერ დავაყენებ" +msgid "cannot set option \"%s\" for a subscription that does not have a slot name" +msgstr "გამოწერებისთვის, რომლებსაც სლოტის სახელი არ აქვთ, პარამეტრს %s ვერ დავაყენებ" #: commands/subscriptioncmds.c:1279 #, c-format @@ -10007,7 +9940,7 @@ msgid "Verify that initial data copied from the publisher tables did not come from other origins." msgstr "" -#: commands/subscriptioncmds.c:2223 replication/logical/tablesync.c:906 replication/pgoutput/pgoutput.c:1117 +#: commands/subscriptioncmds.c:2223 replication/logical/tablesync.c:906 replication/pgoutput/pgoutput.c:1143 #, c-format msgid "cannot use different column lists for table \"%s.%s\" in different publications" msgstr "" @@ -10104,7 +10037,7 @@ msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "მატერიალიზებული ხედის წასაშლელად გამოიყენეთ DROP MATERIALIZED VIEW." -#: commands/tablecmds.c:279 commands/tablecmds.c:303 commands/tablecmds.c:19627 parser/parse_utilcmd.c:2226 +#: commands/tablecmds.c:279 commands/tablecmds.c:303 commands/tablecmds.c:19805 parser/parse_utilcmd.c:2251 #, c-format msgid "index \"%s\" does not exist" msgstr "ინდექსი \"%s\" არ არსებობს" @@ -10127,7 +10060,7 @@ msgid "Use DROP TYPE to remove a type." msgstr "ტიპის წასაშლელად გამოიყენეთ DROP TYPE." -#: commands/tablecmds.c:291 commands/tablecmds.c:14226 commands/tablecmds.c:16786 +#: commands/tablecmds.c:291 commands/tablecmds.c:14325 commands/tablecmds.c:16886 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "გარე ცხრილი \"%s\" არ არსებობს" @@ -10141,1390 +10074,1385 @@ msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "გარე ცხრილის წასაშლელად DROP FOREIGN TABLE გამოიყენეთ." -#: commands/tablecmds.c:722 +#: commands/tablecmds.c:734 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMIT მხოლოდ დროებით ცხრილებზე გამოიყენება" -#: commands/tablecmds.c:753 +#: commands/tablecmds.c:765 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "უსაფრთხოებაზე-შეზღუდული ოპერაციის შიგნით დროებითი ცხრილის შექმნა შეუძლებელია" -#: commands/tablecmds.c:789 commands/tablecmds.c:15645 +#: commands/tablecmds.c:801 commands/tablecmds.c:15745 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "ურთიერთობა \"%s\" მემკვირდრეობით ერზე მეტჯერ იქნებოდა მიღებული" -#: commands/tablecmds.c:1055 +#: commands/tablecmds.c:1067 #, c-format msgid "\"%s\" is not partitioned" msgstr "\"%s\" დაყოფილი არაა" -#: commands/tablecmds.c:1149 +#: commands/tablecmds.c:1161 #, c-format msgid "cannot partition using more than %d columns" msgstr "%d-ზე მეტი სვეტის გამოყენებით დაყოფა შეუძლებელია" -#: commands/tablecmds.c:1205 +#: commands/tablecmds.c:1217 #, c-format msgid "cannot create foreign partition of partitioned table \"%s\"" msgstr "დაყოფილი ცხრილის (%s) გარე დანაყოფს ვერ შექმნით" -#: commands/tablecmds.c:1207 +#: commands/tablecmds.c:1219 #, c-format msgid "Table \"%s\" contains indexes that are unique." msgstr "ცხრილი %s შეიცავს სვეტებს, რომლებიც უნიკალურია." -#: commands/tablecmds.c:1326 commands/tablecmds.c:13242 +#: commands/tablecmds.c:1338 commands/tablecmds.c:13341 #, c-format msgid "too many array dimensions" msgstr "მასივის მეტისმეტად ბევრი განზომილება" -#: commands/tablecmds.c:1331 parser/parse_clause.c:774 parser/parse_relation.c:1912 +#: commands/tablecmds.c:1343 parser/parse_clause.c:774 parser/parse_relation.c:1912 #, c-format msgid "column \"%s\" cannot be declared SETOF" msgstr "სვეტი \"%s\" არ შეიძლება გამოცხადდეს SETOF" -#: commands/tablecmds.c:1477 +#: commands/tablecmds.c:1489 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY-ს ერთზე მეტი ობიექტის წაშლის მხარდაჭერა არ გააჩნია" -#: commands/tablecmds.c:1481 +#: commands/tablecmds.c:1493 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY-ს CASCADE-ის მხარდაჭერა არ გააჩნია" -#: commands/tablecmds.c:1585 +#: commands/tablecmds.c:1597 #, c-format msgid "cannot drop partitioned index \"%s\" concurrently" msgstr "დაყოფილ ინდექსს \"%s\" პარალელურად ვერ წაშლით" -#: commands/tablecmds.c:1873 +#: commands/tablecmds.c:1885 #, c-format msgid "cannot truncate only a partitioned table" msgstr "თვითონ დაყოფილი ცხრილის დაცარიელება შეუძლებელია" -#: commands/tablecmds.c:1874 +#: commands/tablecmds.c:1886 #, c-format msgid "Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions directly." msgstr "არ მიუთითოთ საკვანძო სიტყვა ONLY, ან პირდაპირ დანაყოფებზე გამოიყენეთ TRUNCATE ONLY." -#: commands/tablecmds.c:1947 +#: commands/tablecmds.c:1959 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "მოკვეთა გადაეცემა ცხრილამდე %s" -#: commands/tablecmds.c:2308 +#: commands/tablecmds.c:2320 #, c-format msgid "cannot truncate foreign table \"%s\"" msgstr "გარე ცხრილის (\"%s\") მოკვეთის შეცდომა" -#: commands/tablecmds.c:2365 +#: commands/tablecmds.c:2377 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "სხვა სესიების დროებითი ცხრილების მოკვეთის შეცდომა" -#: commands/tablecmds.c:2594 commands/tablecmds.c:15542 +#: commands/tablecmds.c:2606 commands/tablecmds.c:15642 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "დაყოფილი ცხრილიდან \"%s\" მემკვიდრეობის მიღება შეუძლებელია" -#: commands/tablecmds.c:2599 +#: commands/tablecmds.c:2611 #, c-format msgid "cannot inherit from partition \"%s\"" msgstr "დანაყოფიდან \"%s\" მემკვიდრეობის მიღება შეუძლებელია" -#: commands/tablecmds.c:2607 parser/parse_utilcmd.c:2456 parser/parse_utilcmd.c:2598 +#: commands/tablecmds.c:2619 parser/parse_utilcmd.c:2481 parser/parse_utilcmd.c:2623 #, c-format msgid "inherited relation \"%s\" is not a table or foreign table" msgstr "მემკვიდრეობით მიღებული ურთიერთობა \"%s\" ცხრილს ან გარე ცხრილს არ წარმოადგენს" -#: commands/tablecmds.c:2619 commands/tablecmds.c:20391 +#: commands/tablecmds.c:2631 #, c-format msgid "cannot create a temporary relation as partition of permanent relation \"%s\"" msgstr "შეუძლებელია შექმნათ დროებით ურთიერთობა, რომელიც მუდმივი ურთიერთობის \"%s\" დანაყოფი იქნება" -#: commands/tablecmds.c:2628 commands/tablecmds.c:15521 +#: commands/tablecmds.c:2640 commands/tablecmds.c:15621 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "დროებითი ურთიერთობიდან (%s) მემკვიდრეობითობა შეუძლებელია" -#: commands/tablecmds.c:2638 commands/tablecmds.c:15529 +#: commands/tablecmds.c:2650 commands/tablecmds.c:15629 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "სხვა სესიის დროებითი ურთიერთობიდან მემკვიდრეობითობა შეუძლებელია" -#: commands/tablecmds.c:2779 commands/tablecmds.c:2833 commands/tablecmds.c:12925 parser/parse_utilcmd.c:1240 parser/parse_utilcmd.c:1283 parser/parse_utilcmd.c:1710 parser/parse_utilcmd.c:1818 +#: commands/tablecmds.c:2791 commands/tablecmds.c:2845 commands/tablecmds.c:13024 parser/parse_utilcmd.c:1265 parser/parse_utilcmd.c:1308 parser/parse_utilcmd.c:1735 parser/parse_utilcmd.c:1843 #, c-format msgid "cannot convert whole-row table reference" msgstr "" -#: commands/tablecmds.c:2780 parser/parse_utilcmd.c:1241 +#: commands/tablecmds.c:2792 parser/parse_utilcmd.c:1266 #, c-format msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." msgstr "" -#: commands/tablecmds.c:2834 parser/parse_utilcmd.c:1284 +#: commands/tablecmds.c:2846 parser/parse_utilcmd.c:1309 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "" -#: commands/tablecmds.c:2944 commands/tablecmds.c:3215 +#: commands/tablecmds.c:2956 commands/tablecmds.c:3227 #, c-format msgid "column \"%s\" inherits from generated column but specifies default" msgstr "ცხრილი \"%s\" მემკვიდრეობით იღებს გენერირებული ცხრილიდან, მაგრამ ნაგულისხმევიც მითითებულია" -#: commands/tablecmds.c:2949 commands/tablecmds.c:3220 +#: commands/tablecmds.c:2961 commands/tablecmds.c:3232 #, c-format msgid "column \"%s\" inherits from generated column but specifies identity" msgstr "ცხრილი \"%s\" მემკვიდრეობით იღებს გენერირებული ცხრილიდან, მაგრამ იდენტიფიკაციაც მითითებულია" -#: commands/tablecmds.c:2957 commands/tablecmds.c:3228 +#: commands/tablecmds.c:2969 commands/tablecmds.c:3240 #, c-format msgid "child column \"%s\" specifies generation expression" msgstr "შვილი სვეტისთვის \"%s\" მითითებულია გენერაციის გამოსახულება" -#: commands/tablecmds.c:2959 commands/tablecmds.c:3230 +#: commands/tablecmds.c:2971 commands/tablecmds.c:3242 #, c-format msgid "A child table column cannot be generated unless its parent column is." msgstr "შვილი ცხრილის სვეტი არ შეიძლება, გენერირებული იყოს, თუ მისი მშობელიც არაა." -#: commands/tablecmds.c:3005 +#: commands/tablecmds.c:3017 #, c-format msgid "column \"%s\" inherits conflicting generation expressions" msgstr "სვეტი \"%s\" მემკვიდრეობით კონფლიქტის მქონე გენერაციის გამოსახულებას იღებს" -#: commands/tablecmds.c:3007 +#: commands/tablecmds.c:3019 #, c-format msgid "To resolve the conflict, specify a generation expression explicitly." msgstr "კონფლიქტის გადასაჭრელად გენერაციის გამოსახულება აშკარად მიუთითეთ." -#: commands/tablecmds.c:3011 +#: commands/tablecmds.c:3023 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "სვეტი \"%s\" მემკვიდრეობით ურთიერთგამომრიცხავ ნაგულისხმევ მნიშვნელობებს იღებს" -#: commands/tablecmds.c:3013 +#: commands/tablecmds.c:3025 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "კონფლიქტის გადასაჭრელად ნაგულისხმევი აშკარად მიუთითეთ." -#: commands/tablecmds.c:3068 +#: commands/tablecmds.c:3080 #, c-format msgid "check constraint name \"%s\" appears multiple times but with different expressions" msgstr "შემოწმების შეზღუდვის სახელი \"%s\" ბევრჯერ გამოჩნდა, მაგრამ სხვადასხვა გამოსახულებებთან ერთად" -#: commands/tablecmds.c:3119 +#: commands/tablecmds.c:3131 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "სვეტის (\"%s\") შერწყმა მემკვიდრეობითი აღწერით" -#: commands/tablecmds.c:3123 +#: commands/tablecmds.c:3135 #, c-format msgid "moving and merging column \"%s\" with inherited definition" msgstr "" -#: commands/tablecmds.c:3124 +#: commands/tablecmds.c:3136 #, c-format msgid "User-specified column moved to the position of the inherited column." msgstr "" -#: commands/tablecmds.c:3136 +#: commands/tablecmds.c:3148 #, c-format msgid "column \"%s\" has a type conflict" msgstr "ტიპის კონფლიქტი სვეტში \"%s\"" -#: commands/tablecmds.c:3138 commands/tablecmds.c:3172 commands/tablecmds.c:3188 commands/tablecmds.c:3295 commands/tablecmds.c:3328 commands/tablecmds.c:3344 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:223 +#: commands/tablecmds.c:3150 commands/tablecmds.c:3184 commands/tablecmds.c:3200 commands/tablecmds.c:3307 commands/tablecmds.c:3340 commands/tablecmds.c:3356 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:223 #, c-format msgid "%s versus %s" msgstr "%s-ი %s-ის წინააღმდეგ" -#: commands/tablecmds.c:3150 +#: commands/tablecmds.c:3162 #, c-format msgid "column \"%s\" has a collation conflict" msgstr "კოლაციის კონფლიქტი სვეტში \"%s\"" -#: commands/tablecmds.c:3152 commands/tablecmds.c:3314 commands/tablecmds.c:7088 +#: commands/tablecmds.c:3164 commands/tablecmds.c:3326 commands/tablecmds.c:7080 #, c-format msgid "\"%s\" versus \"%s\"" msgstr "'%s\" -ი \"%s\"-ის წინააღმდეგ" -#: commands/tablecmds.c:3170 +#: commands/tablecmds.c:3182 #, c-format msgid "column \"%s\" has a storage parameter conflict" msgstr "საცავის პარამეტრის კონფლიქტი სვეტში \"%s\"" -#: commands/tablecmds.c:3186 commands/tablecmds.c:3342 +#: commands/tablecmds.c:3198 commands/tablecmds.c:3354 #, c-format msgid "column \"%s\" has a compression method conflict" msgstr "სვეტის (%s) შეკუმშვის მეთოდის კონფლიქტი" -#: commands/tablecmds.c:3281 +#: commands/tablecmds.c:3293 #, c-format msgid "merging multiple inherited definitions of column \"%s\"" msgstr "მიმდინარეობს სვეტის (\"%s\") მიერ მემკვიდრეობით მიღებული აღწერების შერწყმა" -#: commands/tablecmds.c:3293 +#: commands/tablecmds.c:3305 #, c-format msgid "inherited column \"%s\" has a type conflict" msgstr "მემკივდრეობითი სვეტის \"%s\" ტიპის კონფლიქტი" -#: commands/tablecmds.c:3312 +#: commands/tablecmds.c:3324 #, c-format msgid "inherited column \"%s\" has a collation conflict" msgstr "მემკივდრეობითი სვეტის \"%s\" კოლაციის კონფლიქტი" -#: commands/tablecmds.c:3326 +#: commands/tablecmds.c:3338 #, c-format msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "მემკივდრეობითი სვეტის \"%s\" საცავის პარამეტრის კონფლიქტი" -#: commands/tablecmds.c:3354 +#: commands/tablecmds.c:3366 #, c-format msgid "inherited column \"%s\" has a generation conflict" msgstr "მემკივდრეობითი სვეტის \"%s\" თაობის კონფლიქტი" -#: commands/tablecmds.c:3573 +#: commands/tablecmds.c:3597 #, c-format msgid "cannot move temporary tables of other sessions" msgstr "სხვა სესიების დროებითი ცხრილების გადაადგილება შეუძლებელია" -#: commands/tablecmds.c:3643 +#: commands/tablecmds.c:3670 #, c-format msgid "cannot rename column of typed table" msgstr "ტიპიზირებული ცხრილის სვეტის გარდაქმნა შეუძლებელია" -#: commands/tablecmds.c:3662 +#: commands/tablecmds.c:3689 #, c-format msgid "cannot rename columns of relation \"%s\"" msgstr "ურთიერთობის (\"%s\") სვეტების სახელის გადარქმევა შეუძლებელია" -#: commands/tablecmds.c:3757 +#: commands/tablecmds.c:3784 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "მემკვიდრეობით მიღებული სვეტს (\"%s\") სახელი შვილ ცხრილებშიც უნდა გადაერქვას" -#: commands/tablecmds.c:3789 +#: commands/tablecmds.c:3816 #, c-format msgid "cannot rename system column \"%s\"" msgstr "სისტემური სვეტის \"%s\" გადარქმევა შეუძლებელია" -#: commands/tablecmds.c:3804 +#: commands/tablecmds.c:3831 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "მემკვიდრეობითი სვეტის (\"%s\") სახელის გადარქმევა შეუძლებელია" -#: commands/tablecmds.c:3956 +#: commands/tablecmds.c:3983 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "მემკვიდრეობით მიღებული შეზღუდვას (\"%s\") სახელი შვილ ცხრილებშიც უნდა გადაერქვას" -#: commands/tablecmds.c:3963 +#: commands/tablecmds.c:3990 #, c-format msgid "cannot rename inherited constraint \"%s\"" msgstr "მემკვიდრეობითი შეზღუდვის (\"%s\") სახელის გადარქმევა შეუძლებელია" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:4260 +#: commands/tablecmds.c:4290 #, c-format msgid "cannot %s \"%s\" because it is being used by active queries in this session" msgstr "%s-ის \"%s\" შეუძლებელია, რადგან ის ამ სესიაში აქტიური მოთხოვნების მიერ გამოიყენება" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:4269 +#: commands/tablecmds.c:4299 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "%s-ის \"%s\" შეუძლებელია, რადგან მას დარჩენილი ტრიგერის მოვლენები გააჩნია" -#: commands/tablecmds.c:4295 +#: commands/tablecmds.c:4325 #, c-format msgid "cannot alter temporary tables of other sessions" msgstr "სხვა სესიების დროებითი ცხრილების შეცვლა შეუძლებელია" -#: commands/tablecmds.c:4776 +#: commands/tablecmds.c:4798 #, c-format msgid "cannot alter partition \"%s\" with an incomplete detach" msgstr "არასრული მოხსნის მქონე დანაყოფის \"%s\" შეცვლა შეუძლებელია" -#: commands/tablecmds.c:4980 commands/tablecmds.c:4995 +#: commands/tablecmds.c:5002 commands/tablecmds.c:5017 #, c-format msgid "cannot change persistence setting twice" msgstr "შენახვის პარამეტრების ორჯერ შეცვლა შეუძლებელია" -#: commands/tablecmds.c:5016 +#: commands/tablecmds.c:5038 #, c-format msgid "cannot have multiple SET ACCESS METHOD subcommands" msgstr "ერთზე მეტი SET ACCESS METHOD ქვებრძანება ვერ გექნებათ" -#: commands/tablecmds.c:5772 +#: commands/tablecmds.c:5768 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "სისტემური შეერთების \"%s\" გადაწერა შეუძლებელია" -#: commands/tablecmds.c:5778 +#: commands/tablecmds.c:5774 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "კატალოგის ცხრილად გამოყენებული ცხრილის \"%s\" თავიდან ჩაწერა შეუძლებელია" -#: commands/tablecmds.c:5790 +#: commands/tablecmds.c:5786 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "სხვა სესიების დროებით ცხრილებს ვერ გადააწერთ" -#: commands/tablecmds.c:6285 +#: commands/tablecmds.c:6281 #, c-format msgid "column \"%s\" of relation \"%s\" contains null values" msgstr "ურთიერთობის %2$s სვეტი %1$s ნულოვან მნიშვნელობებს შეიცავს" -#: commands/tablecmds.c:6302 +#: commands/tablecmds.c:6298 #, c-format msgid "check constraint \"%s\" of relation \"%s\" is violated by some row" msgstr "ურთიერთობის (\"%2$s\") შემოწმების შეზღუდვა \"%1$s\" რომელიღაც მწკრივის მიერ ირღვევა" -#: commands/tablecmds.c:6321 partitioning/partbounds.c:3388 +#: commands/tablecmds.c:6317 partitioning/partbounds.c:3387 #, c-format msgid "updated partition constraint for default partition \"%s\" would be violated by some row" msgstr "განახებული დანაყოფის შეზღუდვა ნაგულისხმევი დანაყოფისთვის \"%s\" რომელიღაც მწკრივის მიერ დაირღვეოდა" -#: commands/tablecmds.c:6327 +#: commands/tablecmds.c:6323 #, c-format msgid "partition constraint of relation \"%s\" is violated by some row" msgstr "ურთიერთობის (\"%s\") დანაყოფის შეზღუდვა რომელიღაც მწკრივის მიერ ირღვევა" #. translator: %s is a group of some SQL keywords -#: commands/tablecmds.c:6596 +#: commands/tablecmds.c:6588 #, c-format msgid "ALTER action %s cannot be performed on relation \"%s\"" msgstr "ALTER-ის ქმედებას %s ურთიერთობაზე \"%s\" ვერ შეასრულებთ" -#: commands/tablecmds.c:6851 commands/tablecmds.c:6858 +#: commands/tablecmds.c:6843 commands/tablecmds.c:6850 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "ტიპის \"%s\" შეცვლა შეუძლებელია, რადგან მას სვეტი \"%s.%s\" იყენებს" -#: commands/tablecmds.c:6865 +#: commands/tablecmds.c:6857 #, c-format msgid "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" msgstr "გარე ცხრილის \"%s\" შეცვლა შეუძლებელია, რადგან სვეტი \"%s.%s\" თავისი მწკრივის ტიპს იყენებს" -#: commands/tablecmds.c:6872 +#: commands/tablecmds.c:6864 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "ცხრილის \"%s\" შეცვლა შეუძლებელია, რადგან სვეტი \"%s.%s\" თავისი მწკრივის ტიპს იყენებს" -#: commands/tablecmds.c:6928 +#: commands/tablecmds.c:6920 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "ტიპის \"%s\" შეცვლა შეუძლებელია, რადგან ის ტიპიზირებული ცხრილის ტიპისაა" -#: commands/tablecmds.c:6930 +#: commands/tablecmds.c:6922 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "ტიპიზირებული ცხრილების ჩასასწორებლად გამოიყენეთ ALTER ... CASCADE." -#: commands/tablecmds.c:6976 +#: commands/tablecmds.c:6968 #, c-format msgid "type %s is not a composite type" msgstr "ტიპი %s კომპოზიტური არაა" -#: commands/tablecmds.c:7003 +#: commands/tablecmds.c:6995 #, c-format msgid "cannot add column to typed table" msgstr "ტიპიზირებულ ცხრილში სვეტების ჩამატება შეუძლებელია" -#: commands/tablecmds.c:7051 +#: commands/tablecmds.c:7043 #, c-format msgid "cannot add column to a partition" msgstr "დანაყოფს სვეტს ვერ დაუმატებთ" -#: commands/tablecmds.c:7080 commands/tablecmds.c:15760 +#: commands/tablecmds.c:7072 commands/tablecmds.c:15860 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "შვილ ცხრილს \"%s\" სვეტისთვის \"%s\" სხვა ტიპი გააჩნია" -#: commands/tablecmds.c:7086 commands/tablecmds.c:15766 +#: commands/tablecmds.c:7078 commands/tablecmds.c:15866 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "შვილ ცხრილს \"%s\" სვეტისთვის \"%s\" სხვა კოლაცია გააჩნია" -#: commands/tablecmds.c:7104 +#: commands/tablecmds.c:7096 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "მიმდინარეობს აღწერის შერწყმა სვეტისთვის \"%s\" შვილისთვის \"%s\"" -#: commands/tablecmds.c:7157 +#: commands/tablecmds.c:7149 #, c-format msgid "cannot recursively add identity column to table that has child tables" msgstr "ცხრილისთვის, რომელსაც შვილი ცხრილები გააჩნია, იდენტიფიკაციის სვეტის რეკურსიული დამატება შეუძლებელია" -#: commands/tablecmds.c:7370 +#: commands/tablecmds.c:7362 #, c-format msgid "column must be added to child tables too" msgstr "სვეტი შვილ ცხრილებსაც უნდა დაემატოთ" -#: commands/tablecmds.c:7448 +#: commands/tablecmds.c:7440 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "ურთიერთობის (%2$s) სვეტი %1$s უკვე რსებობს. გამოტოვება" -#: commands/tablecmds.c:7455 +#: commands/tablecmds.c:7447 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "ურთიერთობის (%2$s) სვეტი %1$s უკვე რსებობს" -#: commands/tablecmds.c:7521 commands/tablecmds.c:12564 +#: commands/tablecmds.c:7513 commands/tablecmds.c:12652 #, c-format msgid "cannot remove constraint from only the partitioned table when partitions exist" msgstr "შეზღუდვის წაშლა მხოლოდ დაყოფილი ცხრილიდან მაშინ, როცა დანაყოფები არსებობს, შეუძლებელია" -#: commands/tablecmds.c:7522 commands/tablecmds.c:7836 commands/tablecmds.c:8014 commands/tablecmds.c:8121 commands/tablecmds.c:8238 commands/tablecmds.c:9057 commands/tablecmds.c:12565 +#: commands/tablecmds.c:7514 commands/tablecmds.c:7828 commands/tablecmds.c:8006 commands/tablecmds.c:8113 commands/tablecmds.c:8230 commands/tablecmds.c:9049 commands/tablecmds.c:12653 #, c-format msgid "Do not specify the ONLY keyword." msgstr "ONLY არ მიუთითოთ." -#: commands/tablecmds.c:7558 commands/tablecmds.c:7762 commands/tablecmds.c:7904 commands/tablecmds.c:8036 commands/tablecmds.c:8165 commands/tablecmds.c:8259 commands/tablecmds.c:8360 commands/tablecmds.c:8517 commands/tablecmds.c:8670 commands/tablecmds.c:8751 commands/tablecmds.c:8885 commands/tablecmds.c:12718 commands/tablecmds.c:14249 commands/tablecmds.c:16875 +#: commands/tablecmds.c:7550 commands/tablecmds.c:7754 commands/tablecmds.c:7896 commands/tablecmds.c:8028 commands/tablecmds.c:8157 commands/tablecmds.c:8251 commands/tablecmds.c:8352 commands/tablecmds.c:8509 commands/tablecmds.c:8662 commands/tablecmds.c:8743 commands/tablecmds.c:8877 commands/tablecmds.c:12806 commands/tablecmds.c:14348 commands/tablecmds.c:16975 #, c-format msgid "cannot alter system column \"%s\"" msgstr "სისტემური სვეტის \"%s\" შეცვლა შეუძლებელია" -#: commands/tablecmds.c:7564 commands/tablecmds.c:7910 +#: commands/tablecmds.c:7556 commands/tablecmds.c:7902 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "ურთიერთობის \"%2$s\" სვეტი \"%1$s\" იდენტიფიკატორი სვეტია" -#: commands/tablecmds.c:7605 +#: commands/tablecmds.c:7597 #, c-format msgid "column \"%s\" is in a primary key" msgstr "სვეტი \"%s\" პირველადი გასაღებია" -#: commands/tablecmds.c:7610 +#: commands/tablecmds.c:7602 #, c-format msgid "column \"%s\" is in index used as replica identity" msgstr "სვეტი \"%s\" რეპლიკის იდენტიფიკატორად გამოყენებული ინდექსია" -#: commands/tablecmds.c:7633 +#: commands/tablecmds.c:7625 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "სვეტი \"%s\" მშობელ ცხრილში NOT NULL-ით დანიშნული არაა" -#: commands/tablecmds.c:7833 commands/tablecmds.c:9541 +#: commands/tablecmds.c:7825 commands/tablecmds.c:9533 #, c-format msgid "constraint must be added to child tables too" msgstr "შეზღუდვა შვილ ცხრილებსაც უნდა დაემატოთ" -#: commands/tablecmds.c:7834 +#: commands/tablecmds.c:7826 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "ურთიერთობის \"%2$s\" სვეტი \"%1$s\" უკვე NOT NULL არაა." -#: commands/tablecmds.c:7919 +#: commands/tablecmds.c:7911 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "ურთიერთობის \"%2$s\" სვეტი \"%1$s\" გენერირებული სვეტია" -#: commands/tablecmds.c:8013 +#: commands/tablecmds.c:8005 #, c-format msgid "cannot add identity to a column of only the partitioned table" msgstr "მხოლოდ, დაყოფილი ცხრილში იდენტიფიკაციას სვეტს ვერ დაამატებთ" -#: commands/tablecmds.c:8019 +#: commands/tablecmds.c:8011 #, c-format msgid "cannot add identity to a column of a partition" msgstr "დანაყოფს სვეტს იდენტიფიკატორს ვერ დაუმატებთ" -#: commands/tablecmds.c:8047 +#: commands/tablecmds.c:8039 #, c-format msgid "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity can be added" msgstr "ურთიერთობის \"%2$s\" სვეტი \"%1$s\" უნდა აღწეროთ როგორც NOT NULL მანამდე, სანამ იდენტიფიკაციას დაამატებთ" -#: commands/tablecmds.c:8053 +#: commands/tablecmds.c:8045 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "ურთიერთობის \"%2$s\" სვეტი \"%1$s\" უკვე იდენტიფიკატორი სვეტია" -#: commands/tablecmds.c:8059 +#: commands/tablecmds.c:8051 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "ურთიერთობის \"%2$s\" სვეტს \"%1$s\" ნაგულისხმევი მნიშვნელობა უკვე გააჩნია" -#: commands/tablecmds.c:8120 +#: commands/tablecmds.c:8112 #, c-format msgid "cannot change identity column of only the partitioned table" msgstr "მხოლოდ, დაყოფილი ცხრილის იდენტიფიკაციის სვეტს ვერ შეცვლით" -#: commands/tablecmds.c:8126 +#: commands/tablecmds.c:8118 #, c-format msgid "cannot change identity column of a partition" msgstr "დანაყოფის იდენტიფიკაციის სვეტს ვერ შეცვლით" -#: commands/tablecmds.c:8171 commands/tablecmds.c:8267 +#: commands/tablecmds.c:8163 commands/tablecmds.c:8259 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "ურთიერთობის \"%2$s\" სვეტი \"%1$s\" იდენტიფიკატორი სვეტი არაა" -#: commands/tablecmds.c:8237 +#: commands/tablecmds.c:8229 #, c-format msgid "cannot drop identity from a column of only the partitioned table" msgstr "მხოლოდ, დაყოფილი ცხრილში სვეტიდან იდენტიფიკაციას ვერ წაშლით" -#: commands/tablecmds.c:8243 +#: commands/tablecmds.c:8235 #, c-format msgid "cannot drop identity from a column of a partition" msgstr "დანაყოფს სვეტიდან იდენტიფიკატორს ვერ წაშლით" -#: commands/tablecmds.c:8272 +#: commands/tablecmds.c:8264 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "ურთიერთობის \"%2$s\" სვეტი \"%1$s\" იდენტიფიკატორი სვეტი არაა. გამოტოვება" -#: commands/tablecmds.c:8366 +#: commands/tablecmds.c:8358 #, c-format msgid "column \"%s\" of relation \"%s\" is not a generated column" msgstr "ურთიერთობის \"%2$s\" სვეტი \"%1$s\" გენერირებული სვეტი არაა" -#: commands/tablecmds.c:8464 +#: commands/tablecmds.c:8456 #, c-format msgid "ALTER TABLE / DROP EXPRESSION must be applied to child tables too" msgstr "ALTER TABLE / DROP EXPRESSION შვილ ცხრილებზეც უნდა გადატარდეს" -#: commands/tablecmds.c:8486 +#: commands/tablecmds.c:8478 #, c-format msgid "cannot drop generation expression from inherited column" msgstr "მემკვიდრეობითი სვეტიდან გენერაციის გამოსახულების წაშლა შეუძლებელია" -#: commands/tablecmds.c:8525 +#: commands/tablecmds.c:8517 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column" msgstr "ურთიერთობის \"%2$s\" სვეტი \"%1$s\" დამახსოვრებული გენერირებული სვეტი არაა" -#: commands/tablecmds.c:8530 +#: commands/tablecmds.c:8522 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" msgstr "ურთიერთობის \"%2$s\" სვეტი \"%1$s\" დამახსოვრებული გენერირებული სვეტი არაა. გამოტოვება" -#: commands/tablecmds.c:8608 +#: commands/tablecmds.c:8600 #, c-format msgid "cannot refer to non-index column by number" msgstr "არა-ინდექსი სვეტის ნომრით მიმართვა შეუძლებელია" -#: commands/tablecmds.c:8660 +#: commands/tablecmds.c:8652 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "ურთიერთობის (%2$s) სვეტი (%1$d) არ არსებობს" -#: commands/tablecmds.c:8679 +#: commands/tablecmds.c:8671 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "ინდექსის \"%2$s\" ჩასმული სვეტის \"%1$s\" სტატისტიკის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:8684 +#: commands/tablecmds.c:8676 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "" -#: commands/tablecmds.c:8686 +#: commands/tablecmds.c:8678 #, c-format msgid "Alter statistics on table column instead." msgstr "ამის ნაცვლად ცხრილის სვეტის სტატისტიკა შეცვალეთ." -#: commands/tablecmds.c:8932 +#: commands/tablecmds.c:8924 #, c-format msgid "cannot drop column from typed table" msgstr "ტიპიზირებული ცხრილის სვეტის წაშლა შეუძლებელია" -#: commands/tablecmds.c:8995 +#: commands/tablecmds.c:8987 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "სვეტი \"%s\" ურთიერთობაში \"%s\" არ არსებობს. გამოტოვება" -#: commands/tablecmds.c:9008 +#: commands/tablecmds.c:9000 #, c-format msgid "cannot drop system column \"%s\"" msgstr "სისტემური სვეტის \"%s\" წაშლა შეუძლებელია" -#: commands/tablecmds.c:9018 +#: commands/tablecmds.c:9010 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "მემკვიდრეობით მიღებული სვეტის \"%s\" წაშლა შეუძლებელია" -#: commands/tablecmds.c:9031 +#: commands/tablecmds.c:9023 #, c-format msgid "cannot drop column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "" -#: commands/tablecmds.c:9056 +#: commands/tablecmds.c:9048 #, c-format msgid "cannot drop column from only the partitioned table when partitions exist" msgstr "" -#: commands/tablecmds.c:9261 +#: commands/tablecmds.c:9253 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX is not supported on partitioned tables" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX დაყოფილ ცხრილებზე მხარდაუჭერელია" -#: commands/tablecmds.c:9286 +#: commands/tablecmds.c:9278 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index \"%s\" to \"%s\"" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX ინდექსის სახელს \"%s\"-დან \"%s\"-ზე გადაარქმევს" -#: commands/tablecmds.c:9623 +#: commands/tablecmds.c:9615 #, c-format msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "" -#: commands/tablecmds.c:9629 +#: commands/tablecmds.c:9621 #, c-format msgid "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "" -#: commands/tablecmds.c:9632 +#: commands/tablecmds.c:9624 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "ეს ოპერაცია დაყოფილი ცხრილებისთვის ჯერჯერობით მხარდაჭერილი არაა." -#: commands/tablecmds.c:9639 commands/tablecmds.c:10095 +#: commands/tablecmds.c:9631 commands/tablecmds.c:10092 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "მითითებული ურთიერთობა \"%s\" ცხრილი არაა" -#: commands/tablecmds.c:9662 +#: commands/tablecmds.c:9654 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "მუდმივ ცხრილებზე არსებული შეზღუდვები მხოლოდ მუდმივ ცხრილებზე შეიძლება, მიუთითებდეს" -#: commands/tablecmds.c:9669 +#: commands/tablecmds.c:9661 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "ჟურნალის გარეშე მყოფი ცხრილების შეზღუდვები მხოლოდ მუდმივ ან ჟურნალის გარეშე მყოფ ცხრილებზე შეიძლება, მიუთითებდეს" -#: commands/tablecmds.c:9675 +#: commands/tablecmds.c:9667 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "დროებით ცხრილებზე არსებული შეზღუდვები მხოლოდ დროებით ცხრილებზე შეიძლება, მიუთითებდეს" -#: commands/tablecmds.c:9679 +#: commands/tablecmds.c:9671 #, c-format msgid "constraints on temporary tables must involve temporary tables of this session" msgstr "დროებითი ცხრილის შეზღუდვები მიმდინარე სესიის დროებით ცხრილებს უნდა მიმართავდეს" -#: commands/tablecmds.c:9743 commands/tablecmds.c:9749 +#: commands/tablecmds.c:9735 commands/tablecmds.c:9741 #, c-format msgid "invalid %s action for foreign key constraint containing generated column" msgstr "არასწორი ქმედება %s გარე გასაღების შეზღუდვის შემცველი გენერირებული სვეტისთვის" -#: commands/tablecmds.c:9765 +#: commands/tablecmds.c:9757 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "" -#: commands/tablecmds.c:9872 +#: commands/tablecmds.c:9864 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "გარე გასაღების შეზღუდვის \"%s\" განხორციელება შეუძლებელია" -#: commands/tablecmds.c:9874 +#: commands/tablecmds.c:9866 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "გასაღების სვეტები \"%s\" და \"%s\" შეუთავსებელი ტიპებისაა: %s და %s." -#: commands/tablecmds.c:10031 +#: commands/tablecmds.c:10035 #, c-format msgid "column \"%s\" referenced in ON DELETE SET action must be part of foreign key" msgstr "" -#: commands/tablecmds.c:10305 commands/tablecmds.c:10775 parser/parse_utilcmd.c:797 parser/parse_utilcmd.c:920 +#: commands/tablecmds.c:10392 commands/tablecmds.c:10832 parser/parse_utilcmd.c:822 parser/parse_utilcmd.c:945 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "გარე გასაღების შეზღუდვები გარე ცხრილებზე მხარდაჭერილი არაა" -#: commands/tablecmds.c:11328 commands/tablecmds.c:11609 commands/tablecmds.c:12521 commands/tablecmds.c:12595 +#: commands/tablecmds.c:10815 +#, c-format +msgid "cannot attach table \"%s\" as a partition because it is referenced by foreign key \"%s\"" +msgstr "ცხრილს \"%s\" ვერ მივამაგრებ დანაყოფს, რომელსაც მიმართავს გარე გარე გასაღები \"%s\"" + +#: commands/tablecmds.c:11416 commands/tablecmds.c:11697 commands/tablecmds.c:12609 commands/tablecmds.c:12683 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "ურთიერთობის \"%2$s\" შეზღუდვა \"%1$s\" არ არსებობს" -#: commands/tablecmds.c:11335 +#: commands/tablecmds.c:11423 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "ურთიერთობის (\"%2$s\") შეზღუდვა \"%1$s\" გარე გასაღების შეზღუდვა არაა" -#: commands/tablecmds.c:11373 +#: commands/tablecmds.c:11461 #, c-format msgid "cannot alter constraint \"%s\" on relation \"%s\"" msgstr "ურთიერთობაზე \"%2$s\" შეზღუდვის \"%1$s\" შეცვლა შეუძლებელია" -#: commands/tablecmds.c:11376 +#: commands/tablecmds.c:11464 #, c-format msgid "Constraint \"%s\" is derived from constraint \"%s\" of relation \"%s\"." msgstr "შეზღუდვა \"%1$s\" ურთიერთობის \"%3$s\" შეზღუდვიდანა \"%2$s\"-ია ნაწარმოები." -#: commands/tablecmds.c:11378 +#: commands/tablecmds.c:11466 #, c-format msgid "You may alter the constraint it derives from instead." msgstr "" -#: commands/tablecmds.c:11617 +#: commands/tablecmds.c:11705 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "ურთიერთობის (\"%2$s\") შეზღუდვა \"%1$s\" გარე გასაღები ან შემოწმების შეზღუდვა არაა" -#: commands/tablecmds.c:11694 +#: commands/tablecmds.c:11782 #, c-format msgid "constraint must be validated on child tables too" msgstr "შეზღუდვა შვილ ცხრილებზეც უნდა გადამოწმდეს" -#: commands/tablecmds.c:11781 +#: commands/tablecmds.c:11869 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "გარე გასაღების შეზღუდვაში მითითებული სვეტი \"%s\" არ არსებობს" -#: commands/tablecmds.c:11787 +#: commands/tablecmds.c:11875 #, c-format msgid "system columns cannot be used in foreign keys" msgstr "უცხო გასაღებებში სისტემურ სვეტებს ვერ გამოიყენებთ" -#: commands/tablecmds.c:11791 +#: commands/tablecmds.c:11879 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "გარე გასაღებში %d გასაღებზე მეტი ვერ გექნებათ" -#: commands/tablecmds.c:11856 +#: commands/tablecmds.c:11944 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "" -#: commands/tablecmds.c:11873 +#: commands/tablecmds.c:11961 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "მითითებული ცხრილისთვის \"%s\" ძირითადი გასაღები არ არსებობს" -#: commands/tablecmds.c:11941 +#: commands/tablecmds.c:12029 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "" -#: commands/tablecmds.c:12033 +#: commands/tablecmds.c:12121 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "" -#: commands/tablecmds.c:12038 +#: commands/tablecmds.c:12126 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "" -#: commands/tablecmds.c:12477 +#: commands/tablecmds.c:12565 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "მემკვიდრეობით მიღებული ურთიერთობის \"%2$s\" შეზღუდვის \"%1$s\" წაშლა შეუძლებელია" -#: commands/tablecmds.c:12527 +#: commands/tablecmds.c:12615 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "ურთიერთობის (\"%2$s\") შეზღუდვა (\"%1$s\") არ არსებობს. გამოტოვება" -#: commands/tablecmds.c:12702 +#: commands/tablecmds.c:12790 #, c-format msgid "cannot alter column type of typed table" msgstr "ტიპიზირებული ცხრილის სვეტის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:12729 +#: commands/tablecmds.c:12816 +#, c-format +msgid "cannot specify USING when altering type of generated column" +msgstr "გენერირებული სვეტის ტიპის შეცვლისას USING-ს ვერ მიუთითებთ" + +#: commands/tablecmds.c:12817 commands/tablecmds.c:18028 commands/tablecmds.c:18118 commands/trigger.c:656 rewrite/rewriteHandler.c:941 rewrite/rewriteHandler.c:976 +#, c-format +msgid "Column \"%s\" is a generated column." +msgstr "სვეტი \"%s\" გენერირებული სვეტია." + +#: commands/tablecmds.c:12827 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "მემკვიდრეობით მიღებული სვეტის \"%s\" შეცვლა შეუძლებელია" -#: commands/tablecmds.c:12738 +#: commands/tablecmds.c:12836 #, c-format msgid "cannot alter column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "სვეტის \"%s\" შეცვლა შეუძლებელია, რადგან ის ურთიერთობის \"%s\" დანაყოფის გასაღების ნაწილია" -#: commands/tablecmds.c:12788 +#: commands/tablecmds.c:12886 #, c-format msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" msgstr "" -#: commands/tablecmds.c:12791 +#: commands/tablecmds.c:12889 #, c-format msgid "You might need to add an explicit cast." msgstr "შეიძლება აშკარა დაკასტვა უნდა დაამატოთ." -#: commands/tablecmds.c:12795 +#: commands/tablecmds.c:12893 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "სვეტის \"%s\" ავტომატური დაკასტვა ტიპამდე %s შეუძლებელია" #. translator: USING is SQL, don't translate it -#: commands/tablecmds.c:12798 +#: commands/tablecmds.c:12897 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "შეიძლება, გჭირდებათ, მიუთითოთ \"USING %s::%s\"." -#: commands/tablecmds.c:12897 +#: commands/tablecmds.c:12996 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "ურთიერთობის \"%2$s\" სვეტის \"%1$s\" შეცვლა შეუძლებელია" -#: commands/tablecmds.c:12926 +#: commands/tablecmds.c:13025 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "" -#: commands/tablecmds.c:12937 +#: commands/tablecmds.c:13036 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "" -#: commands/tablecmds.c:13062 +#: commands/tablecmds.c:13161 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "სვეტის (\"%s\") ტიპის ორჯერ შეცვლა შეუძლებელია" -#: commands/tablecmds.c:13100 +#: commands/tablecmds.c:13199 #, c-format msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" msgstr "" -#: commands/tablecmds.c:13105 +#: commands/tablecmds.c:13204 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "" -#: commands/tablecmds.c:13409 +#: commands/tablecmds.c:13508 #, c-format msgid "cannot alter type of a column used by a function or procedure" msgstr "ფუნქციის ან პროცედურის მიერ გამოყენებული სვეტის ტიპის შექმნა შეუძლებელია" -#: commands/tablecmds.c:13410 commands/tablecmds.c:13425 commands/tablecmds.c:13445 commands/tablecmds.c:13464 commands/tablecmds.c:13523 +#: commands/tablecmds.c:13509 commands/tablecmds.c:13524 commands/tablecmds.c:13544 commands/tablecmds.c:13563 commands/tablecmds.c:13622 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s ეყრდნობა სვეტს \"%s\"" -#: commands/tablecmds.c:13424 +#: commands/tablecmds.c:13523 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "ხედის ან წესის მიერ გამოყენებული სვეტის ტიპის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:13444 +#: commands/tablecmds.c:13543 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "ტრიგერის აღწერაში გამოყენებული სვეტის ტიპის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:13463 +#: commands/tablecmds.c:13562 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "პოლიტიკის აღწერაში გამოყენებული სვეტის ტიპის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:13494 +#: commands/tablecmds.c:13593 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "გენერირებული სვეტის მიერ გამოყენებული სვეტის ტიპის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:13495 +#: commands/tablecmds.c:13594 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "სვეტი (%s\") გენერირებული სვეტის (%s) მიერ გამოიყენება." -#: commands/tablecmds.c:13522 +#: commands/tablecmds.c:13621 #, c-format msgid "cannot alter type of a column used by a publication WHERE clause" msgstr "გამოცემის WHERE პირობის მიერ გამოყენებული სვეტის ტიპის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:14357 commands/tablecmds.c:14369 +#: commands/tablecmds.c:14456 commands/tablecmds.c:14468 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "ინდექსის \"%s\" მფლობელის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:14359 commands/tablecmds.c:14371 +#: commands/tablecmds.c:14458 commands/tablecmds.c:14470 #, c-format msgid "Change the ownership of the index's table instead." msgstr "ამის მაგიერ ინდექსის ცხრილის მფლობელი შეცვალეთ." -#: commands/tablecmds.c:14385 +#: commands/tablecmds.c:14484 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "მიმდევრობის \"%s\" მფლობელის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:14410 +#: commands/tablecmds.c:14509 #, c-format msgid "cannot change owner of relation \"%s\"" msgstr "ურთიერთობის \"%s\" მფლობელის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:14877 +#: commands/tablecmds.c:14976 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "ერთზე მეტი SET TABLESPACE ქვებრძანება ვერ გექნებათ" -#: commands/tablecmds.c:14954 +#: commands/tablecmds.c:15053 #, c-format msgid "cannot set options for relation \"%s\"" msgstr "ურთიერთობის (%s) პარამეტრების დაყენება შეუძლებელია" -#: commands/tablecmds.c:14988 commands/view.c:440 +#: commands/tablecmds.c:15087 commands/view.c:440 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "WITH CHECK OPTION მხოლოდ ავტომატურად განახლებად ხედებზეა მხარდაჭერილი" -#: commands/tablecmds.c:15238 +#: commands/tablecmds.c:15338 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "ცხრილის სივრცეში მხოლოდ ცხრილები, ინდექსები და მატერიალიზებული ხედები შეიძლება არსებობდეს" -#: commands/tablecmds.c:15250 +#: commands/tablecmds.c:15350 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "ცხრილების სივრცეში pg_globl ურთიერთობების შეტანა/გამოტანა შეუძლებელია" -#: commands/tablecmds.c:15342 +#: commands/tablecmds.c:15442 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "შეწყვეტა, რადგან ბლოკი ურთიერთობაზე \"%s.%s\" ხელმისაწვდომი არაა" -#: commands/tablecmds.c:15358 +#: commands/tablecmds.c:15458 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "ცხრილების სივრცეში \"%s\" ურთიერთობა, რომელიც ემთხვევა, ვერ ვიპოვე" -#: commands/tablecmds.c:15480 +#: commands/tablecmds.c:15580 #, c-format msgid "cannot change inheritance of typed table" msgstr "ტიპიზირებული ცხრილის მემკვიდრეობითობის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:15485 commands/tablecmds.c:15985 +#: commands/tablecmds.c:15585 commands/tablecmds.c:16085 #, c-format msgid "cannot change inheritance of a partition" msgstr "დანაყოფის მემკვიდრეობითობის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:15490 +#: commands/tablecmds.c:15590 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "დაყოფილი ცხრილის მემკვიდრეობითობის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:15536 +#: commands/tablecmds.c:15636 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "სხვა სესიის დროებითი ურთიერთობის მემკვიდრეობით მიღება შეუძლებელია" -#: commands/tablecmds.c:15549 +#: commands/tablecmds.c:15649 #, c-format msgid "cannot inherit from a partition" msgstr "დანაყოფიდან მემკვიდრეობითობა შეუძლებელია" -#: commands/tablecmds.c:15571 commands/tablecmds.c:18453 +#: commands/tablecmds.c:15671 commands/tablecmds.c:18529 #, c-format msgid "circular inheritance not allowed" msgstr "წრიული მემკვიდრეობითობა დაუშვებელია" -#: commands/tablecmds.c:15572 commands/tablecmds.c:18454 +#: commands/tablecmds.c:15672 commands/tablecmds.c:18530 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "\"%s\" უკვე \"%s\"-ის შვილია." -#: commands/tablecmds.c:15585 +#: commands/tablecmds.c:15685 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "ტრიგერი \"%s\" ხელს უშლის ცხრილს \"%s\" მემკვიდრეობის შვილად გადაიქცეს" -#: commands/tablecmds.c:15587 +#: commands/tablecmds.c:15687 #, c-format msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." msgstr "ROW ტრიგერები, რომლებსაც გარდამავალი ცხრილები გააჩნიათ, მემკვიდრეობითობის იერარქიებში მხარდაჭერილი არაა." -#: commands/tablecmds.c:15776 +#: commands/tablecmds.c:15876 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "სვეტი \"%s\" შვილ ცხრილში NOT NULL-ით უნდა იყოს დანიშნული" -#: commands/tablecmds.c:15785 +#: commands/tablecmds.c:15885 #, c-format msgid "column \"%s\" in child table must be a generated column" msgstr "შვილ ცხრილში სვეტი \"%s\" გენერირებული სვეტი არ უნდა იყოს" -#: commands/tablecmds.c:15789 +#: commands/tablecmds.c:15889 #, c-format msgid "column \"%s\" in child table must not be a generated column" msgstr "შვილ ცხრილში სვეტი \"%s\" გენერირებული სვეტი არ უნდა იყოს" -#: commands/tablecmds.c:15827 +#: commands/tablecmds.c:15927 #, c-format msgid "child table is missing column \"%s\"" msgstr "შვილ ცხრილს აკლია სვეტი \"%s\"" -#: commands/tablecmds.c:15908 +#: commands/tablecmds.c:16008 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "შვილ ცხრილს \"%s\" შემოწმების შეზღუდვისთვის \"%s\" სხვა განსაზღვრება გააჩნია" -#: commands/tablecmds.c:15915 +#: commands/tablecmds.c:16015 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "შეზღუდვა \"%s\" კონფლიქტშია არა-მემკვიდრეობით მიღებულ შეზღუდვასთან შვილ ცხრილზე \"%s\"" -#: commands/tablecmds.c:15925 +#: commands/tablecmds.c:16025 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "შეზღუდვა \"%s\" კონფლიქტშია შეზღუდვასთან NOT VALID შვილ ცხრილზე \"%s\"" -#: commands/tablecmds.c:15963 +#: commands/tablecmds.c:16063 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "შვილ ცხრილს აკლია შეზღუდვა \"%s\"" -#: commands/tablecmds.c:16049 +#: commands/tablecmds.c:16149 #, c-format msgid "partition \"%s\" already pending detach in partitioned table \"%s.%s\"" msgstr "დანაყოფი \"%s\" უკვე დაყოფილი ცხრილიდან \"%s.%s\" მოხსნის რიგშია" -#: commands/tablecmds.c:16078 commands/tablecmds.c:16124 parser/parse_utilcmd.c:3261 +#: commands/tablecmds.c:16178 commands/tablecmds.c:16224 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "ურთიერთობა \"%s\" ურთიერთობის \"%s\" დანაყოფს არ წარმოადგენს" -#: commands/tablecmds.c:16130 +#: commands/tablecmds.c:16230 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "ურთიერთობა \"%s\" ურთიერთობის \"%s\" მშობელს არ წარმოადგენს" -#: commands/tablecmds.c:16357 +#: commands/tablecmds.c:16457 #, c-format msgid "typed tables cannot inherit" msgstr "ტიპიზირებულ ცხრილებს მემკვიდრეობითობა არ შეუძლიათ" -#: commands/tablecmds.c:16387 +#: commands/tablecmds.c:16487 #, c-format msgid "table is missing column \"%s\"" msgstr "ცხრილს აკლია სვეტი \"%s\"" -#: commands/tablecmds.c:16398 +#: commands/tablecmds.c:16498 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "ცხრილს აქვს სვეტი \"%s\" მაშინ, როცა ტიპი \"%s\"-ს მოითხოვს" -#: commands/tablecmds.c:16407 +#: commands/tablecmds.c:16507 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "ცხრილს \"%s\" სვეტისთვის \"%s\" სხვა ტიპი აქვს" -#: commands/tablecmds.c:16421 +#: commands/tablecmds.c:16521 #, c-format msgid "table has extra column \"%s\"" msgstr "ცხრილს აქვს დამატებითი სვეტი \"%s\"" -#: commands/tablecmds.c:16473 +#: commands/tablecmds.c:16573 #, c-format msgid "\"%s\" is not a typed table" msgstr "\"%s\" ტიპიზირებული ცხრილი არაა" -#: commands/tablecmds.c:16647 +#: commands/tablecmds.c:16747 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "არაუნიკალურ ინდექსს \"%s\" რეპლიკის იდენტიფიკაციისთვის ვერ გამოიყენებთ" -#: commands/tablecmds.c:16653 +#: commands/tablecmds.c:16753 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "არასაუყოვნებლივ ინდექსს \"%s\" რეპლიკის იდენფიტიკაციისთვის ვერ გამოიყენებთ" -#: commands/tablecmds.c:16659 +#: commands/tablecmds.c:16759 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "გამოსახულების ინდექსს \"%s\" რეპლიკის იდენტიფიკაციისთვის ვერ გამოიყენებთ" -#: commands/tablecmds.c:16665 +#: commands/tablecmds.c:16765 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "ნაწილობრივი ინდექსის (\"%s\") რეპლიკის იდენტიფიკატორად გამოყენება შეუძლებელია" -#: commands/tablecmds.c:16682 +#: commands/tablecmds.c:16782 #, c-format msgid "index \"%s\" cannot be used as replica identity because column %d is a system column" msgstr "ინდექსს \"%s\" რეპლიკის იდენტიფიკაციისთვის ვერ გამოიყენებთ, რადგან სვეტი %d სისტემური სვეტია" -#: commands/tablecmds.c:16689 +#: commands/tablecmds.c:16789 #, c-format msgid "index \"%s\" cannot be used as replica identity because column \"%s\" is nullable" msgstr "ინდექსს \"%s\" რეპლიკის იდენტიფიკაციისთვის ვერ გამოიყენებთ, რადგან სვეტი %s განულებადია" -#: commands/tablecmds.c:16941 +#: commands/tablecmds.c:17041 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "ცხრილის \"%s\" ჟურნალში ჩაწერის სტატუსის შეცვლა შეუძლებელია, რადგან ის დროებითია" -#: commands/tablecmds.c:16965 +#: commands/tablecmds.c:17065 #, c-format msgid "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "" -#: commands/tablecmds.c:16967 +#: commands/tablecmds.c:17067 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "უჟურნალო ურთიერთობების რეპლიკაცია შეუძლებელია." -#: commands/tablecmds.c:17012 +#: commands/tablecmds.c:17112 #, c-format msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" msgstr "" -#: commands/tablecmds.c:17022 +#: commands/tablecmds.c:17122 #, c-format msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" msgstr "" -#: commands/tablecmds.c:17080 +#: commands/tablecmds.c:17180 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "" -#: commands/tablecmds.c:17185 +#: commands/tablecmds.c:17288 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "სქემაში (%2$s) ურთიერთობა (%1$s) უკვე არსებობს" -#: commands/tablecmds.c:17606 +#: commands/tablecmds.c:17713 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "\"%s\" ცხრილი ან მატერიალიზებული ხედი არაა" -#: commands/tablecmds.c:17759 +#: commands/tablecmds.c:17866 #, c-format msgid "\"%s\" is not a composite type" msgstr "ტიპი %s კომპოზიტური არაა" -#: commands/tablecmds.c:17789 +#: commands/tablecmds.c:17896 #, c-format msgid "cannot change schema of index \"%s\"" msgstr "ინდექსის (%s) სქემის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:17791 commands/tablecmds.c:17805 +#: commands/tablecmds.c:17898 commands/tablecmds.c:17912 #, c-format msgid "Change the schema of the table instead." msgstr "ამის მაგიერ ცხრილის სქემა შეცვლათ." -#: commands/tablecmds.c:17795 +#: commands/tablecmds.c:17902 #, c-format msgid "cannot change schema of composite type \"%s\"" msgstr "კომპოზიტური ტიპის (%s) სქემის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:17803 +#: commands/tablecmds.c:17910 #, c-format msgid "cannot change schema of TOAST table \"%s\"" msgstr "\"TOAST\" ცხრილის (%s) სქემის შეცვლა შეუძლებელია" -#: commands/tablecmds.c:17835 +#: commands/tablecmds.c:17942 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "ერთზე მეტ სვეტთან ერთად დაყოფის სტრატეგიას \"list\" ვერ გამოიყენებთ" -#: commands/tablecmds.c:17901 +#: commands/tablecmds.c:18008 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "დანაყოფის გასაღებში დასახელებული სვეტი \"%s\" არ არსებობს" -#: commands/tablecmds.c:17909 +#: commands/tablecmds.c:18016 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "დანაყოფის გასაღებში სისტემური სვეტის (%s) გამოყენება შეუძლებელია" -#: commands/tablecmds.c:17920 commands/tablecmds.c:18010 +#: commands/tablecmds.c:18027 commands/tablecmds.c:18117 #, c-format msgid "cannot use generated column in partition key" msgstr "გენერირებულ სვეტს დანაყოფის გასაღებში ვერ გამოიყენებთ" -#: commands/tablecmds.c:17921 commands/tablecmds.c:18011 commands/trigger.c:656 rewrite/rewriteHandler.c:934 rewrite/rewriteHandler.c:969 -#, c-format -msgid "Column \"%s\" is a generated column." -msgstr "სვეტი \"%s\" გენერირებული სვეტია." - -#: commands/tablecmds.c:17993 +#: commands/tablecmds.c:18100 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "დანაყოფის გასაღების გამოსახულებები, არ შეიძლება, სისტემურ სვეტზე მითითებებს შეიცავდნენ" -#: commands/tablecmds.c:18040 +#: commands/tablecmds.c:18147 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "ფუნქცია დანაყოფის გასაღების გამოსახულებაში აუცილებლად უნდა იყოს მონიშნული, როგორც IMMUTABLE" -#: commands/tablecmds.c:18049 +#: commands/tablecmds.c:18156 #, c-format msgid "cannot use constant expression as partition key" msgstr "დაყოფის გასაღების გამოსახულებაში მუდმივ გამოსახულებას ვერ გამოიყენებთ" -#: commands/tablecmds.c:18070 +#: commands/tablecmds.c:18177 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "დანაყოფის გამოსახულებისათვის კოლაციის დადგენა შეუძლებელია" -#: commands/tablecmds.c:18105 +#: commands/tablecmds.c:18212 #, c-format msgid "You must specify a hash operator class or define a default hash operator class for the data type." msgstr "" -#: commands/tablecmds.c:18111 +#: commands/tablecmds.c:18218 #, c-format msgid "You must specify a btree operator class or define a default btree operator class for the data type." msgstr "" -#: commands/tablecmds.c:18393 +#: commands/tablecmds.c:18469 #, c-format msgid "\"%s\" is already a partition" msgstr "\"%s\" უკვე დანაყოფია" -#: commands/tablecmds.c:18399 +#: commands/tablecmds.c:18475 #, c-format msgid "cannot attach a typed table as partition" msgstr "ტიპიზირებული ცხრილის, როგორც დანაყოფის მიბმა შეუძლებელია" -#: commands/tablecmds.c:18415 +#: commands/tablecmds.c:18491 #, c-format msgid "cannot attach inheritance child as partition" msgstr "მემკვიდრეობის შვილის დანაყოფად მიმაგრება შეუძლებელია" -#: commands/tablecmds.c:18429 +#: commands/tablecmds.c:18505 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "მემკვიდრეობის მშობლის დანაყოფად მიმაგრება შეუძლებელია" -#: commands/tablecmds.c:18463 +#: commands/tablecmds.c:18539 #, c-format msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "დროებითი ურითერთობის, როგორც მუდმივი ურთიერთობის (\"%s\") დანაყოფის მიმაგრება შეუძლებელია" -#: commands/tablecmds.c:18471 +#: commands/tablecmds.c:18547 #, c-format msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "მუდმივი ურთიერთობის, როგორც დროებითი ურთიერთობის (%s) დანაყოფის მიმაგრება შეუძლებელია" -#: commands/tablecmds.c:18479 +#: commands/tablecmds.c:18555 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "სხვა სესიის დროებითი ურთიერთობის დანაყოფის მიმაგრება შეუძლებელია" -#: commands/tablecmds.c:18486 +#: commands/tablecmds.c:18562 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "სხვა სესიის დროებითი ურთიერთობის დანაყოფად მიმაგრება შეუძლებელია" -#: commands/tablecmds.c:18506 +#: commands/tablecmds.c:18582 #, c-format msgid "table \"%s\" being attached contains an identity column \"%s\"" msgstr "ცხრილი \"%s\", რომლის მიმაგრებაც მიმდინარეობს, შეიცავს იდენტიფიკაციის სვეტს \"%s\"" -#: commands/tablecmds.c:18508 +#: commands/tablecmds.c:18584 #, c-format msgid "The new partition may not contain an identity column." msgstr "ახალი დანაყოფი არ შეიძლება, იდენტიფიკატორის სვეტს შეიცავდეს." -#: commands/tablecmds.c:18516 +#: commands/tablecmds.c:18592 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "ცხრილი \"%s\" შეიცავს სვეტს \"%s\", რომელიც მშობელში \"%s\" აღმოჩენილი არაა" -#: commands/tablecmds.c:18519 +#: commands/tablecmds.c:18595 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "ახალი დანაყოფი მხოლოდ მშობელში არსებულ სვეტებს შეიძლება, შეიცავდეს." -#: commands/tablecmds.c:18531 +#: commands/tablecmds.c:18607 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "ტრიგერი \"%s\" ხელს უშლის ცხრილს \"%s\" დანაყოფად გადაიქცეს" -#: commands/tablecmds.c:18533 +#: commands/tablecmds.c:18609 #, c-format msgid "ROW triggers with transition tables are not supported on partitions." msgstr "დანაყოფებზე იდენტიფიკაციის სვეტები მხარდაჭერილი არაა." -#: commands/tablecmds.c:18694 +#: commands/tablecmds.c:18785 #, c-format msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "გარე ცხრილის \"%s\" დაყოფილი ცხრილის (\"%s\") დანაყოფის სახით მიმაგრება შეუძლებელია" -#: commands/tablecmds.c:18697 +#: commands/tablecmds.c:18788 #, c-format msgid "Partitioned table \"%s\" contains unique indexes." msgstr "დაყოფილი ცხრილი \"%s\" უნიკალურ ცხრილებს შეიცავს." -#: commands/tablecmds.c:19019 +#: commands/tablecmds.c:19110 #, c-format msgid "cannot detach partitions concurrently when a default partition exists" msgstr "ნაგულისხმევი დანაყოფის არსებობის შემთხვევაში დანაყოფების ერთდროული მოხსნა შეუძლებელია" -#: commands/tablecmds.c:19128 +#: commands/tablecmds.c:19219 #, c-format msgid "partitioned table \"%s\" was removed concurrently" msgstr "დაყოფილი ცხრილი \"%s\" ერთდროულად წაიშალა" -#: commands/tablecmds.c:19134 +#: commands/tablecmds.c:19225 #, c-format msgid "partition \"%s\" was removed concurrently" msgstr "დანაყოფი \"%s\" ერთდროულად წაიშალა" -#: commands/tablecmds.c:19661 commands/tablecmds.c:19681 commands/tablecmds.c:19702 commands/tablecmds.c:19721 commands/tablecmds.c:19763 +#: commands/tablecmds.c:19839 commands/tablecmds.c:19859 commands/tablecmds.c:19880 commands/tablecmds.c:19899 commands/tablecmds.c:19941 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "ერთი ინდექსის ინდექსის (%s) მეორე ინდექსის (\"%s) დანაყოფად მიმაგრება შეუძლებელია" -#: commands/tablecmds.c:19664 +#: commands/tablecmds.c:19842 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "ინდექსი %s სხვა ინდექსზეა უკვე მიმაგრებული." -#: commands/tablecmds.c:19684 +#: commands/tablecmds.c:19862 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "ინდექსი %s ცხრილის (%s) არცერთი დანაყოფის ინდექსი არაა." -#: commands/tablecmds.c:19705 +#: commands/tablecmds.c:19883 #, c-format msgid "The index definitions do not match." msgstr "ინდექსის აღწერები არ ემთხვევა." -#: commands/tablecmds.c:19724 +#: commands/tablecmds.c:19902 #, c-format msgid "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint exists for index \"%s\"." msgstr "" -#: commands/tablecmds.c:19766 +#: commands/tablecmds.c:19944 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "ცხრილისთვის %s სხვა ინდექსი უკვე მიმაგრებულია." -#: commands/tablecmds.c:20002 +#: commands/tablecmds.c:20180 #, c-format msgid "column data type %s does not support compression" msgstr "სვეტის მონაცემის ტიპს (%s) შეკუმშვის მხარდაჭერა არ გააჩნია" -#: commands/tablecmds.c:20009 +#: commands/tablecmds.c:20187 #, c-format msgid "invalid compression method \"%s\"" msgstr "შეკუმშვის არასწორი მეთოდი \"%s\"" -#: commands/tablecmds.c:20035 +#: commands/tablecmds.c:20213 #, c-format msgid "invalid storage type \"%s\"" msgstr "საცავის არასწორი ტიპი \"%s\"" -#: commands/tablecmds.c:20045 +#: commands/tablecmds.c:20223 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "სვეტის მონაცემების ტიპს %s საცავის ტიპად მხოლოდ PLAIN შეიძლება, ჰქონდეს" -#: commands/tablecmds.c:20242 -#, c-format -msgid "can not find partition for split partition row" -msgstr "დაყოფილი დანაყოფის მწკრივისთვის დანაყოფი ვერ ვიპოვე" - -#: commands/tablecmds.c:20328 -#, c-format -msgid "cannot create as partition of temporary relation of another session" -msgstr "სხვა სესის დროებითი ურთიერთობის დანაყოფის სახით ვერ შექმნით" - -#: commands/tablecmds.c:20399 -#, c-format -msgid "cannot create a permanent relation as partition of temporary relation \"%s\"" -msgstr "მუდმივ ურთიერთობას დროებითი ურთიერთობის \"%s\" დანაყოფის სახით ვერ შექმნით" - #: commands/tablespace.c:193 commands/tablespace.c:644 #, c-format msgid "\"%s\" exists but is not a directory" @@ -11885,27 +11813,22 @@ msgid "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." msgstr "ტრიგერის \"%s\" შესრულებამდე სვეტი დანაყოფში \"%s.%s\" უნდა ყოფილიყო." -#: commands/trigger.c:3340 executor/nodeModifyTable.c:2363 executor/nodeModifyTable.c:2446 -#, c-format -msgid "tuple to be updated was already modified by an operation triggered by the current command" -msgstr "" - -#: commands/trigger.c:3341 executor/nodeModifyTable.c:1532 executor/nodeModifyTable.c:1606 executor/nodeModifyTable.c:2364 executor/nodeModifyTable.c:2447 executor/nodeModifyTable.c:3075 executor/nodeModifyTable.c:3236 +#: commands/trigger.c:3341 executor/nodeModifyTable.c:1541 executor/nodeModifyTable.c:1615 executor/nodeModifyTable.c:2377 executor/nodeModifyTable.c:2468 executor/nodeModifyTable.c:3132 executor/nodeModifyTable.c:3302 #, c-format msgid "Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows." msgstr "" -#: commands/trigger.c:3382 executor/nodeLockRows.c:228 executor/nodeLockRows.c:237 executor/nodeModifyTable.c:305 executor/nodeModifyTable.c:1548 executor/nodeModifyTable.c:2381 executor/nodeModifyTable.c:2589 +#: commands/trigger.c:3382 executor/nodeLockRows.c:228 executor/nodeLockRows.c:237 executor/nodeModifyTable.c:314 executor/nodeModifyTable.c:1557 executor/nodeModifyTable.c:2394 executor/nodeModifyTable.c:2618 #, c-format msgid "could not serialize access due to concurrent update" msgstr "ერთდროული განახლების გამო წვდომის სერიალიზაცია შეუძლებელია" -#: commands/trigger.c:3390 executor/nodeModifyTable.c:1638 executor/nodeModifyTable.c:2464 executor/nodeModifyTable.c:2613 executor/nodeModifyTable.c:3093 +#: commands/trigger.c:3390 executor/nodeModifyTable.c:1647 executor/nodeModifyTable.c:2485 executor/nodeModifyTable.c:2642 executor/nodeModifyTable.c:3150 #, c-format msgid "could not serialize access due to concurrent delete" msgstr "ერთდროული წაშლის გამო წვდომის სერიალიზაცია შეუძლებელია" -#: commands/trigger.c:4597 +#: commands/trigger.c:4599 #, c-format msgid "cannot fire deferred trigger within security-restricted operation" msgstr "" @@ -12380,7 +12303,7 @@ msgid "Only roles with the %s attribute may create roles with the %s attribute." msgstr "მხოლოდ როლებს, რომლებსაც %s ატრიბუტი გააჩნიათ, შეუძლიათ როლის შექმნა, რომელსაც აქვს ატრიბუტი %s." -#: commands/user.c:354 commands/user.c:1386 commands/user.c:1393 gram.y:17355 gram.y:17401 utils/adt/acl.c:5568 utils/adt/acl.c:5574 +#: commands/user.c:354 commands/user.c:1386 commands/user.c:1393 gram.y:17310 gram.y:17356 utils/adt/acl.c:5574 utils/adt/acl.c:5580 #, c-format msgid "role name \"%s\" is reserved" msgstr "როლის სახელი \"%s\" დაცულია" @@ -12436,8 +12359,8 @@ #: commands/user.c:825 #, c-format -msgid "Only roles with the %s option on role \"%s\" may add members." -msgstr "წევრების დამატება მხოლოდ \"%2$s\" როლზე %1$s პარამეტრის მქონე როლებს შეუძლიათ." +msgid "Only roles with the %s option on role \"%s\" may add or drop members." +msgstr "წევრების დამატება, ან წაშლა, მხოლოდ, \"%2$s\" როლზე %1$s პარამეტრის მქონე როლებს შეუძლიათ." #: commands/user.c:870 #, c-format @@ -12469,7 +12392,7 @@ msgid "cannot use special role specifier in DROP ROLE" msgstr "სპეციალური როლის მიმთითებლის გამოყენება DROP ROLE-ში შეუძლებელია" -#: commands/user.c:1135 commands/user.c:1357 commands/variable.c:838 commands/variable.c:841 commands/variable.c:947 commands/variable.c:950 utils/adt/acl.c:365 utils/adt/acl.c:385 utils/adt/acl.c:5423 utils/adt/acl.c:5471 utils/adt/acl.c:5499 utils/adt/acl.c:5518 utils/adt/regproc.c:1571 utils/init/miscinit.c:762 +#: commands/user.c:1135 commands/user.c:1357 commands/variable.c:851 commands/variable.c:854 commands/variable.c:971 commands/variable.c:974 utils/adt/acl.c:365 utils/adt/acl.c:385 utils/adt/acl.c:5429 utils/adt/acl.c:5477 utils/adt/acl.c:5505 utils/adt/acl.c:5524 utils/adt/regproc.c:1571 utils/init/miscinit.c:799 #, c-format msgid "role \"%s\" does not exist" msgstr "როლი არ არსებობს: \"%s\"" @@ -12534,7 +12457,7 @@ msgid "MD5 password cleared because of role rename" msgstr "MD5 პაროლი გასუფთავდა როლის სახელის შეცვლის გამო" -#: commands/user.c:1518 gram.y:1297 +#: commands/user.c:1518 gram.y:1294 #, c-format msgid "unrecognized role option \"%s\"" msgstr "როლის უცნობი პარამეტრი: \"%s\"" @@ -12659,12 +12582,12 @@ msgid "Only roles with privileges of role \"%s\" may revoke privileges granted by this role." msgstr "მხოლოდ როლებს, რომლებსაც როლის \"%s\" პრივილეგიები გააჩნიათ, შეუძლიათ ამ როლის მიერ მინიჭებული პრივილეგიები მოაცილონ." -#: commands/user.c:2491 utils/adt/acl.c:1318 +#: commands/user.c:2491 utils/adt/acl.c:1324 #, c-format msgid "dependent privileges exist" msgstr "დამოკიდებული პრივილეგიები არსებობს" -#: commands/user.c:2492 utils/adt/acl.c:1319 +#: commands/user.c:2492 utils/adt/acl.c:1325 #, c-format msgid "Use CASCADE to revoke them too." msgstr "მათ გასაუქმებლადაც CASCADE გამოიყენეთ." @@ -12786,32 +12709,32 @@ msgid "cutoff for freezing multixacts is far in the past" msgstr "" -#: commands/vacuum.c:1890 +#: commands/vacuum.c:1900 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "ზოგიერთი ბაზა 2 მილიარდ ტრანზაქციაზე მეტია, რაც არ მომტვერსასრუტებულა" -#: commands/vacuum.c:1891 +#: commands/vacuum.c:1901 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "" -#: commands/vacuum.c:2070 +#: commands/vacuum.c:2080 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "" -#: commands/vacuum.c:2502 +#: commands/vacuum.c:2512 #, c-format msgid "scanned index \"%s\" to remove %lld row versions" msgstr "სკანირებული ინდექსი \"%s\" %lld მწკრივის ვერსიის წაშლას აპირებს" -#: commands/vacuum.c:2521 +#: commands/vacuum.c:2531 #, c-format msgid "index \"%s\" now contains %.0f row versions in %u pages" msgstr "ინდექსი \"%s\" ახლა %.0f მწკრივის ვერსიას შეიცავს, %u გვერდში" -#: commands/vacuum.c:2525 +#: commands/vacuum.c:2535 #, c-format msgid "" "%.0f index row versions were removed.\n" @@ -12819,14 +12742,14 @@ "%u index pages are currently deleted, of which %u are currently reusable." msgstr "" -#: commands/vacuumparallel.c:708 +#: commands/vacuumparallel.c:707 #, c-format msgid "launched %d parallel vacuum worker for index vacuuming (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index vacuuming (planned: %d)" msgstr[0] "ინდექსის მომტვერსასრუტებისთვის გაშვებულია %d პარალელური მომტვერსასრუტების დამხმარე პროცესი (დაგეგმილია: %d)" msgstr[1] "ინდექსის მომტვერსასრუტებისთვის გაშვებულია %d პარალელური მომტვერსასრუტების დამხმარე პროცესი (დაგეგმილია: %d)" -#: commands/vacuumparallel.c:714 +#: commands/vacuumparallel.c:713 #, c-format msgid "launched %d parallel vacuum worker for index cleanup (planned: %d)" msgid_plural "launched %d parallel vacuum workers for index cleanup (planned: %d)" @@ -12888,7 +12811,7 @@ msgid "SET TRANSACTION ISOLATION LEVEL must not be called in a subtransaction" msgstr "SET TRANSACTION ISOLATION LEVEL ქვემოთხოვნაში არ უნდა გამოიძახოთ" -#: commands/variable.c:606 storage/lmgr/predicate.c:1680 +#: commands/variable.c:606 storage/lmgr/predicate.c:1685 #, c-format msgid "cannot use serializable mode in a hot standby" msgstr "ცხელი მოლოდინში სერიალიზებადი რეჟიმის გამოყენება შეუძლებელია" @@ -12923,42 +12846,42 @@ msgid "cannot change \"client_encoding\" during a parallel operation" msgstr "პარალელური ოპერაციის დროს \"client_encoding\" პარამეტრს ვერ შეცვლით" -#: commands/variable.c:863 +#: commands/variable.c:876 #, c-format msgid "permission will be denied to set session authorization \"%s\"" msgstr "სესიის ავტორიზაციის \"%s\" დასაყენებლად წვდომა აკრძალული იქნება" -#: commands/variable.c:868 +#: commands/variable.c:881 #, c-format msgid "permission denied to set session authorization \"%s\"" msgstr "სესიის ავტორიზაციის \"%s\" დასაყენებლად წვდომა აკრძალულია" -#: commands/variable.c:972 +#: commands/variable.c:991 #, c-format msgid "permission will be denied to set role \"%s\"" msgstr "როლის (\"%s\") დაყენების წვდომა აკრძალული იქნება" -#: commands/variable.c:977 +#: commands/variable.c:996 #, c-format msgid "permission denied to set role \"%s\"" msgstr "როლის (\"%s\") დაყენების წვდომა აკრძალულია" -#: commands/variable.c:1177 +#: commands/variable.c:1200 #, c-format msgid "Bonjour is not supported by this build" msgstr "ამ აგებაში Bonjour -ის მხარდაჭერა არ არსებბს" -#: commands/variable.c:1205 +#: commands/variable.c:1228 #, c-format msgid "\"effective_io_concurrency\" must be set to 0 on platforms that lack posix_fadvise()." msgstr "პლატფორმებზე, რომლებზეც posix_fadvise() ხელმისაწვდომი არაა, \"effective_io_concurrency\"-ის მნიშვნელობა 0-ის ტოლი უნდა ყოს." -#: commands/variable.c:1218 +#: commands/variable.c:1241 #, c-format msgid "\"maintenance_io_concurrency\" must be set to 0 on platforms that lack posix_fadvise()." msgstr "პლატფორმებზე, რომლებზეც posix_fadvise() ხელმისაწვდომი არაა, \"maintenance_io_concurrency\"-ის მნიშვნელობა 0-ის ტოლი უნდა ყოს." -#: commands/variable.c:1231 +#: commands/variable.c:1254 #, c-format msgid "SSL is not supported by this build" msgstr "ამ აგებაში SSL-ის მხარდაჭერა არ არსებბს" @@ -13048,157 +12971,163 @@ msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "კურსორი \"%s\" ცხრილის (\"%s\") მარტივადი განახლებადი სკანირებას არ წარმოადგენს" -#: executor/execCurrent.c:280 executor/execExprInterp.c:2543 +#: executor/execCurrent.c:280 executor/execExprInterp.c:2555 #, 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:2555 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2567 #, c-format msgid "no value found for parameter %d" msgstr "პარამეტრისთვის მნიშვნელობების პოვნა შეუძლებელია: %d" -#: executor/execExpr.c:641 executor/execExpr.c:648 executor/execExpr.c:654 executor/execExprInterp.c:4741 executor/execExprInterp.c:4758 executor/execExprInterp.c:4857 executor/nodeModifyTable.c:194 executor/nodeModifyTable.c:205 executor/nodeModifyTable.c:222 executor/nodeModifyTable.c:230 +#: executor/execExpr.c:642 executor/execExpr.c:649 executor/execExpr.c:655 executor/execExprInterp.c:4852 executor/execExprInterp.c:4869 executor/execExprInterp.c:4968 executor/nodeModifyTable.c:203 executor/nodeModifyTable.c:214 executor/nodeModifyTable.c:231 executor/nodeModifyTable.c:239 #, c-format msgid "table row type and query-specified row type do not match" msgstr "" -#: executor/execExpr.c:642 executor/nodeModifyTable.c:195 +#: executor/execExpr.c:643 executor/nodeModifyTable.c:204 #, c-format msgid "Query has too many columns." msgstr "მოთხოვნას მეტისმეტად ბევრი სვეტ აქვს." -#: executor/execExpr.c:649 executor/nodeModifyTable.c:223 +#: executor/execExpr.c:650 executor/nodeModifyTable.c:232 #, c-format msgid "Query provides a value for a dropped column at ordinal position %d." msgstr "" -#: executor/execExpr.c:655 executor/execExprInterp.c:4759 executor/nodeModifyTable.c:206 +#: executor/execExpr.c:656 executor/execExprInterp.c:4870 executor/nodeModifyTable.c:215 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." msgstr "" -#: executor/execExpr.c:1103 parser/parse_agg.c:840 +#: executor/execExpr.c:1104 parser/parse_agg.c:838 #, c-format msgid "window function calls cannot be nested" msgstr "ფანჯრის ფუნქციის გამოძახებებს ერთმანეთში ვერ ჩადგამთ" -#: executor/execExpr.c:1640 +#: executor/execExpr.c:1649 #, c-format msgid "target type is not an array" msgstr "სამიზნე ტიპი მასივი არაა" -#: executor/execExpr.c:1980 +#: executor/execExpr.c:1989 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "ROW() სვეტს %s ტიპის მაგიერ %s აქვს" -#: executor/execExpr.c:2642 executor/execSRF.c:718 parser/parse_func.c:138 parser/parse_func.c:655 parser/parse_func.c:1033 +#: executor/execExpr.c:2653 executor/execSRF.c:718 parser/parse_func.c:138 parser/parse_func.c:655 parser/parse_func.c:1033 #, 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:2669 executor/execSRF.c:738 executor/functions.c:1067 utils/adt/jsonfuncs.c:4032 utils/fmgr/funcapi.c:89 utils/fmgr/funcapi.c:143 +#: executor/execExpr.c:2680 executor/execSRF.c:738 executor/functions.c:1068 utils/adt/jsonfuncs.c:4054 utils/fmgr/funcapi.c:89 utils/fmgr/funcapi.c:143 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "ფუნქცია, რომელიც სეტს აბრუნებს, გამოძახებულია კონტექსტში, რომელიც სეტებს ვერ იღებს" -#: executor/execExpr.c:3075 parser/parse_node.c:272 parser/parse_node.c:322 +#: executor/execExpr.c:3086 parser/parse_node.c:272 parser/parse_node.c:322 #, c-format msgid "cannot subscript type %s because it does not support subscripting" msgstr "" -#: executor/execExpr.c:3203 executor/execExpr.c:3225 +#: executor/execExpr.c:3214 executor/execExpr.c:3236 #, c-format msgid "type %s does not support subscripted assignment" msgstr "" -#: executor/execExprInterp.c:2007 +#: executor/execExprInterp.c:2019 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "%2$s ტიპის ატრიბუტი %1$d წაიშალა" -#: executor/execExprInterp.c:2013 +#: executor/execExprInterp.c:2025 #, c-format msgid "attribute %d of type %s has wrong type" msgstr "%2$s ტიპის ატრიბუტის %1$d ტიპი არასწორია" -#: executor/execExprInterp.c:2015 executor/execExprInterp.c:3214 executor/execExprInterp.c:3260 +#: executor/execExprInterp.c:2027 executor/execExprInterp.c:3226 executor/execExprInterp.c:3272 #, c-format msgid "Table has type %s, but query expects %s." msgstr "ცხრილის ტიპია %s, მოთხოვნა კი %s-ს მოელოდა." -#: executor/execExprInterp.c:2095 utils/adt/expandedrecord.c:99 utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1752 utils/cache/typcache.c:1911 utils/cache/typcache.c:2058 utils/fmgr/funcapi.c:569 +#: executor/execExprInterp.c:2107 utils/adt/expandedrecord.c:99 utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1752 utils/cache/typcache.c:1911 utils/cache/typcache.c:2058 utils/fmgr/funcapi.c:569 #, c-format msgid "type %s is not composite" msgstr "ტიპი %s კომპოზიტური არაა" -#: executor/execExprInterp.c:2698 +#: executor/execExprInterp.c:2710 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF ამ ტიპის ცხრილისთვის მხარდაუჭერელია" -#: executor/execExprInterp.c:2911 +#: executor/execExprInterp.c:2923 #, c-format msgid "cannot merge incompatible arrays" msgstr "შეუთავსებელი მასივების შერწყმა შეუძლებელია" -#: executor/execExprInterp.c:2912 +#: executor/execExprInterp.c:2924 #, c-format msgid "Array with element type %s cannot be included in ARRAY construct with element type %s." msgstr "" -#: executor/execExprInterp.c:2933 utils/adt/arrayfuncs.c:1305 utils/adt/arrayfuncs.c:3496 utils/adt/arrayfuncs.c:5586 utils/adt/arrayfuncs.c:6103 utils/adt/arraysubs.c:150 utils/adt/arraysubs.c:488 +#: executor/execExprInterp.c:2945 utils/adt/arrayfuncs.c:1305 utils/adt/arrayfuncs.c:3503 utils/adt/arrayfuncs.c:5593 utils/adt/arrayfuncs.c:6110 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:2953 executor/execExprInterp.c:2988 +#: executor/execExprInterp.c:2965 executor/execExprInterp.c:3000 #, c-format msgid "multidimensional arrays must have array expressions with matching dimensions" msgstr "მრავალგანზომილებიან მასივებს უნდა ჰქონდეთ მასივის გამოსახულებები შესაბამისი ზომებით" -#: executor/execExprInterp.c:2965 utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:335 utils/adt/arrayfuncs.c:494 utils/adt/arrayfuncs.c:727 utils/adt/arrayfuncs.c:1533 utils/adt/arrayfuncs.c:2341 utils/adt/arrayfuncs.c:2356 utils/adt/arrayfuncs.c:2618 utils/adt/arrayfuncs.c:2634 utils/adt/arrayfuncs.c:2942 utils/adt/arrayfuncs.c:2957 utils/adt/arrayfuncs.c:3298 utils/adt/arrayfuncs.c:3526 utils/adt/arrayfuncs.c:5358 utils/adt/arrayfuncs.c:6195 -#: utils/adt/arrayfuncs.c:6539 utils/adt/arrayutils.c:83 utils/adt/arrayutils.c:92 utils/adt/arrayutils.c:99 +#: executor/execExprInterp.c:2977 utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:335 utils/adt/arrayfuncs.c:494 utils/adt/arrayfuncs.c:727 utils/adt/arrayfuncs.c:1533 utils/adt/arrayfuncs.c:2341 utils/adt/arrayfuncs.c:2356 utils/adt/arrayfuncs.c:2618 utils/adt/arrayfuncs.c:2634 utils/adt/arrayfuncs.c:2895 utils/adt/arrayfuncs.c:2949 utils/adt/arrayfuncs.c:2964 utils/adt/arrayfuncs.c:3305 utils/adt/arrayfuncs.c:3533 utils/adt/arrayfuncs.c:5365 +#: utils/adt/arrayfuncs.c:6202 utils/adt/arrayfuncs.c:6546 utils/adt/arrayutils.c:83 utils/adt/arrayutils.c:92 utils/adt/arrayutils.c:99 #, c-format msgid "array size exceeds the maximum allowed (%d)" msgstr "მასივის ზომა მაქსიმალურ დასაშვებს(%d) აჭარბებს" -#: executor/execExprInterp.c:3213 executor/execExprInterp.c:3259 +#: executor/execExprInterp.c:3225 executor/execExprInterp.c:3271 #, c-format msgid "attribute %d has wrong type" msgstr "ატრიბუტის არასწორი ტიპი: %d" -#: executor/execExprInterp.c:3845 utils/adt/domains.c:158 +#: executor/execExprInterp.c:3857 utils/adt/domains.c:158 #, c-format msgid "domain %s does not allow null values" msgstr "დომენ %s-ს ნულოვანი მნიშვნელობების მხარდაჭერა არ გააჩნია" -#: executor/execExprInterp.c:3860 utils/adt/domains.c:196 +#: executor/execExprInterp.c:3872 utils/adt/domains.c:196 #, c-format msgid "value for domain %s violates check constraint \"%s\"" msgstr "მნიშვნელობა დომენისთვის %s არღვევს შემოწმების შეზღუდვას \"%s\"" -#: executor/execExprInterp.c:4433 +#: executor/execExprInterp.c:4447 #, c-format msgid "no SQL/JSON item found for specified path of column \"%s\"" msgstr "" -#: executor/execExprInterp.c:4438 +#: executor/execExprInterp.c:4452 #, c-format msgid "no SQL/JSON item found for specified path" msgstr "" -#: executor/execExprInterp.c:4742 +#. translator: first %s is a SQL/JSON clause (e.g. ON ERROR) +#: executor/execExprInterp.c:4652 executor/execExprInterp.c:4660 +#, c-format +msgid "could not coerce %s expression (%s) to the RETURNING type" +msgstr "ვერ შევაკავე %s გამოსახულება (%s) ტპზე RETURNING" + +#: executor/execExprInterp.c:4853 #, 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:4858 executor/execSRF.c:977 +#: executor/execExprInterp.c:4969 executor/execSRF.c:977 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "" @@ -13238,137 +13167,137 @@ msgid "Key conflicts with existing key." msgstr "გასაღები აქტიურ გასაღებთან კონფლიქტობს." -#: executor/execMain.c:1041 +#: executor/execMain.c:1039 #, c-format msgid "cannot change sequence \"%s\"" msgstr "მიმდევრობის შეცვლა შეუძლებელია: \"%s\"" -#: executor/execMain.c:1047 +#: executor/execMain.c:1045 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "'TOAST' ტიპის ურთიერთობის \"%s\" შეცვლა შეუძლებელია" -#: executor/execMain.c:1066 +#: executor/execMain.c:1064 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "მატერიალიზებული ხედის შეცვლა შეუძლებელია: %s" -#: executor/execMain.c:1078 +#: executor/execMain.c:1076 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "გარე ცხრილში ჩამატების შეცდომა: %s" -#: executor/execMain.c:1084 +#: executor/execMain.c:1082 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "გარე ცხრილი ჩამატების საშუალებას არ იძლევა: %s" -#: executor/execMain.c:1091 +#: executor/execMain.c:1089 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "გარე ცხრილის განახლების შეცდომა: %s" -#: executor/execMain.c:1097 +#: executor/execMain.c:1095 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "გარე ცხრილი განახლებების საშუალებას არ იძლევა: %s" -#: executor/execMain.c:1104 +#: executor/execMain.c:1102 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "გარე ცხრილიდან წაშლის შეცდომა: %s" -#: executor/execMain.c:1110 +#: executor/execMain.c:1108 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "გარე ცხრილი წაშლის საშუალებას არ იძლევა: %s" -#: executor/execMain.c:1121 +#: executor/execMain.c:1119 #, c-format msgid "cannot change relation \"%s\"" msgstr "ურთიერთობის შეცვლის შეცდომა: %s" -#: executor/execMain.c:1148 +#: executor/execMain.c:1146 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "მიმდევრობაში მწკრივების ჩაკეტვა შეუძლებელია: %s" -#: executor/execMain.c:1155 +#: executor/execMain.c:1153 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "\"TOAST\" ურთიერთობაში მწკრივების ჩაკეტვა შეუძლებელია: %s" -#: executor/execMain.c:1162 +#: executor/execMain.c:1160 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "ხედში მწკრივების ჩაკეტვა შეუძლებელია: %s" -#: executor/execMain.c:1170 +#: executor/execMain.c:1168 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "მატერიალიზებულ ხედში მწკრივების ჩაკეტვა შეუძლებელია: %s" -#: executor/execMain.c:1179 executor/execMain.c:2684 executor/nodeLockRows.c:135 +#: executor/execMain.c:1177 executor/execMain.c:2689 executor/nodeLockRows.c:135 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "გარე ცხრილში მწკრივების ჩაკეტვა შეუძლებელია: %s" -#: executor/execMain.c:1185 +#: executor/execMain.c:1183 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "ურთიერთობაში მწკრივების ჩაკეტვა შეუძლებელია: %s" -#: executor/execMain.c:1898 +#: executor/execMain.c:1901 #, c-format msgid "new row for relation \"%s\" violates partition constraint" msgstr "ახალი მწკრივი ურთიერთობისთვის \"%s\" დანაყოფის შეზღუდვას არღვევს" -#: executor/execMain.c:1900 executor/execMain.c:1984 executor/execMain.c:2035 executor/execMain.c:2145 +#: executor/execMain.c:1903 executor/execMain.c:1987 executor/execMain.c:2038 executor/execMain.c:2148 #, c-format msgid "Failing row contains %s." msgstr "შეცდომიანი მწკრივი \"%s\"-ს შეიცავს." -#: executor/execMain.c:1981 +#: executor/execMain.c:1984 #, c-format msgid "null value in column \"%s\" of relation \"%s\" violates not-null constraint" msgstr "ნულოვანი მნიშვნელობა სვეტში \"%s\" ურთიერთობისთვის \"%s\" არანულოვან შეზღუდვას არღვევს" -#: executor/execMain.c:2033 +#: executor/execMain.c:2036 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "ახალი მწკრივი ურთიერთობისთვის \"%s\" არღვევს შემოწმების შეზღუდვას \"%s\"" -#: executor/execMain.c:2143 +#: executor/execMain.c:2146 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "ახალი მწკრივი არღვევს შემოწმების პარამეტრს ხედისთვის \"%s\"" -#: executor/execMain.c:2153 +#: executor/execMain.c:2156 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "ახალი მწკრივი არღვევს მწკრივის-დონის უსაფრთხოების პოლიტიკას \"%s\" ცხრილისთვის \"%s\"" -#: executor/execMain.c:2158 +#: executor/execMain.c:2161 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "ახალი მწკრივი ცხრილისთვის \"%s\" მწკრივის-დონის უსაფრთხოების პოლიტიკა არღვევს" -#: executor/execMain.c:2166 +#: executor/execMain.c:2169 #, c-format msgid "target row violates row-level security policy \"%s\" (USING expression) for table \"%s\"" msgstr "" -#: executor/execMain.c:2171 +#: executor/execMain.c:2174 #, c-format msgid "target row violates row-level security policy (USING expression) for table \"%s\"" msgstr "" -#: executor/execMain.c:2178 +#: executor/execMain.c:2181 #, c-format msgid "new row violates row-level security policy \"%s\" (USING expression) for table \"%s\"" msgstr "" -#: executor/execMain.c:2183 +#: executor/execMain.c:2186 #, c-format msgid "new row violates row-level security policy (USING expression) for table \"%s\"" msgstr "" @@ -13398,52 +13327,52 @@ msgid "concurrent delete, retrying" msgstr "ერთდროული წაშლა. თავიდან ვცდი" -#: executor/execReplication.c:352 parser/parse_cte.c:302 parser/parse_oper.c:221 utils/adt/array_userfuncs.c:1334 utils/adt/array_userfuncs.c:1477 utils/adt/arrayfuncs.c:3845 utils/adt/arrayfuncs.c:4400 utils/adt/arrayfuncs.c:6419 utils/adt/rowtypes.c:1220 +#: executor/execReplication.c:352 parser/parse_cte.c:302 parser/parse_oper.c:221 utils/adt/array_userfuncs.c:1334 utils/adt/array_userfuncs.c:1477 utils/adt/arrayfuncs.c:3852 utils/adt/arrayfuncs.c:4407 utils/adt/arrayfuncs.c:6426 utils/adt/rowtypes.c:1220 #, c-format msgid "could not identify an equality operator for type %s" msgstr "ტიპისთვის \"%s\" ტოლობის ფუნქცია ვერ ვიპოვე" -#: executor/execReplication.c:683 executor/execReplication.c:689 +#: executor/execReplication.c:687 executor/execReplication.c:693 #, c-format msgid "cannot update table \"%s\"" msgstr "ცხრილის განახლების შეცდომა: %s" -#: executor/execReplication.c:685 executor/execReplication.c:697 +#: executor/execReplication.c:689 executor/execReplication.c:701 #, c-format msgid "Column used in the publication WHERE expression is not part of the replica identity." msgstr "გამოცემის WHERE გამოსახულებაში გამოყენებული სვეტი რეპლიკის იდენტიფიკაციის ნაწილს არ წარმოადგენს." -#: executor/execReplication.c:691 executor/execReplication.c:703 +#: executor/execReplication.c:695 executor/execReplication.c:707 #, c-format msgid "Column list used by the publication does not cover the replica identity." msgstr "გამოცემის მიერ გამოყენებული სვეტების სია რეპლიკის იდენტიფიკაციას არ ფარავს." -#: executor/execReplication.c:695 executor/execReplication.c:701 +#: executor/execReplication.c:699 executor/execReplication.c:705 #, c-format msgid "cannot delete from table \"%s\"" msgstr "ცხრილიდან წაშლის შეცდომა: %s" -#: executor/execReplication.c:721 +#: executor/execReplication.c:725 #, c-format msgid "cannot update table \"%s\" because it does not have a replica identity and publishes updates" msgstr "ცხრილის \"%s\" განახლება შეუძლებელია, რადგან მას რეპლიკის იდენტიფიკაცია არ გააჩნია და განახლებებს აქვეყნებს" -#: executor/execReplication.c:723 +#: executor/execReplication.c:727 #, c-format msgid "To enable updating the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "ცხრილის განახლების ჩასართავად ALTER TABLE-ით REPLICA IDENTITY დააყენეთ." -#: executor/execReplication.c:727 +#: executor/execReplication.c:731 #, c-format msgid "cannot delete from table \"%s\" because it does not have a replica identity and publishes deletes" msgstr "ცხრილიდან \"%s\" წაშლა შეუძლებელია, რადგან მას რეპლიკის იდენტიფიკაცია არ გააჩნია და წაშლებს აქვეყნებს" -#: executor/execReplication.c:729 +#: executor/execReplication.c:733 #, c-format msgid "To enable deleting from the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "ცხრილიდან წაშლის ჩასართავად ALTER TABLE-ის გამოყენებით REPLICA IDENTITY დააყენეთ." -#: executor/execReplication.c:745 +#: executor/execReplication.c:749 #, c-format msgid "cannot use relation \"%s.%s\" as logical replication target" msgstr "ურთიერთობას \"%s.%s\" ლოგიკური რეპლიკაციის სამიზნედ ვერ გამოიყენებთ" @@ -13520,84 +13449,84 @@ msgid "could not determine actual type of argument declared %s" msgstr "არგუმენტის, აღწერილის, როგორც '%s' ტიპის დადგენა შეუძლებელია" -#: executor/functions.c:512 +#: executor/functions.c:513 #, c-format msgid "cannot COPY to/from client in an SQL function" msgstr "'SQL' ფუნქციაში კლიენტიდან/კლიენტამდე COPY შეუძლებელია" #. translator: %s is a SQL statement name -#: executor/functions.c:518 +#: executor/functions.c:519 #, c-format msgid "%s is not allowed in an SQL function" msgstr "%s SQL ფუნქციაში დაშვებული არაა" #. translator: %s is a SQL statement name -#: executor/functions.c:526 executor/spi.c:1741 executor/spi.c:2649 +#: executor/functions.c:527 executor/spi.c:1744 executor/spi.c:2657 #, c-format msgid "%s is not allowed in a non-volatile function" msgstr "%s-ის გამოყენება არააქროლად ფუნქციაში დაუშვებელია" -#: executor/functions.c:1451 +#: executor/functions.c:1452 #, c-format msgid "SQL function \"%s\" statement %d" msgstr "SQL ფუნქცია \"%s\" გამოსახულება %d" -#: executor/functions.c:1477 +#: executor/functions.c:1478 #, c-format msgid "SQL function \"%s\" during startup" msgstr "SQL ფუნქცია \"%s\" გაშვებისას" -#: executor/functions.c:1562 +#: executor/functions.c:1563 #, c-format msgid "calling procedures with output arguments is not supported in SQL functions" msgstr "გამოტანის არგუმენტების მქონე პროცედურების გამოძახება SQL-ის ფუნქციებში მხარდაჭერილი არაა" -#: executor/functions.c:1697 executor/functions.c:1735 executor/functions.c:1749 executor/functions.c:1844 executor/functions.c:1877 executor/functions.c:1891 +#: executor/functions.c:1698 executor/functions.c:1736 executor/functions.c:1750 executor/functions.c:1845 executor/functions.c:1878 executor/functions.c:1892 #, c-format msgid "return type mismatch in function declared to return %s" msgstr "დაბრუნების ტიპის შეცდომა ფუნქციაში, რომელსაც აღწერილი აქვს, დააბრუნოს %s" -#: executor/functions.c:1699 +#: executor/functions.c:1700 #, c-format msgid "Function's final statement must be SELECT or INSERT/UPDATE/DELETE/MERGE RETURNING." msgstr "ფუნქციის ბოლო გამოსახულება SELECT ან INSERT/UPDATE/DELETE/MERGE RETURNING უნდა იყოს." -#: executor/functions.c:1737 +#: executor/functions.c:1738 #, c-format msgid "Final statement must return exactly one column." msgstr "პირველი გამოსახულება ზუსტად ერთ სვეტს უნდა აბრუნებდეს." -#: executor/functions.c:1751 +#: executor/functions.c:1752 #, c-format msgid "Actual return type is %s." msgstr "დაბრუნების ნამდვილი ტიპია %s." -#: executor/functions.c:1846 +#: executor/functions.c:1847 #, c-format msgid "Final statement returns too many columns." msgstr "პირველი გამოსახულება მეტისმეტად ბევრ სვეტს აბრუნებს." -#: executor/functions.c:1879 +#: executor/functions.c:1880 #, c-format msgid "Final statement returns %s instead of %s at column %d." msgstr "" -#: executor/functions.c:1893 +#: executor/functions.c:1894 #, c-format msgid "Final statement returns too few columns." msgstr "ბოლო გამოსახულება მეტისმეტად ცოტა სვეტს აბრუნებს." -#: executor/functions.c:1921 +#: executor/functions.c:1922 #, c-format msgid "return type %s is not supported for SQL functions" msgstr "დაბრუნების ტიპი %s SQL ფუნქციებში მხარდაჭერილი არაა" -#: executor/nodeAgg.c:3936 executor/nodeWindowAgg.c:2976 +#: executor/nodeAgg.c:3936 executor/nodeWindowAgg.c:2975 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "" -#: executor/nodeAgg.c:3966 parser/parse_agg.c:682 parser/parse_agg.c:710 +#: executor/nodeAgg.c:3966 parser/parse_agg.c:680 parser/parse_agg.c:708 #, c-format msgid "aggregate function calls cannot be nested" msgstr "აგრეგატულ ფუნქციებს ერთანეთში ვერ ჩადგამთ" @@ -13607,7 +13536,7 @@ msgid "custom scan \"%s\" does not support MarkPos" msgstr "" -#: executor/nodeHashjoin.c:1130 executor/nodeHashjoin.c:1160 +#: executor/nodeHashjoin.c:1131 executor/nodeHashjoin.c:1161 #, c-format msgid "could not rewind hash-join temporary file" msgstr "" @@ -13627,73 +13556,73 @@ msgid "LIMIT must not be negative" msgstr "LIMIT უარყოფითი არ უნდა იყოს" -#: executor/nodeMergejoin.c:1578 +#: executor/nodeMergejoin.c:1579 #, c-format msgid "RIGHT JOIN is only supported with merge-joinable join conditions" msgstr "" -#: executor/nodeMergejoin.c:1596 +#: executor/nodeMergejoin.c:1597 #, c-format msgid "FULL JOIN is only supported with merge-joinable join conditions" msgstr "" -#: executor/nodeModifyTable.c:231 +#: executor/nodeModifyTable.c:240 #, c-format msgid "Query has too few columns." msgstr "მოთხოვნას ძალიან ცოტა სვეტი აქვს." -#: executor/nodeModifyTable.c:1531 executor/nodeModifyTable.c:1605 +#: executor/nodeModifyTable.c:1540 executor/nodeModifyTable.c:1614 #, c-format msgid "tuple to be deleted was already modified by an operation triggered by the current command" msgstr "" -#: executor/nodeModifyTable.c:1760 +#: executor/nodeModifyTable.c:1769 #, c-format msgid "invalid ON UPDATE specification" msgstr "\"ON UPDATE\"-ის არასწორი სპეციფიკაცია" -#: executor/nodeModifyTable.c:1761 +#: executor/nodeModifyTable.c:1770 #, c-format msgid "The result tuple would appear in a different partition than the original tuple." msgstr "" -#: executor/nodeModifyTable.c:2217 +#: executor/nodeModifyTable.c:2226 #, c-format msgid "cannot move tuple across partitions when a non-root ancestor of the source partition is directly referenced in a foreign key" msgstr "" -#: executor/nodeModifyTable.c:2218 +#: executor/nodeModifyTable.c:2227 #, c-format msgid "A foreign key points to ancestor \"%s\" but not the root ancestor \"%s\"." msgstr "" -#: executor/nodeModifyTable.c:2221 +#: executor/nodeModifyTable.c:2230 #, c-format msgid "Consider defining the foreign key on table \"%s\"." msgstr "განიხილეთ გარე გასაღების აღწერა ცხრილზე \"%s\"." #. translator: %s is a SQL command name -#: executor/nodeModifyTable.c:2567 executor/nodeModifyTable.c:3081 executor/nodeModifyTable.c:3242 +#: executor/nodeModifyTable.c:2596 executor/nodeModifyTable.c:3138 executor/nodeModifyTable.c:3308 #, c-format msgid "%s command cannot affect row a second time" msgstr "ბრძანებას %s მწკრივის მეორედ შეცვლა არ შეუძლია" -#: executor/nodeModifyTable.c:2569 +#: executor/nodeModifyTable.c:2598 #, c-format msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." msgstr "" -#: executor/nodeModifyTable.c:3074 executor/nodeModifyTable.c:3235 +#: executor/nodeModifyTable.c:3131 executor/nodeModifyTable.c:3301 #, c-format msgid "tuple to be updated or deleted was already modified by an operation triggered by the current command" msgstr "გასაახლებელი ან წასაშლელ კორტეჟი მიმდინარე ბრძანების მიერ დატრიგერებულმა ოპერაციამ უკვე შეცვალა" -#: executor/nodeModifyTable.c:3083 executor/nodeModifyTable.c:3244 +#: executor/nodeModifyTable.c:3140 executor/nodeModifyTable.c:3310 #, c-format msgid "Ensure that not more than one source row matches any one target row." msgstr "" -#: executor/nodeModifyTable.c:3152 +#: executor/nodeModifyTable.c:3209 #, c-format msgid "tuple to be merged was already moved to another partition due to concurrent update" msgstr "შესარწყმელი კორტეჟები პარალელური განახლების გამო უკვე სხვა დანაყოფშია გადატანილი" @@ -13763,7 +13692,7 @@ msgid "frame ending offset must not be negative" msgstr "ჩარჩოს ბოლოს წანაცვლება უარყოფითი ვერ იქნება" -#: executor/nodeWindowAgg.c:2892 +#: executor/nodeWindowAgg.c:2891 #, c-format msgid "aggregate function %s does not support use as a window function" msgstr "აგრეგატულ ფუნქციას %s ფანჯრის ფუნქციად გაშვების მხარდაჭერა არ გააჩნია" @@ -13798,49 +13727,49 @@ msgid "subtransaction left non-empty SPI stack" msgstr "ქვეტრანზაქცის შემდეგ დარჩენილი SPI სტეკი ცარიელი არაა" -#: executor/spi.c:1599 +#: executor/spi.c:1602 #, c-format msgid "cannot open multi-query plan as cursor" msgstr "მრავალმოთხოვნიანი გეგმის კურსორის სახით გახსნა შეუძლებელია" #. translator: %s is name of a SQL command, eg INSERT -#: executor/spi.c:1609 +#: executor/spi.c:1612 #, c-format msgid "cannot open %s query as cursor" msgstr "%s გამოსახულების კურსორის სახით გახნა შეუძლებელია" -#: executor/spi.c:1715 +#: executor/spi.c:1718 #, c-format msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE მხარდაჭერილი არაა" -#: executor/spi.c:1716 parser/analyze.c:2928 +#: executor/spi.c:1719 parser/analyze.c:2928 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "გადახვევადი კურსორები READ ONLY უნდა იყოს." -#: executor/spi.c:2488 +#: executor/spi.c:2496 #, c-format msgid "empty query does not return tuples" msgstr "ცარიელი მოთხოვნა კორტეჟებს არ აბრუნებს" #. translator: %s is name of a SQL command, eg INSERT -#: executor/spi.c:2562 +#: executor/spi.c:2570 #, c-format msgid "%s query does not return tuples" msgstr "მოთხოვნა %s კორტეჟებს არ აბრუნებს" -#: executor/spi.c:2979 +#: executor/spi.c:2987 #, c-format msgid "SQL expression \"%s\"" msgstr "SQL გამოსახულება \"%s\"" -#: executor/spi.c:2984 +#: executor/spi.c:2992 #, c-format msgid "PL/pgSQL assignment \"%s\"" msgstr "PL/pgSQL მინიჭება \"%s\"" -#: executor/spi.c:2987 +#: executor/spi.c:2995 #, c-format msgid "SQL statement \"%s\"" msgstr "SQL ოპერატორი \"%s\"" @@ -13850,413 +13779,418 @@ msgid "could not send tuple to shared-memory queue" msgstr "გაზიარებული-მეხსიერების მქონე რიგში კორტეჟის გაგზავნა შეუძლებელია" -#: foreign/foreign.c:224 +#: foreign/foreign.c:225 #, c-format msgid "user mapping not found for user \"%s\", server \"%s\"" msgstr "\"%s\"-სთვის მომხმარებლის ასახვა ვერ ვიპოვე. სერვერი \"%s\"" -#: foreign/foreign.c:650 +#: foreign/foreign.c:336 optimizer/plan/createplan.c:7153 optimizer/util/plancat.c:540 +#, c-format +msgid "access to non-system foreign table is restricted" +msgstr "" + +#: foreign/foreign.c:660 #, c-format msgid "invalid option \"%s\"" msgstr "არასწორი პარამეტრი \"%s\"" -#: foreign/foreign.c:652 +#: foreign/foreign.c:662 #, c-format msgid "Perhaps you meant the option \"%s\"." msgstr "შესაძლოა, გულისხმობდით პარამეტრს \"%s\"." -#: foreign/foreign.c:654 +#: foreign/foreign.c:664 #, c-format msgid "There are no valid options in this context." msgstr "ამ კონტექსტში სწორი პარამეტრები არ არსებობს." -#: gram.y:1234 +#: gram.y:1231 #, c-format msgid "UNENCRYPTED PASSWORD is no longer supported" msgstr "UNENCRYPTED PASSWORD მხარდაჭერილი აღარაა" -#: gram.y:1235 +#: gram.y:1232 #, c-format msgid "Remove UNENCRYPTED to store the password in encrypted form instead." msgstr "პაროლის დაშიფრულ ფორმაში დასამახსოვრებლად წაშალეთ UNENCRYPTED." -#: gram.y:1562 gram.y:1578 +#: gram.y:1559 gram.y:1575 #, c-format msgid "CREATE SCHEMA IF NOT EXISTS cannot include schema elements" msgstr "CREATE SCHEMA IF NOT EXISTS არ შეიძლება, სქემის ელემენტებს შეიცავდეს" -#: gram.y:1730 +#: gram.y:1727 #, c-format msgid "current database cannot be changed" msgstr "მიმდინარე ბაზის შეცვლა შეუძლებელია" -#: gram.y:1863 +#: gram.y:1860 #, c-format msgid "time zone interval must be HOUR or HOUR TO MINUTE" msgstr "დროის სარტყლის ინტერვალი HOUR ან HOUR TO MINUTE უნდა იყოს" -#: gram.y:2539 +#: gram.y:2487 #, c-format msgid "column number must be in range from 1 to %d" msgstr "სვეტის ნომერი უნდა იყოს 1-დან %d-მდე" -#: gram.y:3135 +#: gram.y:3083 #, c-format msgid "sequence option \"%s\" not supported here" msgstr "მიმდევრობის პარამეტრი \"%s\" აქ მხარდაჭერილი არაა" -#: gram.y:3174 +#: gram.y:3122 #, c-format msgid "modulus for hash partition provided more than once" msgstr "ჰეშ-დანაყოფის მოდული ერთზე მეტჯერაა მითითებული" -#: gram.y:3183 +#: gram.y:3131 #, c-format msgid "remainder for hash partition provided more than once" msgstr "დარჩენილი ნაწილი ჰეშ-დანაყოფისთვის ერთზე მეტჯერაა მითითებული" -#: gram.y:3190 +#: gram.y:3138 #, c-format msgid "unrecognized hash partition bound specification \"%s\"" msgstr "" -#: gram.y:3198 +#: gram.y:3146 #, c-format msgid "modulus for hash partition must be specified" msgstr "საჭიროა ჰეშ დანაყოფის მოდულის მითითება" -#: gram.y:3202 +#: gram.y:3150 #, c-format msgid "remainder for hash partition must be specified" msgstr "საჭიროა ჰეშ დანაყოფის ნაშთის მითითება" -#: gram.y:3410 gram.y:3444 +#: gram.y:3358 gram.y:3392 #, c-format msgid "STDIN/STDOUT not allowed with PROGRAM" msgstr "STDIN/STDOUT-ი PROGRAM-თან ერთად დაშვებული არაა" -#: gram.y:3416 +#: gram.y:3364 #, c-format msgid "WHERE clause not allowed with COPY TO" msgstr "პირობა 'WHERE' 'COPY TO'-სთან ერთად დაშვებული არაა" -#: gram.y:3764 gram.y:3771 gram.y:13068 gram.y:13076 +#: gram.y:3712 gram.y:3719 gram.y:13023 gram.y:13031 #, c-format msgid "GLOBAL is deprecated in temporary table creation" msgstr "დროებითი ცხრილის შექმნაში GLOBAL-ი მოძველებულია" -#: gram.y:4047 +#: gram.y:3995 #, c-format msgid "for a generated column, GENERATED ALWAYS must be specified" msgstr "გენერირებული სვეტისთვის GENERATED ALWAYS-ის მითითება აუცილებელია" -#: gram.y:4392 utils/adt/ri_triggers.c:2103 +#: gram.y:4340 utils/adt/ri_triggers.c:2103 #, c-format msgid "MATCH PARTIAL not yet implemented" msgstr "MATCH PARTIAL ჯერ განხორციელებული არაა" -#: gram.y:4484 +#: gram.y:4432 #, c-format msgid "a column list with %s is only supported for ON DELETE actions" msgstr "" -#: gram.y:5196 +#: gram.y:5151 #, c-format msgid "CREATE EXTENSION ... FROM is no longer supported" msgstr "CREATE EXTENSION ... FROM უკვე მხარდაუჭერელია" -#: gram.y:5894 +#: gram.y:5849 #, c-format msgid "unrecognized row security option \"%s\"" msgstr "მწკრივის უსაფრთხოების უცნობი პარამეტრი:\"%s\"" -#: gram.y:5895 +#: gram.y:5850 #, c-format msgid "Only PERMISSIVE or RESTRICTIVE policies are supported currently." msgstr "" -#: gram.y:5980 +#: gram.y:5935 #, c-format msgid "CREATE OR REPLACE CONSTRAINT TRIGGER is not supported" msgstr "CREATE OR REPLACE CONSTRAINT TRIGGER მხარდაუჭერელია" -#: gram.y:6017 +#: gram.y:5972 msgid "duplicate trigger events specified" msgstr "მითითებულია ტრიგერი მეორდება" -#: gram.y:6159 parser/parse_utilcmd.c:3839 parser/parse_utilcmd.c:3865 +#: gram.y:6114 parser/parse_utilcmd.c:3692 parser/parse_utilcmd.c:3718 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "" -#: gram.y:6166 +#: gram.y:6121 #, c-format msgid "conflicting constraint properties" msgstr "ერთმანეთთან შეუთავსებელი შეზღუდვის თვისებები" -#: gram.y:6265 +#: gram.y:6220 #, c-format msgid "CREATE ASSERTION is not yet implemented" msgstr "CREATE ASSERTION ჯერ განუხორცელებია" -#: gram.y:6582 +#: gram.y:6537 #, c-format msgid "dropping an enum value is not implemented" msgstr "ჩამონათვლის მნიშვნელობის მოცილება განხორციელებული არაა" -#: gram.y:6700 +#: gram.y:6655 #, c-format msgid "RECHECK is no longer required" msgstr "RECHECK საჭირო აღარაა" -#: gram.y:6701 +#: gram.y:6656 #, c-format msgid "Update your data type." msgstr "განაახლეთ თქვენი მონაცემთა ტიპი." -#: gram.y:8574 +#: gram.y:8529 #, c-format msgid "aggregates cannot have output arguments" msgstr "აგრეგატებს გამოტანის არგუმენტები ვერ ექნება" -#: gram.y:9037 utils/adt/regproc.c:670 +#: gram.y:8992 utils/adt/regproc.c:670 #, c-format msgid "missing argument" msgstr "ნაკლული არგუმენტი" -#: gram.y:9038 utils/adt/regproc.c:671 +#: gram.y:8993 utils/adt/regproc.c:671 #, c-format msgid "Use NONE to denote the missing argument of a unary operator." msgstr "" -#: gram.y:11266 gram.y:11285 +#: gram.y:11221 gram.y:11240 #, c-format msgid "WITH CHECK OPTION not supported on recursive views" msgstr "WITH CHECK OPTION რეკურსიულ ხედებზე მხარდაუჭერელია" -#: gram.y:13207 +#: gram.y:13162 #, c-format msgid "LIMIT #,# syntax is not supported" msgstr "LIMIT #,# სინტაქსი მხარდაჭერილი არაა" -#: gram.y:13208 +#: gram.y:13163 #, c-format msgid "Use separate LIMIT and OFFSET clauses." msgstr "გამოიყენეთ განცალკევებული LIMIT და OFFSET პირობები." -#: gram.y:14083 +#: gram.y:14038 #, c-format msgid "only one DEFAULT value is allowed" msgstr "დასაშვებია DEFAULT_ის მხოლოდ ერთი მნიშვნელობა" -#: gram.y:14092 +#: gram.y:14047 #, c-format msgid "only one PATH value per column is allowed" msgstr "ყოველ სვეტზე PATH-ის მხოლოდ ერთი მნიშვნელობაა დასაშვები" -#: gram.y:14101 +#: gram.y:14056 #, c-format msgid "conflicting or redundant NULL / NOT NULL declarations for column \"%s\"" msgstr "" -#: gram.y:14110 +#: gram.y:14065 #, c-format msgid "unrecognized column option \"%s\"" msgstr "სვეტის უცნობი პარამეტრი %s" -#: gram.y:14192 +#: gram.y:14147 #, c-format msgid "only string constants are supported in JSON_TABLE path specification" msgstr "" -#: gram.y:14514 +#: gram.y:14469 #, c-format msgid "precision for type float must be at least 1 bit" msgstr "წილადი რიცხვების სიზუსტე 1 ბიტი მაინც უნდა იყოს" -#: gram.y:14523 +#: gram.y:14478 #, c-format msgid "precision for type float must be less than 54 bits" msgstr "წილადი რიცხვების სიზუსტე 54 ბიტზე მეტი ვერ იქნება" -#: gram.y:15040 +#: gram.y:14995 #, c-format msgid "wrong number of parameters on left side of OVERLAPS expression" msgstr "" -#: gram.y:15045 +#: gram.y:15000 #, c-format msgid "wrong number of parameters on right side of OVERLAPS expression" msgstr "" -#: gram.y:15222 +#: gram.y:15177 #, c-format msgid "UNIQUE predicate is not yet implemented" msgstr "პრედიკატი UNIQUE ჯერ განხორციელებული არაა" -#: gram.y:15636 +#: gram.y:15591 #, c-format msgid "cannot use multiple ORDER BY clauses with WITHIN GROUP" msgstr "'WITHIN GROUP'-თან ერთად ერთზე მეტი ORDER BY პირობის გამოყენება შეუძლებელია" -#: gram.y:15641 +#: gram.y:15596 #, c-format msgid "cannot use DISTINCT with WITHIN GROUP" msgstr "\"DISTINCT\"-ს \"WITHIN GROUP\"-თან ერთად ვერ გამოიყენებთ" -#: gram.y:15646 +#: gram.y:15601 #, c-format msgid "cannot use VARIADIC with WITHIN GROUP" msgstr "\"VARIADIC\"-ს \"WITHIN GROUP\"-თან ერთად ვერ გამოიყენებთ" -#: gram.y:16373 gram.y:16397 +#: gram.y:16328 gram.y:16352 #, c-format msgid "frame start cannot be UNBOUNDED FOLLOWING" msgstr "ჩარჩოს დასაწყისი UNBOUNDED FOLLOWING ვერ იქნება" -#: gram.y:16378 +#: gram.y:16333 #, c-format msgid "frame starting from following row cannot end with current row" msgstr "ჩარჩო, რომელიც შემდეგი მწკრივიდან იწყება, მიმდინარე მწკრივზე ვერ დასრულდება" -#: gram.y:16402 +#: gram.y:16357 #, c-format msgid "frame end cannot be UNBOUNDED PRECEDING" msgstr "ჩარჩოს დასასრული UNBOUNDED PRECEDING ვერ იქნება" -#: gram.y:16408 +#: gram.y:16363 #, c-format msgid "frame starting from current row cannot have preceding rows" msgstr "ჩარჩოს, რომელიც მიმდინარე მწკრივიდან იწყება, წინა ჩარჩოები ვერ ექნება" -#: gram.y:16415 +#: gram.y:16370 #, c-format msgid "frame starting from following row cannot have preceding rows" msgstr "ჩარჩოს, რომელიც შემდეგი მწკრივიდან იწყება, წინა ჩარჩოები ვერ ექნება" -#: gram.y:16964 +#: gram.y:16919 #, c-format msgid "unrecognized JSON encoding: %s" msgstr "უცნობი JSON კოდირება \"%s\"" -#: gram.y:17288 +#: gram.y:17243 #, c-format msgid "type modifier cannot have parameter name" msgstr "ტიპის მოდიფიკატორს პარამეტრის სახელი ვერ ექნება" -#: gram.y:17294 +#: gram.y:17249 #, c-format msgid "type modifier cannot have ORDER BY" msgstr "ტიპის მოდიფიკატორს ORDER BY ვერ ექნება" -#: gram.y:17362 gram.y:17369 gram.y:17376 +#: gram.y:17317 gram.y:17324 gram.y:17331 #, c-format msgid "%s cannot be used as a role name here" msgstr "%s აქ როგორც როლის სახელს ვერ გამოიყენებთ" -#: gram.y:17466 gram.y:18955 +#: gram.y:17421 gram.y:18906 #, c-format msgid "WITH TIES cannot be specified without ORDER BY clause" msgstr "WITH TIES-ს ORDER BY პირობის გარეშე ვერ მიუთითებთ" -#: gram.y:18646 gram.y:18821 +#: gram.y:18597 gram.y:18772 msgid "improper use of \"*\"" msgstr "\"*\"-ის არასათანადო გამოყენება" -#: gram.y:18784 gram.y:18801 tsearch/spell.c:963 tsearch/spell.c:980 tsearch/spell.c:997 tsearch/spell.c:1014 tsearch/spell.c:1079 +#: gram.y:18735 gram.y:18752 tsearch/spell.c:963 tsearch/spell.c:980 tsearch/spell.c:997 tsearch/spell.c:1014 tsearch/spell.c:1079 #, c-format msgid "syntax error" msgstr "სინტაქსის შეცდომა" -#: gram.y:18885 +#: gram.y:18836 #, c-format msgid "an ordered-set aggregate with a VARIADIC direct argument must have one VARIADIC aggregated argument of the same data type" msgstr "" -#: gram.y:18922 +#: gram.y:18873 #, c-format msgid "multiple ORDER BY clauses not allowed" msgstr "\"ORDER BY\"-ის გამოყენება მხოლოდ ერთხელ შეგიძლიათ" -#: gram.y:18933 +#: gram.y:18884 #, c-format msgid "multiple OFFSET clauses not allowed" msgstr "\"OFFSET\"-ის გამოყენება მხოლოდ ერთხელ შეგიძლიათ" -#: gram.y:18942 +#: gram.y:18893 #, c-format msgid "multiple LIMIT clauses not allowed" msgstr "\"LIMIT\"-ის გამოყენება მხოლოდ ერთხელ შეგიძლიათ" -#: gram.y:18951 +#: gram.y:18902 #, c-format msgid "multiple limit options not allowed" msgstr "ლიმიტის პარამეტრების მითითება მხოლოდ ერთხელ შეგიძლიათ" -#: gram.y:18978 +#: gram.y:18929 #, c-format msgid "multiple WITH clauses not allowed" msgstr "\"WITH\"-ის გამოყენება მხოლოდ ერთხელ შეგიძლიათ" -#: gram.y:19171 +#: gram.y:19122 #, c-format msgid "OUT and INOUT arguments aren't allowed in TABLE functions" msgstr "" -#: gram.y:19304 +#: gram.y:19255 #, c-format msgid "multiple COLLATE clauses not allowed" msgstr "\"COLLATE\"-ის გამოყენება მხოლოდ ერთხელ შეგიძლიათ" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:19342 gram.y:19355 +#: gram.y:19293 gram.y:19306 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" msgstr "%s -ის შეზღუდვებიs, როგორც DEFERRABLE, მონიშვნა შეუძლებელია" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:19368 +#: gram.y:19319 #, c-format msgid "%s constraints cannot be marked NOT VALID" msgstr "%s -ის შეზღუდვებიs, როგორც NOT VALID, მონიშვნა შეუძლებელია" #. translator: %s is CHECK, UNIQUE, or similar -#: gram.y:19381 +#: gram.y:19332 #, c-format msgid "%s constraints cannot be marked NO INHERIT" msgstr "%s -ის შეზღუდვებიs, როგორც NO INHERIT, მონიშვნა შეუძლებელია" -#: gram.y:19403 +#: gram.y:19354 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "დაყოფის უცნობი სტრატეგია: %s" -#: gram.y:19427 +#: gram.y:19378 #, c-format msgid "invalid publication object list" msgstr "პუბლიკაციების ობიექტების არასწორი სია" -#: gram.y:19428 +#: gram.y:19379 #, c-format msgid "One of TABLE or TABLES IN SCHEMA must be specified before a standalone table or schema name." msgstr "" -#: gram.y:19444 +#: gram.y:19395 #, c-format msgid "invalid table name" msgstr "არასწორი ცხრილის სახელი" -#: gram.y:19465 +#: gram.y:19416 #, c-format msgid "WHERE clause not allowed for schema" msgstr "WHERE პირობა სქემისთვის დაშვებული არაა" -#: gram.y:19472 +#: gram.y:19423 #, c-format msgid "column specification not allowed for schema" msgstr "სქემისთვის სვეტის მითითება დაშვებული არაა" -#: gram.y:19486 +#: gram.y:19437 #, c-format msgid "invalid schema name" msgstr "არასწორი სქემის სახელი" @@ -14301,7 +14235,7 @@ msgid "too many syntax errors found, abandoning file \"%s\"" msgstr "აღმოჩენილია მეტისმეტად ბევრი შეცდომა. ფაილი \"%s\" მიტოვებულია" -#: jsonpath_gram.y:266 jsonpath_gram.y:598 jsonpath_scan.l:640 jsonpath_scan.l:651 jsonpath_scan.l:661 jsonpath_scan.l:712 utils/adt/encode.c:492 utils/adt/encode.c:557 utils/adt/jsonfuncs.c:658 utils/adt/varlena.c:333 utils/adt/varlena.c:374 +#: jsonpath_gram.y:266 jsonpath_gram.y:598 jsonpath_scan.l:640 jsonpath_scan.l:651 jsonpath_scan.l:661 jsonpath_scan.l:712 utils/adt/encode.c:492 utils/adt/encode.c:557 utils/adt/jsonfuncs.c:659 utils/adt/varlena.c:333 utils/adt/varlena.c:374 #, c-format msgid "invalid input syntax for type %s" msgstr "არასწორი შეყვანის სინტაქსი ტიპისთვის %s" @@ -14338,7 +14272,7 @@ msgid "unexpected end after backslash" msgstr "მოულოდნელი დასასრული '\\' სიმბოლოს შემდეგ" -#: jsonpath_scan.l:201 repl_scanner.l:211 scan.l:742 +#: jsonpath_scan.l:201 repl_scanner.l:211 scan.l:756 msgid "unterminated quoted string" msgstr "ბრჭყალებში ჩასმული ციტატის დაუსრულებელი სტრიქონი" @@ -14350,7 +14284,7 @@ msgid "invalid numeric literal" msgstr "არასწორი რიცხვითი მუდმივა" -#: jsonpath_scan.l:325 jsonpath_scan.l:331 jsonpath_scan.l:337 scan.l:1050 scan.l:1054 scan.l:1058 scan.l:1062 scan.l:1066 scan.l:1070 scan.l:1074 +#: jsonpath_scan.l:325 jsonpath_scan.l:331 jsonpath_scan.l:337 scan.l:1064 scan.l:1068 scan.l:1072 scan.l:1076 msgid "trailing junk after numeric literal" msgstr "რიცხვითი მნიშვნელობის შემდეგ მონაცემები ნაგავია" @@ -14374,7 +14308,7 @@ msgid "invalid hexadecimal digit" msgstr "არასწორი თექვსმეტობითი ციფრი" -#: jsonpath_scan.l:607 utils/adt/jsonfuncs.c:646 +#: jsonpath_scan.l:607 utils/adt/jsonfuncs.c:647 #, c-format msgid "unsupported Unicode escape sequence" msgstr "უნიკოდის სპეცკოდის მხარდაუჭერელი მიმდევრობა" @@ -15264,170 +15198,170 @@ msgid "\"%s\" cannot be higher than \"%s\"" msgstr "\"%s\"-ი \"%s\"-ზე მაღალი ვერ იქნება" -#: libpq/be-secure-openssl.c:296 +#: libpq/be-secure-openssl.c:307 #, c-format msgid "could not set the cipher list (no valid ciphers available)" msgstr "შიფრების სიის დაყენება შეუძლებელია (სწორი შიფრები ხელმისაწვდომი არაა)" -#: libpq/be-secure-openssl.c:316 +#: libpq/be-secure-openssl.c:327 #, c-format msgid "could not load root certificate file \"%s\": %s" msgstr "root სერტიფიკატის ფაილის (\"%s\") წაკითხვის შეცდომა: %s" -#: libpq/be-secure-openssl.c:365 +#: libpq/be-secure-openssl.c:376 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "" -#: libpq/be-secure-openssl.c:373 +#: libpq/be-secure-openssl.c:384 #, c-format msgid "could not load SSL certificate revocation list directory \"%s\": %s" msgstr "" -#: libpq/be-secure-openssl.c:381 +#: libpq/be-secure-openssl.c:392 #, c-format msgid "could not load SSL certificate revocation list file \"%s\" or directory \"%s\": %s" msgstr "" -#: libpq/be-secure-openssl.c:439 +#: libpq/be-secure-openssl.c:450 #, c-format msgid "could not initialize SSL connection: SSL context not set up" msgstr "" -#: libpq/be-secure-openssl.c:453 +#: libpq/be-secure-openssl.c:464 #, c-format msgid "could not initialize SSL connection: %s" msgstr "\"SSL\" შეერთების ინიციალიზაციის შეცდომა: %s" -#: libpq/be-secure-openssl.c:461 +#: libpq/be-secure-openssl.c:472 #, c-format msgid "could not set SSL socket: %s" msgstr "\"SSL\" სოკეტის დაყენების შეცდომა: %s" -#: libpq/be-secure-openssl.c:517 +#: libpq/be-secure-openssl.c:528 #, c-format msgid "could not accept SSL connection: %m" msgstr "'SSL' შეერთების მიღების შეცდომა: %m" -#: libpq/be-secure-openssl.c:521 libpq/be-secure-openssl.c:578 +#: libpq/be-secure-openssl.c:532 libpq/be-secure-openssl.c:589 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "'SSL' შეერთების მიღების შეცდომა: აღმოჩენილია EOF" -#: libpq/be-secure-openssl.c:562 +#: libpq/be-secure-openssl.c:573 #, c-format msgid "could not accept SSL connection: %s" msgstr "'SSL' შეერთების მიღების შეცდომა: %s" -#: libpq/be-secure-openssl.c:566 +#: libpq/be-secure-openssl.c:577 #, c-format msgid "This may indicate that the client does not support any SSL protocol version between %s and %s." msgstr "" -#: libpq/be-secure-openssl.c:583 libpq/be-secure-openssl.c:798 libpq/be-secure-openssl.c:868 +#: libpq/be-secure-openssl.c:594 libpq/be-secure-openssl.c:809 libpq/be-secure-openssl.c:879 #, c-format msgid "unrecognized SSL error code: %d" msgstr "უცნობი SSL-ის შეცდომის კოდი: %d" -#: libpq/be-secure-openssl.c:611 +#: libpq/be-secure-openssl.c:622 #, c-format msgid "received SSL connection request with unexpected ALPN protocol" msgstr "" -#: libpq/be-secure-openssl.c:655 +#: libpq/be-secure-openssl.c:666 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "SSL სერტიფიკატის საერთო სახელი ჩადგმულ ნულოვანს შეიცავს" -#: libpq/be-secure-openssl.c:701 +#: libpq/be-secure-openssl.c:712 #, c-format msgid "SSL certificate's distinguished name contains embedded null" msgstr "SSL სერტიფიკატის გამორჩეული სახელი ჩადგმულ ნულოვანს შეიცავს" -#: libpq/be-secure-openssl.c:787 libpq/be-secure-openssl.c:852 +#: libpq/be-secure-openssl.c:798 libpq/be-secure-openssl.c:863 #, c-format msgid "SSL error: %s" msgstr "SSL-ის შეცდომა: %s" -#: libpq/be-secure-openssl.c:1027 +#: libpq/be-secure-openssl.c:1038 #, c-format msgid "could not open DH parameters file \"%s\": %m" msgstr "dh პარამეტრების ფაილის (\"%s\") გახსნის შეცდომა: %m" -#: libpq/be-secure-openssl.c:1039 +#: libpq/be-secure-openssl.c:1050 #, c-format msgid "could not load DH parameters file: %s" msgstr "dh პარამეტრების ფაილის ჩატვირთვის შეცდომა: %s" -#: libpq/be-secure-openssl.c:1049 +#: libpq/be-secure-openssl.c:1060 #, c-format msgid "invalid DH parameters: %s" msgstr "არასწორი DH-ის პარამეტრები: %s" -#: libpq/be-secure-openssl.c:1058 +#: libpq/be-secure-openssl.c:1069 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "არასწორი DH-ის პარამეტრები: p მარტივი რიცხვი არაა" -#: libpq/be-secure-openssl.c:1067 +#: libpq/be-secure-openssl.c:1078 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "" -#: libpq/be-secure-openssl.c:1203 +#: libpq/be-secure-openssl.c:1214 #, c-format msgid "Client certificate verification failed at depth %d: %s." msgstr "კლიენტის სერტიფიკატის გადამოწმების შეცდომა სიღრმეზე %d: %s." -#: libpq/be-secure-openssl.c:1240 +#: libpq/be-secure-openssl.c:1251 #, c-format msgid "Failed certificate data (unverified): subject \"%s\", serial number %s, issuer \"%s\"." msgstr "შეცდომის მქონე სერტიფიკატის მონაცემების (გადაუმოწმებელი): სათაური \"%s\", სერიული ნომერი %s, გამომცემელი \"%s\"." -#: libpq/be-secure-openssl.c:1241 +#: libpq/be-secure-openssl.c:1252 msgid "unknown" msgstr "უცნობი" -#: libpq/be-secure-openssl.c:1378 +#: libpq/be-secure-openssl.c:1389 #, c-format msgid "DH: could not load DH parameters" msgstr "DH: DH-ის პარამეტრების ჩატვირთვის შეცდომა" -#: libpq/be-secure-openssl.c:1386 +#: libpq/be-secure-openssl.c:1397 #, c-format msgid "DH: could not set DH parameters: %s" msgstr "DH: DH-ის პარამეტრების დაყენების შეცდომა: %s" -#: libpq/be-secure-openssl.c:1413 +#: libpq/be-secure-openssl.c:1424 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH: მრუდის უცნობი სახელი: %s" -#: libpq/be-secure-openssl.c:1422 +#: libpq/be-secure-openssl.c:1433 #, c-format msgid "ECDH: could not create key" msgstr "ECDH: გასაღების შექნის შეცდომა" -#: libpq/be-secure-openssl.c:1450 +#: libpq/be-secure-openssl.c:1461 msgid "no SSL error reported" msgstr "შეცდომა SSL-ში არ დაფიქსირებულა" -#: libpq/be-secure-openssl.c:1467 +#: libpq/be-secure-openssl.c:1479 #, c-format msgid "SSL error code %lu" msgstr "SSL-ის შეცდომის კოდი %lu" -#: libpq/be-secure-openssl.c:1624 +#: libpq/be-secure-openssl.c:1636 #, c-format msgid "could not create BIO" msgstr "\"BIO\"-ს შექმნის შეცდომა" -#: libpq/be-secure-openssl.c:1634 +#: libpq/be-secure-openssl.c:1646 #, c-format msgid "could not get NID for ASN1_OBJECT object" msgstr "'ASN1_OBJECT' ტიპის ობიექტისთვის NID-ის მიღება შეუძლებელია" -#: libpq/be-secure-openssl.c:1642 +#: libpq/be-secure-openssl.c:1654 #, c-format msgid "could not convert NID %d to an ASN1_OBJECT structure" msgstr "'NID %d'-ის ASN1_OBJECT ტიპის სტრუქტურად გარდაქნა შეუძლებელია" @@ -15933,7 +15867,7 @@ msgid "could not receive data from client: %m" msgstr "კლიენტიდან მონაცემების მიღების შეცდომა: %m" -#: libpq/pqcomm.c:1149 tcop/postgres.c:4446 +#: libpq/pqcomm.c:1149 tcop/postgres.c:4533 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "მიერთება შეწყდება, რადგან პროტოკოლის სინქრონიზაცია დაიკარგა" @@ -15993,12 +15927,12 @@ msgid "invalid message format" msgstr "არასწორი შეტყობინების ფორმატი" -#: main/main.c:234 +#: main/main.c:236 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s: WSAStartup-ის შეცდომა: %d\n" -#: main/main.c:322 +#: main/main.c:324 #, c-format msgid "" "%s is the PostgreSQL server.\n" @@ -16007,7 +15941,7 @@ "%s PostgreSQL სერვერია.\n" "\n" -#: main/main.c:323 +#: main/main.c:325 #, c-format msgid "" "Usage:\n" @@ -16019,107 +15953,107 @@ "\n" "\n" -#: main/main.c:324 +#: main/main.c:326 #, c-format msgid "Options:\n" msgstr "პარამეტრები:\n" -#: main/main.c:325 +#: main/main.c:327 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B NBUFFERS გაზიარებული ბაფერების რაოდენობა\n" -#: main/main.c:326 +#: main/main.c:328 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c სახელი=მნიშვნელობა გაშვებული პროცესის პარამეტრის დაყენება\n" -#: main/main.c:327 +#: main/main.c:329 #, c-format msgid " -C NAME print value of run-time parameter, then exit\n" msgstr " -C სახელი გაშვებული პროცესის პარამეტრის გამოტანა და გასვლა\n" -#: main/main.c:328 +#: main/main.c:330 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 გამართვის დონე\n" -#: main/main.c:329 +#: main/main.c:331 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D DATADIR მონაცემთა ბაზის დირექტორია\n" -#: main/main.c:330 +#: main/main.c:332 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e ევროპული თარიღის შეყვანის ფორმატის (DMY) გამოყენება\n" -#: main/main.c:331 +#: main/main.c:333 #, c-format msgid " -F turn fsync off\n" msgstr " -F fsync-ის გამორთვა\n" -#: main/main.c:332 +#: main/main.c:334 #, c-format msgid " -h HOSTNAME host name or IP address to listen on\n" msgstr " -h ჰოსტის სახელი ჰოსტის სახელი ან IP მისამართი, რომელზეც უნდა მოვუსმინო\n" -#: main/main.c:333 +#: main/main.c:335 #, c-format msgid " -i enable TCP/IP connections (deprecated)\n" msgstr " -i TCP/IP-ის ჩართვა (მოძველებული)\n" -#: main/main.c:334 +#: main/main.c:336 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k საქაღალდე Unix-დომენის სოკეტის მდებარეობა\n" -#: main/main.c:336 +#: main/main.c:338 #, c-format msgid " -l enable SSL connections\n" msgstr " -l SSL-ის ჩართვა\n" -#: main/main.c:338 +#: main/main.c:340 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N მაქს-მიერთ მიერთებების დაშვებული მაქსიმალური რაოდენობა\n" -#: main/main.c:339 +#: main/main.c:341 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p პორტი მოსასმენი პორტის ნომერი\n" -#: main/main.c:340 +#: main/main.c:342 #, c-format msgid " -s show statistics after each query\n" msgstr " -s ყოველი მოთხოვნის შემდეგ სტატისტიკსი ჩვენება\n" -#: main/main.c:341 +#: main/main.c:343 #, c-format msgid " -S WORK-MEM set amount of memory for sorts (in kB)\n" msgstr " -S სამუშ-მეხს დალაგებისთვის გამოყოფილი მეხსიერების დაყენება (კილობაიტებში)\n" -#: main/main.c:342 +#: main/main.c:344 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version ვერსიის ინფორმაციის გამოტანა და გასვლა\n" -#: main/main.c:343 +#: main/main.c:345 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --სახელი=მნიშვნელობა გაშვებული პროცესის პარამეტრის დაყენება\n" -#: main/main.c:344 +#: main/main.c:346 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr " --describe-config კონფიგურაციის პარამეტრის ახსნის გამოტანა და გასვლა\n" -#: main/main.c:345 +#: main/main.c:347 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help ამ დახმარების ჩვენება და გასვლა\n" -#: main/main.c:347 +#: main/main.c:349 #, c-format msgid "" "\n" @@ -16128,37 +16062,37 @@ "\n" "პროგრამისტის პარამეტრები:\n" -#: main/main.c:348 +#: main/main.c:350 #, 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:349 +#: main/main.c:351 #, c-format msgid " -O allow system table structure changes\n" msgstr " -O სისტემური ცხრილის სტრუქტურის შეცვლის დაშვება\n" -#: main/main.c:350 +#: main/main.c:352 #, c-format msgid " -P disable system indexes\n" msgstr " -P სისტემური ინდექსების გამორთვა\n" -#: main/main.c:351 +#: main/main.c:353 #, c-format msgid " -t pa|pl|ex show timings after each query\n" msgstr " -t pa|pl|ex ყოველი მოთხოვნის დროის მნიშვნელობების ჩვენება\n" -#: main/main.c:352 +#: main/main.c:354 #, c-format msgid " -T send SIGABRT to all backend processes if one dies\n" msgstr " -T ერთის სიკვდილის შემთხვევაში ყველა უკანაბოლოს პროცესისთვის SIGABRT სიგნალის გაგზავნა\n" -#: main/main.c:353 +#: main/main.c:355 #, c-format msgid " -W NUM wait NUM seconds to allow attach from a debugger\n" msgstr " -W რიცხვი გამმართველისგან მიმაგრებისას მითითებული რაოდენობის წამების დაცდა\n" -#: main/main.c:355 +#: main/main.c:357 #, c-format msgid "" "\n" @@ -16167,37 +16101,37 @@ "\n" "ერთმომხმარებლიანი რეჟიმის პარამეტრები:\n" -#: main/main.c:356 +#: main/main.c:358 #, c-format msgid " --single selects single-user mode (must be first argument)\n" msgstr " --single ერთმომხმარებლიანი რეჟიმი (უნდა იყოს პირველი არგუმენტი)\n" -#: main/main.c:357 +#: main/main.c:359 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " DBNAME ბაზის სახელი (ნაგულისხმევი მნიშვნელობა მომხმარებლის სახელია)\n" -#: main/main.c:358 +#: main/main.c:360 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 პროგრამის გამართვის დონის მითითება\n" -#: main/main.c:359 +#: main/main.c:361 #, c-format msgid " -E echo statement before execution\n" msgstr " -E ოპერატორის გამოტანა მის შესრულებამდე\n" -#: main/main.c:360 +#: main/main.c:362 #, c-format msgid " -j do not use newline as interactive query delimiter\n" msgstr " -j ახალ ხაზზე გადატანა ინტერაქტიური მოთხოვნის გამყოფად გამოყენებული არ იქნება\n" -#: main/main.c:361 main/main.c:367 +#: main/main.c:363 main/main.c:369 #, c-format msgid " -r FILENAME send stdout and stderr to given file\n" msgstr " -r FILENAME stdout-ის და stderr-ის მითითებულ ფაილში გაგზავნა\n" -#: main/main.c:363 +#: main/main.c:365 #, c-format msgid "" "\n" @@ -16206,22 +16140,22 @@ "\n" "სამუშაოდ მომზადების პარამეტრები\n" -#: main/main.c:364 +#: main/main.c:366 #, c-format msgid " --boot selects bootstrapping mode (must be first argument)\n" msgstr " --boot სამუშაოდ მომზადების რეჟიმი (უნდა იყოს პირველი არგუმენტი)\n" -#: main/main.c:365 +#: main/main.c:367 #, c-format msgid " --check selects check mode (must be first argument)\n" msgstr " --check შემოწმების რეჟიმი (უნდა იყოს პირველი არგუმენტი)\n" -#: main/main.c:366 +#: main/main.c:368 #, c-format msgid " DBNAME database name (mandatory argument in bootstrapping mode)\n" msgstr " DBNAME ბაზის სახელი (აუცილებელი არგუმენტი სამუშაოდ მომზადებისას)\n" -#: main/main.c:369 +#: main/main.c:371 #, c-format msgid "" "\n" @@ -16232,12 +16166,12 @@ "Report bugs to <%s>.\n" msgstr "" -#: main/main.c:373 +#: main/main.c:375 #, c-format msgid "%s home page: <%s>\n" msgstr "%s-ის საწყისი გვერდია: <%s>\n" -#: main/main.c:384 +#: main/main.c:386 #, c-format msgid "" "\"root\" execution of the PostgreSQL server is not permitted.\n" @@ -16246,12 +16180,12 @@ "more information on how to properly start the server.\n" msgstr "" -#: main/main.c:401 +#: main/main.c:403 #, c-format msgid "%s: real and effective user IDs must match\n" msgstr "%s: რეალური და მიმდინარე მომხმარებლის ID-ები უნდა ემთხვეოდეს\n" -#: main/main.c:408 +#: main/main.c:410 #, c-format msgid "" "Execution of PostgreSQL by a user with administrative permissions is not\n" @@ -16276,7 +16210,7 @@ msgid "relation \"%s\" does not have a composite type" msgstr "ურთიერთობას \"%s\" კომპოზიტური ტიპი არ გააჩნია" -#: nodes/nodeFuncs.c:118 nodes/nodeFuncs.c:149 parser/parse_coerce.c:2567 parser/parse_coerce.c:2705 parser/parse_coerce.c:2752 parser/parse_expr.c:2112 parser/parse_func.c:710 parser/parse_oper.c:869 utils/fmgr/funcapi.c:669 +#: nodes/nodeFuncs.c:118 nodes/nodeFuncs.c:149 parser/parse_coerce.c:2604 parser/parse_coerce.c:2742 parser/parse_coerce.c:2789 parser/parse_expr.c:2112 parser/parse_func.c:710 parser/parse_oper.c:869 utils/fmgr/funcapi.c:669 #, c-format msgid "could not find array type for data type %s" msgstr "მონაცემების ტიპისთვის %s მასივის ტიპი ვერ ვიპოვე" @@ -16296,7 +16230,7 @@ msgid "FULL JOIN is only supported with merge-joinable or hash-joinable join conditions" msgstr "" -#: optimizer/plan/createplan.c:7162 parser/parse_merge.c:203 rewrite/rewriteHandler.c:1695 +#: optimizer/plan/createplan.c:7175 parser/parse_merge.c:203 rewrite/rewriteHandler.c:1680 #, c-format msgid "cannot execute MERGE on relation \"%s\"" msgstr "ურთიერთობაზე \"%s\" MERGE-ს ვერ გაუშვებთ" @@ -16313,37 +16247,37 @@ msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s აკრძალულია UNION/INTERSECT/EXCEPT-სთან ერთად" -#: optimizer/plan/planner.c:2121 optimizer/plan/planner.c:4107 +#: optimizer/plan/planner.c:2121 optimizer/plan/planner.c:4108 #, c-format msgid "could not implement GROUP BY" msgstr "\"GROUP BY\"-ის განხორციელება შეუძლებელია" -#: optimizer/plan/planner.c:2122 optimizer/plan/planner.c:4108 optimizer/plan/planner.c:4789 optimizer/prep/prepunion.c:1320 +#: optimizer/plan/planner.c:2122 optimizer/plan/planner.c:4109 optimizer/plan/planner.c:4790 optimizer/prep/prepunion.c:1320 #, c-format msgid "Some of the datatypes only support hashing, while others only support sorting." msgstr "ზოგიერთ მონაცემის ტიპს მხოლოდ ჰეშირების მხარდაჭერა გააჩნია, მაშინ, როცა სხვებს მხოლოდ დალაგება შეუძლიათ." -#: optimizer/plan/planner.c:4788 +#: optimizer/plan/planner.c:4789 #, c-format msgid "could not implement DISTINCT" msgstr "\"DISTINCT\"-ის განხორციელება შეუძლებელია" -#: optimizer/plan/planner.c:6133 +#: optimizer/plan/planner.c:6134 #, c-format msgid "could not implement window PARTITION BY" msgstr "ფანჯრის, \"PARTITION BY\" განხორციელება შეუძლებელია" -#: optimizer/plan/planner.c:6134 +#: optimizer/plan/planner.c:6135 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "ფანჯრის დამყოფი სვეტები დალაგებადი მონაცემის ტიპის უნდა იყოს." -#: optimizer/plan/planner.c:6138 +#: optimizer/plan/planner.c:6139 #, c-format msgid "could not implement window ORDER BY" msgstr "ფანჯრის, \"ORDER BY\" განხორციელება შეუძლებელია" -#: optimizer/plan/planner.c:6139 +#: optimizer/plan/planner.c:6140 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "ფანჯრის დამლაგებელი სვეტები დალაგებადი მონაცემის ტიპის უნდა იყოს." @@ -16364,32 +16298,32 @@ msgid "could not implement %s" msgstr "ვერ განხორციელდა %s" -#: optimizer/util/clauses.c:4951 +#: optimizer/util/clauses.c:4963 #, c-format msgid "SQL function \"%s\" during inlining" msgstr "SQL ფუნქცია \"%s\" ხაზში ჩასმისას" -#: optimizer/util/plancat.c:152 +#: optimizer/util/plancat.c:153 #, c-format msgid "cannot access temporary or unlogged relations during recovery" msgstr "აღდგენისას დროებით ან უჟურნალო ურთიერთობებთან წვდომა შეუძლებელია" -#: optimizer/util/plancat.c:756 +#: optimizer/util/plancat.c:768 #, c-format msgid "whole row unique index inference specifications are not supported" msgstr "" -#: optimizer/util/plancat.c:773 +#: optimizer/util/plancat.c:785 #, c-format msgid "constraint in ON CONFLICT clause has no associated index" msgstr "შეზღუდვას ON CONFLICT პირობაში ასოცირებული ინდექსი არ გააჩნია" -#: optimizer/util/plancat.c:823 +#: optimizer/util/plancat.c:835 #, c-format msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" msgstr "ON CONFLICT DO UPDATE გამორიცხვის შეზღუდვებთან ერთად მხარდაჭერილი არაა" -#: optimizer/util/plancat.c:933 +#: optimizer/util/plancat.c:945 #, c-format msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" msgstr "უნიკალური ან გამორიცხვის შეზღუდვა, რომელიც ON CONFLICT-ის აღწერას ემთხვევა, არ არსებობს" @@ -16637,307 +16571,307 @@ msgid "grouping operations are not allowed in JOIN conditions" msgstr "დაჯგუფების ოპერაციებს JOIN-ის პირობებში ვერ გამოიყენებთ" -#: parser/parse_agg.c:387 +#: parser/parse_agg.c:385 msgid "aggregate functions are not allowed in FROM clause of their own query level" msgstr "აგრეგატული ფუნქციები მათი საკუთარი მოთხოვნის დონის FROM პირობაში დაშვებული არაა" -#: parser/parse_agg.c:389 +#: parser/parse_agg.c:387 msgid "grouping operations are not allowed in FROM clause of their own query level" msgstr "დაჯგუფების ფუნქციები მათი საკუთარი მოთხოვნის დონის FROM პირობაში დაშვებული არაა" -#: parser/parse_agg.c:394 +#: parser/parse_agg.c:392 msgid "aggregate functions are not allowed in functions in FROM" msgstr "აგრეგატულ ფუნქციებს FROM-ში ვერ გამოიყენებთ" -#: parser/parse_agg.c:396 +#: parser/parse_agg.c:394 msgid "grouping operations are not allowed in functions in FROM" msgstr "დაჯგუფების ოპერაციებს FROM-ში ვერ გამოიყენებთ" -#: parser/parse_agg.c:404 +#: parser/parse_agg.c:402 msgid "aggregate functions are not allowed in policy expressions" msgstr "წესის გამოსახულებებში აგრეგატული ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:406 +#: parser/parse_agg.c:404 msgid "grouping operations are not allowed in policy expressions" msgstr "წესის გამოსახულებებში დაჯგუფების ოპერაციები დაუშვებელია" -#: parser/parse_agg.c:423 +#: parser/parse_agg.c:421 msgid "aggregate functions are not allowed in window RANGE" msgstr "ფანჯრის RANGE-ში აგრეგატული ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:425 +#: parser/parse_agg.c:423 msgid "grouping operations are not allowed in window RANGE" msgstr "ფანჯრის RANGE-ში დაჯგუფების ოპერაციები დაუშვებელია" -#: parser/parse_agg.c:430 +#: parser/parse_agg.c:428 msgid "aggregate functions are not allowed in window ROWS" msgstr "ფანჯრის ROWS-ში აგრეგატული ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:432 +#: parser/parse_agg.c:430 msgid "grouping operations are not allowed in window ROWS" msgstr "ფანჯრის ROWS_ში დაჯგუფების ოპერაციები დაუშვებელია" -#: parser/parse_agg.c:437 +#: parser/parse_agg.c:435 msgid "aggregate functions are not allowed in window GROUPS" msgstr "აგრეგატული ფუნქციები ფანჯრის GROUPS-ში დაშვებული არაა" -#: parser/parse_agg.c:439 +#: parser/parse_agg.c:437 msgid "grouping operations are not allowed in window GROUPS" msgstr "დაჯგუფების ფუნქციები ფანჯრის GROUPS-ში დაშვებული არაა" -#: parser/parse_agg.c:452 +#: parser/parse_agg.c:450 msgid "aggregate functions are not allowed in MERGE WHEN conditions" msgstr "აგრეგატული ფუნქციები MERGE WHEN-ის პირობებში დაშვებული არაა" -#: parser/parse_agg.c:454 +#: parser/parse_agg.c:452 msgid "grouping operations are not allowed in MERGE WHEN conditions" msgstr "დაჯგუფების ფუნქციები MERGE WHEN-ის პირობებში დაშვებული არაა" -#: parser/parse_agg.c:481 +#: parser/parse_agg.c:479 msgid "aggregate functions are not allowed in check constraints" msgstr "აგრეგატული ფუნქციები შეზღუდვის შემოწმებებში დაშვებული არაა" -#: parser/parse_agg.c:483 +#: parser/parse_agg.c:481 msgid "grouping operations are not allowed in check constraints" msgstr "დაჯგუფების ფუნქციები შეზღუდვის შემოწმებებში დაშვებული არაა" -#: parser/parse_agg.c:490 +#: parser/parse_agg.c:488 msgid "aggregate functions are not allowed in DEFAULT expressions" msgstr "აგრეგატული ფუნქციები DEFAULT გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:492 +#: parser/parse_agg.c:490 msgid "grouping operations are not allowed in DEFAULT expressions" msgstr "დაჯგუფების ფუნქციები DEFAULT გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:497 +#: parser/parse_agg.c:495 msgid "aggregate functions are not allowed in index expressions" msgstr "აგრეგატული ფუნქციები ინდექსის გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:499 +#: parser/parse_agg.c:497 msgid "grouping operations are not allowed in index expressions" msgstr "დაჯგუფების ფუნქციები ინდექსის გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:504 +#: parser/parse_agg.c:502 msgid "aggregate functions are not allowed in index predicates" msgstr "აგრეგატული ფუნქციები ინდექსის პრედიკატებში დაშვებული არაა" -#: parser/parse_agg.c:506 +#: parser/parse_agg.c:504 msgid "grouping operations are not allowed in index predicates" msgstr "დაშვებული ფუნქციები ინდექსის პრედიკატებში დაშვებული არაა" -#: parser/parse_agg.c:511 +#: parser/parse_agg.c:509 msgid "aggregate functions are not allowed in statistics expressions" msgstr "აგრეგატული ფუნქციები სტატისტიკის გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:513 +#: parser/parse_agg.c:511 msgid "grouping operations are not allowed in statistics expressions" msgstr "დაჯგუფების ფუნქციები სტატისტიკის გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:518 +#: parser/parse_agg.c:516 msgid "aggregate functions are not allowed in transform expressions" msgstr "აგრეგატული ფუნქციები გადაყვანის გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:520 +#: parser/parse_agg.c:518 msgid "grouping operations are not allowed in transform expressions" msgstr "დაჯგუფების ფუნქციები გადაყვანის გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:525 +#: parser/parse_agg.c:523 msgid "aggregate functions are not allowed in EXECUTE parameters" msgstr "აგრეგატული ფუნქციები EXECUTE-ის პარამეტრებში დაშვებული არაა" -#: parser/parse_agg.c:527 +#: parser/parse_agg.c:525 msgid "grouping operations are not allowed in EXECUTE parameters" msgstr "დაჯგუფების ფუნქციები EXECUTE-ის პარამეტრებში დაშვებული არაა" -#: parser/parse_agg.c:532 +#: parser/parse_agg.c:530 msgid "aggregate functions are not allowed in trigger WHEN conditions" msgstr "აგრეგატული ფუნქციები WHEN-ის ტრიგერის პირობებში დაშვებული არაა" -#: parser/parse_agg.c:534 +#: parser/parse_agg.c:532 msgid "grouping operations are not allowed in trigger WHEN conditions" msgstr "დაჯგუფების ფუნქციები WHEN-ის ტრიგერის პირობებში დაშვებული არაა" -#: parser/parse_agg.c:539 +#: parser/parse_agg.c:537 msgid "aggregate functions are not allowed in partition bound" msgstr "აგრეგატული ფუნქციები დანაყოფის საზღვარში დაშვებული არაა" -#: parser/parse_agg.c:541 +#: parser/parse_agg.c:539 msgid "grouping operations are not allowed in partition bound" msgstr "დაჯგუფების ფუნქციები დანაყოფის საზღვარში დაშვებული არაა" -#: parser/parse_agg.c:546 +#: parser/parse_agg.c:544 msgid "aggregate functions are not allowed in partition key expressions" msgstr "აგრეგატული ფუნქციები დანაყოფის გასაღების გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:548 +#: parser/parse_agg.c:546 msgid "grouping operations are not allowed in partition key expressions" msgstr "დაჯგუფების ფუნქციები დანაყოფის გასაღების გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:554 +#: parser/parse_agg.c:552 msgid "aggregate functions are not allowed in column generation expressions" msgstr "აგრეგატული ფუნქციები სვეტის გენერაციის გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:556 +#: parser/parse_agg.c:554 msgid "grouping operations are not allowed in column generation expressions" msgstr "დაჯგუფების ფუნქციები სვეტის გენერაციის გამოსახულებებში დაშვებული არაა" -#: parser/parse_agg.c:562 +#: parser/parse_agg.c:560 msgid "aggregate functions are not allowed in CALL arguments" msgstr "აგრეგატული ფუნქციები CALL-ის არგუმენტებში დაშვებული არაა" -#: parser/parse_agg.c:564 +#: parser/parse_agg.c:562 msgid "grouping operations are not allowed in CALL arguments" msgstr "დაჯგუფების ფუნქციები CALL-ის არგუმენტებში დაშვებული არაა" -#: parser/parse_agg.c:570 +#: parser/parse_agg.c:568 msgid "aggregate functions are not allowed in COPY FROM WHERE conditions" msgstr "აგრეგატული ფუნქციები COPY FROM WHERE პირობებში დაშვებული არაა" -#: parser/parse_agg.c:572 +#: parser/parse_agg.c:570 msgid "grouping operations are not allowed in COPY FROM WHERE conditions" msgstr "დაჯგუფების ფუნქციები COPY FROM WHERE პირობებში დაშვებული არაა" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:599 parser/parse_clause.c:1962 +#: parser/parse_agg.c:597 parser/parse_clause.c:1962 #, c-format msgid "aggregate functions are not allowed in %s" msgstr "აგრეგატული ფუნქციები %s-ში დაშვებული არაა" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:602 +#: parser/parse_agg.c:600 #, c-format msgid "grouping operations are not allowed in %s" msgstr "დაჯგუფების ფუნქციები %s-ში დაშვებული არაა" -#: parser/parse_agg.c:703 +#: parser/parse_agg.c:701 #, c-format msgid "outer-level aggregate cannot contain a lower-level variable in its direct arguments" msgstr "" -#: parser/parse_agg.c:781 +#: parser/parse_agg.c:779 #, c-format msgid "aggregate function calls cannot contain set-returning function calls" msgstr "აგრეგატული ფუნქციის გამოძახებები არ შეძლება, სეტების დამბრუნებელი ფუნქციის გამოძახებებს შეიცავდეს" -#: parser/parse_agg.c:782 parser/parse_expr.c:1762 parser/parse_expr.c:2245 parser/parse_func.c:885 +#: parser/parse_agg.c:780 parser/parse_expr.c:1762 parser/parse_expr.c:2245 parser/parse_func.c:885 #, c-format msgid "You might be able to move the set-returning function into a LATERAL FROM item." msgstr "" -#: parser/parse_agg.c:787 +#: parser/parse_agg.c:785 #, c-format msgid "aggregate function calls cannot contain window function calls" msgstr "აგრეგატული ფუნქციის გამოძახებები არ შეიძლება, ფანჯრის ფუნქციის გამოძახებებს შეიცავდეს" -#: parser/parse_agg.c:866 +#: parser/parse_agg.c:864 msgid "window functions are not allowed in JOIN conditions" msgstr "\"JOIN\"-ის პირობებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:873 +#: parser/parse_agg.c:871 msgid "window functions are not allowed in functions in FROM" msgstr "\"FROM\"-ის ფუნქციებში ფანჯრების ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:879 +#: parser/parse_agg.c:877 msgid "window functions are not allowed in policy expressions" msgstr "წესების გამოსახულებებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:892 +#: parser/parse_agg.c:890 msgid "window functions are not allowed in window definitions" msgstr "ფანჯრის აღწერებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:903 +#: parser/parse_agg.c:901 msgid "window functions are not allowed in MERGE WHEN conditions" msgstr "\"MERGE WHEN\" პირობებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:928 +#: parser/parse_agg.c:926 msgid "window functions are not allowed in check constraints" msgstr "შეზღუდვის შემოწმებაში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:932 +#: parser/parse_agg.c:930 msgid "window functions are not allowed in DEFAULT expressions" msgstr "ნაგულისხმევ გამოსახულებებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:935 +#: parser/parse_agg.c:933 msgid "window functions are not allowed in index expressions" msgstr "ინდექსის გამოსახულებებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:938 +#: parser/parse_agg.c:936 msgid "window functions are not allowed in statistics expressions" msgstr "სტატისტიკის გამოსახულებებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:941 +#: parser/parse_agg.c:939 msgid "window functions are not allowed in index predicates" msgstr "ინდექსის პრედიკატებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:944 +#: parser/parse_agg.c:942 msgid "window functions are not allowed in transform expressions" msgstr "გადაყვანის გამოსახულებებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:947 +#: parser/parse_agg.c:945 msgid "window functions are not allowed in EXECUTE parameters" msgstr "\"EXECUTE\"-ის პარამეტრებში ფანჯრის ფუნქციები დაუშვებელია\"" -#: parser/parse_agg.c:950 +#: parser/parse_agg.c:948 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "\"WHEN\"-ის პირობების ტრიგერში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:953 +#: parser/parse_agg.c:951 msgid "window functions are not allowed in partition bound" msgstr "დანაყოფის საზღვარში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:956 +#: parser/parse_agg.c:954 msgid "window functions are not allowed in partition key expressions" msgstr "დანაყოფის გასაღების გამოსახულებებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:959 +#: parser/parse_agg.c:957 msgid "window functions are not allowed in CALL arguments" msgstr "\"CALL\"-ის არგუმენტებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:962 +#: parser/parse_agg.c:960 msgid "window functions are not allowed in COPY FROM WHERE conditions" msgstr "\"COPY FROM WHERE\"-ის პირობებში ფანჯრის ფუნქციები დაუშვებელია" -#: parser/parse_agg.c:965 +#: parser/parse_agg.c:963 msgid "window functions are not allowed in column generation expressions" msgstr "სვეტის გენერაციის გამოსახულებებში ფანჯრის ფუნქციები დაუშვებელია" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:988 parser/parse_clause.c:1971 +#: parser/parse_agg.c:986 parser/parse_clause.c:1971 #, c-format msgid "window functions are not allowed in %s" msgstr "ფანჯრის ფუნქციები არ არის დაშვებული %s-ში" -#: parser/parse_agg.c:1022 parser/parse_clause.c:2804 +#: parser/parse_agg.c:1020 parser/parse_clause.c:2804 #, c-format msgid "window \"%s\" does not exist" msgstr "ფანჯარა \"%s\" არ არსებობს" -#: parser/parse_agg.c:1110 +#: parser/parse_agg.c:1108 #, c-format msgid "too many grouping sets present (maximum 4096)" msgstr "ძალიან ბევრი დაჯგუფების ნაკრებია (მაქსიმუმ 4096)" -#: parser/parse_agg.c:1250 +#: parser/parse_agg.c:1248 #, c-format msgid "aggregate functions are not allowed in a recursive query's recursive term" msgstr "" -#: parser/parse_agg.c:1443 +#: parser/parse_agg.c:1441 #, c-format msgid "column \"%s.%s\" must appear in the GROUP BY clause or be used in an aggregate function" msgstr "" -#: parser/parse_agg.c:1446 +#: parser/parse_agg.c:1444 #, c-format msgid "Direct arguments of an ordered-set aggregate must use only grouped columns." msgstr "" -#: parser/parse_agg.c:1451 +#: parser/parse_agg.c:1449 #, c-format msgid "subquery uses ungrouped column \"%s.%s\" from outer query" msgstr "ქვემოთხოვნა outer მოთხოვნიდან დაუჯგუფებელ სვეტს \"%s.%s\" იყენებს" -#: parser/parse_agg.c:1615 +#: parser/parse_agg.c:1613 #, c-format msgid "arguments to GROUPING must be grouping expressions of the associated query level" msgstr "" @@ -16987,7 +16921,7 @@ msgid "Put the column definition list inside ROWS FROM()." msgstr "სვეტის აღწერის სია ROWS FROM()-ის შიგნით გადაიტანეთ." -#: parser/parse_clause.c:762 +#: parser/parse_clause.c:762 parser/parse_jsontable.c:295 #, c-format msgid "only one FOR ORDINALITY column is allowed" msgstr "დაშვებულია მხოლოდ FOR ORDINALITY სვეტი" @@ -17213,7 +17147,7 @@ msgid "Cast the offset value to the exact intended type." msgstr "წანაცვლების მნიშვნელობის ზუსტად განსაზღვრულ ტიპში დაკასტვა." -#: parser/parse_coerce.c:1050 parser/parse_coerce.c:1088 parser/parse_coerce.c:1106 parser/parse_coerce.c:1121 parser/parse_expr.c:2146 parser/parse_expr.c:2754 parser/parse_expr.c:3403 parser/parse_expr.c:3624 parser/parse_expr.c:4388 parser/parse_target.c:998 +#: parser/parse_coerce.c:1050 parser/parse_coerce.c:1088 parser/parse_coerce.c:1106 parser/parse_coerce.c:1121 parser/parse_expr.c:2146 parser/parse_expr.c:2754 parser/parse_expr.c:3405 parser/parse_expr.c:3634 parser/parse_target.c:998 #, c-format msgid "cannot cast type %s to %s" msgstr "%s ტიპის %s-ში გადაყვანა შეუძლებელია" @@ -17248,113 +17182,113 @@ 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:600 +#: parser/parse_coerce.c:2286 parser/parse_coerce.c:2399 utils/fmgr/funcapi.c:600 #, 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:614 +#: parser/parse_coerce.c:2319 parser/parse_coerce.c:2469 utils/fmgr/funcapi.c:614 #, 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:632 utils/fmgr/funcapi.c:697 +#: parser/parse_coerce.c:2353 parser/parse_coerce.c:2433 parser/parse_coerce.c:2566 utils/fmgr/funcapi.c:632 utils/fmgr/funcapi.c:697 #, 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 "" -#: parser/parse_coerce.c:2474 +#: parser/parse_coerce.c:2511 #, c-format msgid "could not determine polymorphic type because input has type %s" msgstr "" -#: parser/parse_coerce.c:2488 +#: parser/parse_coerce.c:2525 #, c-format msgid "type matched to anynonarray is an array type: %s" msgstr "ტიპი, რომელიც anytoarray-ს ემთხვევა, მასივის ტიპისაა: %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 "ტიპი, რომელიც anytoenum-ს ემთხვევა, ჩამონათვალის ტიპის არაა: %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 "" -#: 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 "" -#: parser/parse_coerce.c:2587 +#: parser/parse_coerce.c:2624 #, c-format msgid "anycompatiblerange type %s does not match anycompatible type %s" msgstr "" -#: parser/parse_coerce.c:2608 +#: parser/parse_coerce.c:2645 #, c-format msgid "anycompatiblemultirange type %s does not match anycompatible type %s" msgstr "" -#: parser/parse_coerce.c:2622 +#: parser/parse_coerce.c:2659 #, c-format msgid "type matched to anycompatiblenonarray is an array type: %s" msgstr "" -#: 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 "" -#: 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 "" -#: 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 "" -#: 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 "" -#: 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 "" @@ -17518,86 +17452,87 @@ msgid "recursive query \"%s\" does not have the form non-recursive-term UNION [ALL] recursive-term" msgstr "" -#: parser/parse_cte.c:920 +#: parser/parse_cte.c:911 #, c-format msgid "ORDER BY in a recursive query is not implemented" msgstr "რეკურსიულ მოთხოვნაში ORDER BY განხორციელებული არაა" -#: parser/parse_cte.c:926 +#: parser/parse_cte.c:917 #, c-format msgid "OFFSET in a recursive query is not implemented" msgstr "რეკურსიულ მოთხოვნაში OFFSET განხორციელებული არაა" -#: parser/parse_cte.c:932 +#: parser/parse_cte.c:923 #, c-format msgid "LIMIT in a recursive query is not implemented" msgstr "რეკურსიულ მოთხოვნაში LIMIT განხორციელებული არაა" -#: parser/parse_cte.c:938 +#: parser/parse_cte.c:929 #, c-format msgid "FOR UPDATE/SHARE in a recursive query is not implemented" msgstr "რეკურსიულ მოთხოვნაში FOR UPDATE/SHARE განხორციელებული არაა" -#: parser/parse_cte.c:995 +#: parser/parse_cte.c:1008 #, c-format msgid "recursive reference to query \"%s\" must not appear more than once" msgstr "" -#: parser/parse_expr.c:314 +#: parser/parse_expr.c:313 #, c-format msgid "DEFAULT is not allowed in this context" msgstr "ამ კონტექსტში ნაგულისხმევს ვერ გამოიყენებთ" -#: parser/parse_expr.c:407 parser/parse_relation.c:3691 parser/parse_relation.c:3701 parser/parse_relation.c:3719 parser/parse_relation.c:3726 parser/parse_relation.c:3740 +#: parser/parse_expr.c:406 parser/parse_relation.c:3691 parser/parse_relation.c:3701 parser/parse_relation.c:3719 parser/parse_relation.c:3726 parser/parse_relation.c:3740 #, c-format msgid "column %s.%s does not exist" msgstr "სვეტი %s.%s არ არსებობს" -#: parser/parse_expr.c:419 +#: parser/parse_expr.c:418 #, c-format msgid "column \"%s\" not found in data type %s" msgstr "სვეტი \"%s\" მონაცემის ტიპში %s აღმოჩენილი არაა" -#: parser/parse_expr.c:425 +#: parser/parse_expr.c:424 #, c-format msgid "could not identify column \"%s\" in record data type" msgstr "ჩანაწერის მონაცემის ტიპში სვეტის \"%s\" იდენტიფიკაცია შეუძლებელია" -#: parser/parse_expr.c:431 +#: parser/parse_expr.c:430 #, c-format msgid "column notation .%s applied to type %s, which is not a composite type" msgstr "" -#: parser/parse_expr.c:462 parser/parse_target.c:732 +#: parser/parse_expr.c:461 parser/parse_target.c:732 #, c-format msgid "row expansion via \"*\" is not supported here" msgstr "" -#: parser/parse_expr.c:585 +#: parser/parse_expr.c:584 msgid "cannot use column reference in DEFAULT expression" msgstr "" -#: parser/parse_expr.c:588 +#: parser/parse_expr.c:587 msgid "cannot use column reference in partition bound expression" msgstr "" -#: parser/parse_expr.c:847 parser/parse_relation.c:833 parser/parse_relation.c:915 parser/parse_target.c:1238 +#: parser/parse_expr.c:846 parser/parse_relation.c:833 parser/parse_relation.c:915 parser/parse_target.c:1238 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "სვეტის მითითება \"%s\" ორაზროვანია" -#: parser/parse_expr.c:903 parser/parse_param.c:110 parser/parse_param.c:142 parser/parse_param.c:204 parser/parse_param.c:303 +#: parser/parse_expr.c:902 parser/parse_param.c:110 parser/parse_param.c:142 parser/parse_param.c:204 parser/parse_param.c:303 #, c-format msgid "there is no parameter $%d" msgstr "პარამეტრი $%d არ არსებობს" -#: parser/parse_expr.c:1103 +#. translator: %s is name of a SQL construct, eg NULLIF +#: parser/parse_expr.c:1103 parser/parse_expr.c:3065 #, c-format -msgid "NULLIF requires = operator to yield boolean" -msgstr "" +msgid "%s requires = operator to yield boolean" +msgstr "%s-სთვის აუცილებელია = ოპერატორი, რომ ლოგიკური მნიშვნელობა დააბრუნოს" #. translator: %s is name of a SQL construct, eg NULLIF -#: parser/parse_expr.c:1109 parser/parse_expr.c:3070 +#: parser/parse_expr.c:1109 parser/parse_expr.c:3072 #, c-format msgid "%s must not return a set" msgstr "%s -მა სეტი არ უნდა დააბრუნოს" @@ -17675,7 +17610,7 @@ msgid "cannot use subquery in column generation expression" msgstr "სვეტების გენერაციის გამოსახულებაში ქვემოთხოვნას ვერ გამოიყენებთ" -#: parser/parse_expr.c:1914 parser/parse_expr.c:3756 +#: parser/parse_expr.c:1914 parser/parse_expr.c:3764 #, c-format msgid "subquery must return only one column" msgstr "ქვემოთხოვნამ მხოლოდ ერთი სვეტი უნდა დააბრუნოს" @@ -17765,121 +17700,177 @@ msgid "There are multiple equally-plausible candidates." msgstr "" -#: parser/parse_expr.c:3064 -#, c-format -msgid "IS DISTINCT FROM requires = operator to yield boolean" -msgstr "IS DISTINCT FROM-ს სჭირდება, რომ ოპერატორი '=' ლოგიკურ მნიშვნელობას აბრუნებდეს" - -#: parser/parse_expr.c:3304 +#: parser/parse_expr.c:3306 #, c-format msgid "JSON ENCODING clause is only allowed for bytea input type" msgstr "" -#: parser/parse_expr.c:3368 +#: parser/parse_expr.c:3370 #, c-format msgid "cannot use non-string types with implicit FORMAT JSON clause" msgstr "" -#: parser/parse_expr.c:3369 +#: parser/parse_expr.c:3371 #, c-format msgid "cannot use non-string types with explicit FORMAT JSON clause" msgstr "" -#: parser/parse_expr.c:3458 +#: parser/parse_expr.c:3460 #, c-format msgid "cannot use JSON format with non-string output types" msgstr "'JSON' ფორმატის არა-სტრიქონის გამოტანის ტიპებთან ერთად გამოყენება შეუძლებელია" -#: parser/parse_expr.c:3471 +#: parser/parse_expr.c:3473 #, c-format msgid "cannot set JSON encoding for non-bytea output types" msgstr "" -#: parser/parse_expr.c:3476 +#: parser/parse_expr.c:3478 #, c-format msgid "unsupported JSON encoding" msgstr "\"JSON\"-ის არასწორი კოდირება" -#: parser/parse_expr.c:3477 +#: parser/parse_expr.c:3479 #, c-format msgid "Only UTF8 JSON encoding is supported." msgstr "მხარდაჭერილია მხოლოდ UTF8 JSON კოდირება." -#: parser/parse_expr.c:3514 +#: parser/parse_expr.c:3516 #, c-format msgid "returning SETOF types is not supported in SQL/JSON functions" msgstr "" -#: parser/parse_expr.c:3519 +#: parser/parse_expr.c:3521 #, c-format msgid "returning pseudo-types is not supported in SQL/JSON functions" msgstr "ფსევდოტიპების დაბრუნება SQL/JSON ფუნქციებში მხარდაჭერილი არაა" -#: parser/parse_expr.c:3841 parser/parse_func.c:866 +#: parser/parse_expr.c:3849 parser/parse_func.c:866 #, c-format msgid "aggregate ORDER BY is not implemented for window functions" msgstr "ფანჯრის ფუნქციებისთვის აგრეგატული ORDER BY განხორციელებული არაა" -#: parser/parse_expr.c:4063 +#: parser/parse_expr.c:4072 #, c-format msgid "cannot use JSON FORMAT ENCODING clause for non-bytea input types" msgstr "" -#: parser/parse_expr.c:4083 +#: parser/parse_expr.c:4092 #, c-format msgid "cannot use type %s in IS JSON predicate" msgstr "%s ტიპის IS JSON პრედიკატში გამოყენება შეუძლებელია" -#: parser/parse_expr.c:4109 parser/parse_expr.c:4229 +#: parser/parse_expr.c:4118 parser/parse_expr.c:4239 #, c-format -msgid "cannot use RETURNING type %s in %s" -msgstr "'RETURNING'-ის ტიპს '%s' %s-ში ვერ გამოიყენებთ" +msgid "cannot use type %s in RETURNING clause of %s" +msgstr "%s ტიპის გამოყენება %s-ის RETURNING პირობაში შეუძლებელია" + +#: parser/parse_expr.c:4120 +#, c-format +msgid "Try returning json or jsonb." +msgstr "" -#: parser/parse_expr.c:4158 +#: parser/parse_expr.c:4168 #, c-format msgid "cannot use non-string types with WITH UNIQUE KEYS clause" msgstr "" -#: parser/parse_expr.c:4232 +#: parser/parse_expr.c:4242 #, c-format msgid "Try returning a string type or bytea." msgstr "" -#: parser/parse_expr.c:4297 +#: parser/parse_expr.c:4307 #, c-format msgid "cannot specify FORMAT JSON in RETURNING clause of %s()" msgstr "" -#: parser/parse_expr.c:4309 +#: parser/parse_expr.c:4320 #, c-format msgid "SQL/JSON QUOTES behavior must not be specified when WITH WRAPPER is used" msgstr "" -#: parser/parse_expr.c:4336 +#. translator: %s is name of a SQL/JSON clause (eg. ON EMPTY) +#: parser/parse_expr.c:4334 parser/parse_expr.c:4363 parser/parse_expr.c:4394 parser/parse_expr.c:4420 parser/parse_expr.c:4446 parser/parse_jsontable.c:94 +#, c-format +msgid "invalid %s behavior" +msgstr "%s-ის არასწორი ქცევა" + +#. translator: first %s is name of a SQL/JSON clause (eg. ON EMPTY), +#. second %s is a SQL/JSON function name (e.g. JSON_QUERY) +#: parser/parse_expr.c:4337 parser/parse_expr.c:4366 +#, c-format +msgid "Only ERROR, NULL, EMPTY ARRAY, EMPTY OBJECT, or DEFAULT expression is allowed in %s for %s." +msgstr "" + +#. translator: first %s is name of a SQL/JSON clause (eg. ON EMPTY) +#. translator: first %s is name a SQL/JSON clause (eg. ON EMPTY) +#. translator: first %s is name of a SQL/JSON clause (eg. ON EMPTY) +#: parser/parse_expr.c:4344 parser/parse_expr.c:4373 parser/parse_expr.c:4402 parser/parse_expr.c:4430 parser/parse_expr.c:4456 +#, c-format +msgid "invalid %s behavior for column \"%s\"" +msgstr "%s-ის არასწორი ქცევა სვეტისთვის \"%s\"" + +#. translator: %s is name of a SQL/JSON clause (eg. ON EMPTY) +#: parser/parse_expr.c:4347 parser/parse_expr.c:4376 +#, c-format +msgid "Only ERROR, NULL, EMPTY ARRAY, EMPTY OBJECT, or DEFAULT expression is allowed in %s for formatted columns." +msgstr "" + +#: parser/parse_expr.c:4395 +#, c-format +msgid "Only ERROR, TRUE, FALSE, or UNKNOWN is allowed in %s for %s." +msgstr "" + +#. translator: %s is name of a SQL/JSON clause (eg. ON EMPTY) +#: parser/parse_expr.c:4405 +#, c-format +msgid "Only ERROR, TRUE, FALSE, or UNKNOWN is allowed in %s for EXISTS columns." +msgstr "" + +#. translator: first %s is name of a SQL/JSON clause (eg. ON EMPTY), +#. second %s is a SQL/JSON function name (e.g. JSON_QUERY) +#: parser/parse_expr.c:4423 parser/parse_expr.c:4449 +#, c-format +msgid "Only ERROR, NULL, or DEFAULT expression is allowed in %s for %s." +msgstr "" + +#. translator: %s is name of a SQL/JSON clause (eg. ON EMPTY) +#: parser/parse_expr.c:4433 parser/parse_expr.c:4459 +#, c-format +msgid "Only ERROR, NULL, or DEFAULT expression is allowed in %s for scalar columns." +msgstr "" + +#: parser/parse_expr.c:4489 #, c-format msgid "JSON path expression must be of type %s, not of type %s" msgstr "JSON ბილიკის გამოსახულების ტიპი %s უნდა იყოს და არა %s" -#: parser/parse_expr.c:4677 +#: parser/parse_expr.c:4707 #, c-format msgid "can only specify a constant, non-aggregate function, or operator expression for DEFAULT" msgstr "" -#: parser/parse_expr.c:4682 +#: parser/parse_expr.c:4712 #, c-format msgid "DEFAULT expression must not contain column references" msgstr "DEFAULT გამოსახულება სვეტზე მიმართვებს არ უნდა შეიცავდეს" -#: parser/parse_expr.c:4687 +#: parser/parse_expr.c:4717 #, c-format msgid "DEFAULT expression must not return a set" msgstr "DEFAULT გამოსახულებამ სეტი არ უნდა დააბრუნოს" -#: parser/parse_expr.c:4721 +#: parser/parse_expr.c:4793 parser/parse_expr.c:4802 #, c-format msgid "cannot cast behavior expression of type %s to %s" msgstr "%s ქცევის გამოსახულების ტიპის %s-ში გადაყვანა შეუძლებელია" +#: parser/parse_expr.c:4796 +#, c-format +msgid "You will need to explicitly cast the expression to type %s." +msgstr "დაგჭირდებათ გამოსახულების აშკარად გადაყვანა ტიპში %s." + #: parser/parse_func.c:194 #, c-format msgid "argument name \"%s\" used more than once" @@ -18214,14 +18205,9 @@ msgid "set-returning functions are not allowed in column generation expressions" msgstr "სეტების დამბრუნებელი ფუნქციების სვეტების გენერაციის გამოსახულებებში გამოყენება აკრძალულია" -#: parser/parse_jsontable.c:94 -#, c-format -msgid "invalid ON ERROR behavior" -msgstr "\"ON UPDATE\"-ის არასწორი ქცევა" - #: parser/parse_jsontable.c:95 #, c-format -msgid "Only EMPTY or ERROR is allowed in the top-level ON ERROR clause." +msgid "Only EMPTY [ ARRAY ] or ERROR is allowed in the top-level ON ERROR clause." msgstr "" #: parser/parse_jsontable.c:189 parser/parse_jsontable.c:203 @@ -18229,11 +18215,6 @@ msgid "duplicate JSON_TABLE column or path name: %s" msgstr "დუბლირებული JSON_TABLE სვეტის ან ბილიკის სახელი: %s" -#: parser/parse_jsontable.c:295 -#, c-format -msgid "cannot use more than one FOR ORDINALITY column" -msgstr "ერთზე მეტ FOR ORDINALITY სვეტს ვერ გამოიყენებთ" - #: parser/parse_merge.c:129 #, c-format msgid "WITH RECURSIVE is not supported for MERGE statement" @@ -18314,7 +18295,7 @@ msgid "inconsistent types deduced for parameter $%d" msgstr "" -#: parser/parse_param.c:309 tcop/postgres.c:740 +#: parser/parse_param.c:309 tcop/postgres.c:744 #, c-format msgid "could not determine data type of parameter $%d" msgstr "პარამეტრისთვის $%d მონაცემის ტიპის განსაზღვრა შეუძლებელია" @@ -18569,337 +18550,322 @@ msgid "invalid type name \"%s\"" msgstr "ტიპის არასწორი სახელი: \"%s\"" -#: parser/parse_utilcmd.c:266 +#: parser/parse_utilcmd.c:263 #, c-format msgid "cannot create partitioned table as inheritance child" msgstr "" -#: parser/parse_utilcmd.c:586 +#: parser/parse_utilcmd.c:475 +#, c-format +msgid "cannot set logged status of a temporary sequence" +msgstr "დროებითი თანმიმდევრობის სტატუსის დადგენა შეუძლებელია" + +#: parser/parse_utilcmd.c:611 #, c-format msgid "array of serial is not implemented" msgstr "სერიალების მასივი განხორციელებული არაა" -#: parser/parse_utilcmd.c:665 parser/parse_utilcmd.c:677 parser/parse_utilcmd.c:736 +#: parser/parse_utilcmd.c:690 parser/parse_utilcmd.c:702 parser/parse_utilcmd.c:761 #, c-format msgid "conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"" msgstr "" -#: parser/parse_utilcmd.c:689 +#: parser/parse_utilcmd.c:714 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "" -#: parser/parse_utilcmd.c:706 +#: parser/parse_utilcmd.c:731 #, c-format msgid "identity columns are not supported on typed tables" msgstr "ტიპიზირებულ ცხრილებზე იდენტიფიკაციის სვეტები მხარდაჭერილი არაა" -#: parser/parse_utilcmd.c:710 +#: parser/parse_utilcmd.c:735 #, c-format msgid "identity columns are not supported on partitions" msgstr "დანაყოფებზე იდენტიფიკაციის სვეტები მხარდაჭერილი არაა" -#: parser/parse_utilcmd.c:719 +#: parser/parse_utilcmd.c:744 #, c-format msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "" -#: parser/parse_utilcmd.c:749 +#: parser/parse_utilcmd.c:774 #, c-format msgid "generated columns are not supported on typed tables" msgstr "ტიპიზირებულ ცხრილებზე გენერირებული სვეტები მხარდაჭერილი არაა" -#: parser/parse_utilcmd.c:753 +#: parser/parse_utilcmd.c:778 #, c-format msgid "multiple generation clauses specified for column \"%s\" of table \"%s\"" msgstr "" -#: parser/parse_utilcmd.c:771 parser/parse_utilcmd.c:886 +#: parser/parse_utilcmd.c:796 parser/parse_utilcmd.c:911 #, c-format msgid "primary key constraints are not supported on foreign tables" msgstr "ძირითადი გასაღების შეზღუდვები გარე ცხრილებზე მხარდაჭერილი არაა" -#: parser/parse_utilcmd.c:780 parser/parse_utilcmd.c:896 +#: parser/parse_utilcmd.c:805 parser/parse_utilcmd.c:921 #, c-format msgid "unique constraints are not supported on foreign tables" msgstr "გარე ცხრილებზე უნიკალური შეზღუდვები მხარდაჭერილი არაა" -#: parser/parse_utilcmd.c:825 +#: parser/parse_utilcmd.c:850 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "" -#: parser/parse_utilcmd.c:833 +#: parser/parse_utilcmd.c:858 #, c-format msgid "both default and generation expression specified for column \"%s\" of table \"%s\"" msgstr "" -#: parser/parse_utilcmd.c:841 +#: parser/parse_utilcmd.c:866 #, c-format msgid "both identity and generation expression specified for column \"%s\" of table \"%s\"" msgstr "" -#: parser/parse_utilcmd.c:906 +#: parser/parse_utilcmd.c:931 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "" -#: parser/parse_utilcmd.c:971 +#: parser/parse_utilcmd.c:996 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "გარე ცხრილების შექმნისთვის LIKE მხარდაჭერილი არაა" -#: parser/parse_utilcmd.c:984 +#: parser/parse_utilcmd.c:1009 #, c-format msgid "relation \"%s\" is invalid in LIKE clause" msgstr "პირობაში LIKE ურთიერთობა \"%s\" არასწორია" -#: parser/parse_utilcmd.c:1711 parser/parse_utilcmd.c:1819 +#: parser/parse_utilcmd.c:1736 parser/parse_utilcmd.c:1844 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "" -#: parser/parse_utilcmd.c:2217 +#: parser/parse_utilcmd.c:2242 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "'CREATE TABLE'-ში არსებულ ინდექსს ვერ გამოიყენებთ" -#: parser/parse_utilcmd.c:2237 +#: parser/parse_utilcmd.c:2262 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "ინდექსი \"%s\" შეზღუდვასთან უკვე ასოცირებულია" -#: parser/parse_utilcmd.c:2258 +#: parser/parse_utilcmd.c:2283 #, c-format msgid "\"%s\" is not a unique index" msgstr "\"%s\" უნიკალური ინდექსი არაა" -#: parser/parse_utilcmd.c:2259 parser/parse_utilcmd.c:2266 parser/parse_utilcmd.c:2273 parser/parse_utilcmd.c:2350 +#: parser/parse_utilcmd.c:2284 parser/parse_utilcmd.c:2291 parser/parse_utilcmd.c:2298 parser/parse_utilcmd.c:2375 #, c-format msgid "Cannot create a primary key or unique constraint using such an index." msgstr "" -#: parser/parse_utilcmd.c:2265 +#: parser/parse_utilcmd.c:2290 #, c-format msgid "index \"%s\" contains expressions" msgstr "ინდექსი \"%s\" გამოსახულებებს შეიცავს" -#: parser/parse_utilcmd.c:2272 +#: parser/parse_utilcmd.c:2297 #, c-format msgid "\"%s\" is a partial index" msgstr "\"%s\" ნაწილობრივი ინდექსია" -#: parser/parse_utilcmd.c:2284 +#: parser/parse_utilcmd.c:2309 #, c-format msgid "\"%s\" is a deferrable index" msgstr "\"%s\" გადადებადი ინდექსია" -#: parser/parse_utilcmd.c:2285 +#: parser/parse_utilcmd.c:2310 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "" -#: parser/parse_utilcmd.c:2349 +#: parser/parse_utilcmd.c:2374 #, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" msgstr "" -#: parser/parse_utilcmd.c:2506 +#: parser/parse_utilcmd.c:2531 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "" -#: parser/parse_utilcmd.c:2512 +#: parser/parse_utilcmd.c:2537 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "" -#: parser/parse_utilcmd.c:2846 +#: parser/parse_utilcmd.c:2871 #, c-format msgid "index expressions and predicates can refer only to the table being indexed" msgstr "" -#: parser/parse_utilcmd.c:2918 +#: parser/parse_utilcmd.c:2943 #, c-format msgid "statistics expressions can refer only to the table being referenced" msgstr "" -#: parser/parse_utilcmd.c:2961 +#: parser/parse_utilcmd.c:2986 #, c-format msgid "rules on materialized views are not supported" msgstr "მატერიალიზებულ ხედებზე წესები მხარდაჭერილი არაა" -#: parser/parse_utilcmd.c:3021 +#: parser/parse_utilcmd.c:3046 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "" -#: parser/parse_utilcmd.c:3093 +#: parser/parse_utilcmd.c:3118 #, c-format msgid "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions" msgstr "" -#: parser/parse_utilcmd.c:3111 parser/parse_utilcmd.c:3212 rewrite/rewriteHandler.c:537 rewrite/rewriteManip.c:1095 +#: parser/parse_utilcmd.c:3136 parser/parse_utilcmd.c:3237 rewrite/rewriteHandler.c:544 rewrite/rewriteManip.c:1096 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "პირობითი UNION/INTERSECT/EXCEPT ოპერატორები განხორციელებული არაა" -#: parser/parse_utilcmd.c:3129 +#: parser/parse_utilcmd.c:3154 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "ON SELECT წესში OLD-ს ვერ გამოიყენებთ" -#: parser/parse_utilcmd.c:3133 +#: parser/parse_utilcmd.c:3158 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "ON SELECT წესში NEW-ს ვერ გამოიყენებთ" -#: parser/parse_utilcmd.c:3142 +#: parser/parse_utilcmd.c:3167 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "ON INSERT წესში OLD-ს ვერ გამოიყენებთ" -#: parser/parse_utilcmd.c:3148 +#: parser/parse_utilcmd.c:3173 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "ON DELETE წესში NEW-ს ვერ გამოიყენებთ" -#: parser/parse_utilcmd.c:3176 +#: parser/parse_utilcmd.c:3201 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "'WITH' მოთხოვნაში OLD-ზე მიმართვა შეუძლებელია" -#: parser/parse_utilcmd.c:3183 +#: parser/parse_utilcmd.c:3208 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "'WITH' მოთხოვნაში NEW-ზე მიმართვა შეუძლებელია" -#: parser/parse_utilcmd.c:3255 -#, c-format -msgid "\"%s\" is not a partition" -msgstr "\"%s\" დანაყოფი არაა" - -#: parser/parse_utilcmd.c:3290 parser/parse_utilcmd.c:3335 parser/parse_utilcmd.c:4101 -#, c-format -msgid "\"%s\" is not a partitioned table" -msgstr "\"%s\" დაყოფილი ცხრილი არაა" - -#: parser/parse_utilcmd.c:3343 -#, c-format -msgid "partition of hash-partitioned table cannot be merged" -msgstr "ჰეშით დაყოფილი ცხრილის დანაყოფების შერწყმა შეუძლებელია" - -#: parser/parse_utilcmd.c:3361 -#, c-format -msgid "partition with name \"%s\" is already used" -msgstr "დანაყოფი სახელით \"%s\" უკვე გამოყენებულია" - -#: parser/parse_utilcmd.c:3673 -#, c-format -msgid "list of new partitions should contain at least two items" -msgstr "" - -#: parser/parse_utilcmd.c:3811 +#: parser/parse_utilcmd.c:3664 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "არასწორ ადგილას დასმული DEFERRABLE პირობა" -#: parser/parse_utilcmd.c:3816 parser/parse_utilcmd.c:3831 +#: parser/parse_utilcmd.c:3669 parser/parse_utilcmd.c:3684 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "ერთზე მეტი DEFERRABLE/NOT DEFERRABLE პირობა დაშვებული არაა" -#: parser/parse_utilcmd.c:3826 +#: parser/parse_utilcmd.c:3679 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "არასწორ ადგილას დასმული NOT DEFERRABLE პირობა" -#: parser/parse_utilcmd.c:3847 +#: parser/parse_utilcmd.c:3700 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "არასწორ ადგილას დასმული INITIALLY DEFERRABLE პირობა" -#: parser/parse_utilcmd.c:3852 parser/parse_utilcmd.c:3878 +#: parser/parse_utilcmd.c:3705 parser/parse_utilcmd.c:3731 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "ერთზე მეტი INITIALLY IMMEDIATE/DEFERRED დაშვებული არაა" -#: parser/parse_utilcmd.c:3873 +#: parser/parse_utilcmd.c:3726 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "არასწორ ადგილას დასმული INITIALLY IMMEDIATE პირობა" -#: parser/parse_utilcmd.c:4066 +#: parser/parse_utilcmd.c:3919 #, c-format msgid "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "" -#: parser/parse_utilcmd.c:4108 +#: parser/parse_utilcmd.c:3954 +#, c-format +msgid "\"%s\" is not a partitioned table" +msgstr "\"%s\" დაყოფილი ცხრილი არაა" + +#: parser/parse_utilcmd.c:3961 #, c-format msgid "table \"%s\" is not partitioned" msgstr "ცხრილი \"%s\" დაყოფილი არაა" -#: parser/parse_utilcmd.c:4115 +#: parser/parse_utilcmd.c:3968 #, c-format msgid "index \"%s\" is not partitioned" msgstr "ინდექსი \"%s\" დაყოფილი არაა" -#: parser/parse_utilcmd.c:4155 +#: parser/parse_utilcmd.c:4008 #, c-format msgid "a hash-partitioned table may not have a default partition" msgstr "" -#: parser/parse_utilcmd.c:4172 +#: parser/parse_utilcmd.c:4025 #, c-format msgid "invalid bound specification for a hash partition" msgstr "" -#: parser/parse_utilcmd.c:4178 partitioning/partbounds.c:4803 +#: parser/parse_utilcmd.c:4031 partitioning/partbounds.c:4802 #, c-format msgid "modulus for hash partition must be an integer value greater than zero" msgstr "" -#: parser/parse_utilcmd.c:4185 partitioning/partbounds.c:4811 +#: parser/parse_utilcmd.c:4038 partitioning/partbounds.c:4810 #, c-format msgid "remainder for hash partition must be less than modulus" msgstr "" -#: parser/parse_utilcmd.c:4198 +#: parser/parse_utilcmd.c:4051 #, c-format msgid "invalid bound specification for a list partition" msgstr "" -#: parser/parse_utilcmd.c:4251 +#: parser/parse_utilcmd.c:4104 #, c-format msgid "invalid bound specification for a range partition" msgstr "" -#: parser/parse_utilcmd.c:4257 +#: parser/parse_utilcmd.c:4110 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "" -#: parser/parse_utilcmd.c:4261 +#: parser/parse_utilcmd.c:4114 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "" -#: parser/parse_utilcmd.c:4375 +#: parser/parse_utilcmd.c:4228 #, c-format msgid "cannot specify NULL in range bound" msgstr "დიაპაზონის საზღვრებში NULL-ის მითითება შეუძლებელია" -#: parser/parse_utilcmd.c:4424 +#: parser/parse_utilcmd.c:4277 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "ყოველი MAXVALUE საზღვის შემდეგ ყველა MAXVALUE უნდა იყოს" -#: parser/parse_utilcmd.c:4431 +#: parser/parse_utilcmd.c:4284 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "ყოველი MINVALUE საზღვის შემდეგ ყველა MINVALUE უნდა იყოს" -#: parser/parse_utilcmd.c:4474 +#: parser/parse_utilcmd.c:4327 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "" @@ -18912,12 +18878,12 @@ msgid "invalid Unicode escape character" msgstr "უნიკოდის სპეცკოდის არასწორი სიმბოლო" -#: parser/parser.c:347 scan.l:1391 +#: parser/parser.c:347 scan.l:1393 #, c-format msgid "invalid Unicode escape value" msgstr "უნიკოდის სპეცკოდის არასწორი მნიშვნელობა" -#: parser/parser.c:494 scan.l:702 utils/adt/varlena.c:6640 +#: parser/parser.c:494 scan.l:716 utils/adt/varlena.c:6640 #, c-format msgid "invalid Unicode escape" msgstr "უნიკოდის არასწორი სპეცკოდი" @@ -18927,7 +18893,7 @@ msgid "Unicode escapes must be \\XXXX or \\+XXXXXX." msgstr "უნიკოდის სპეცკოდების შესაძლო ვარიანტებია \\XXXX და \\+XXXXXXXX." -#: parser/parser.c:523 scan.l:663 scan.l:679 scan.l:695 utils/adt/varlena.c:6665 +#: parser/parser.c:523 scan.l:677 scan.l:693 scan.l:709 utils/adt/varlena.c:6665 #, c-format msgid "invalid Unicode surrogate pair" msgstr "უნკოდის არასწორი სუროგატული წყვილი" @@ -18957,127 +18923,52 @@ msgid "The new modulus %d is not divisible by %d, the modulus of existing partition \"%s\"." msgstr "" -#: partitioning/partbounds.c:3127 partitioning/partbounds.c:5202 +#: partitioning/partbounds.c:3127 #, c-format msgid "empty range bound specified for partition \"%s\"" msgstr "" -#: partitioning/partbounds.c:3129 partitioning/partbounds.c:5204 +#: partitioning/partbounds.c:3129 #, c-format msgid "Specified lower bound %s is greater than or equal to upper bound %s." msgstr "" -#: partitioning/partbounds.c:3238 +#: partitioning/partbounds.c:3237 #, c-format msgid "partition \"%s\" would overlap partition \"%s\"" msgstr "დანაყოფი \"%s\" გადაფარავდა დანაყოფს \"%s\"" -#: partitioning/partbounds.c:3355 +#: partitioning/partbounds.c:3354 #, c-format msgid "skipped scanning foreign table \"%s\" which is a partition of default partition \"%s\"" msgstr "" -#: partitioning/partbounds.c:4807 +#: partitioning/partbounds.c:4806 #, c-format msgid "remainder for hash partition must be an integer value greater than or equal to zero" msgstr "" -#: partitioning/partbounds.c:4831 +#: partitioning/partbounds.c:4830 #, c-format msgid "\"%s\" is not a hash partitioned table" msgstr "\"%s\" ჰეშით დაყოფილი ცხრილია" -#: partitioning/partbounds.c:4842 partitioning/partbounds.c:4959 +#: partitioning/partbounds.c:4841 partitioning/partbounds.c:4958 #, c-format msgid "number of partitioning columns (%d) does not match number of partition keys provided (%d)" msgstr "დამყოფი სვეტების რაოდენობა (%d) მოწოდებული დაყოფის გასაღებების რაოდენობას (%d) არ ემთხვევა" -#: partitioning/partbounds.c:4864 +#: partitioning/partbounds.c:4863 #, c-format msgid "column %d of the partition key has type %s, but supplied value is of type %s" msgstr "" -#: partitioning/partbounds.c:4896 +#: partitioning/partbounds.c:4895 #, c-format msgid "column %d of the partition key has type \"%s\", but supplied value is of type \"%s\"" msgstr "" -#: partitioning/partbounds.c:5038 -#, c-format -msgid "lower bound of partition \"%s\" conflicts with upper bound of previous partition \"%s\"" -msgstr "დანაყოფის \"%s\" ქვედა ზღვარი კონფლიქტშია ზედა ზღვართან წინა დანაყოფისთვის \"%s\"" - -#: partitioning/partbounds.c:5092 -#, c-format -msgid "new partition \"%s\" would overlap with another new partition \"%s\"" -msgstr "ახალი დანაყოფი \"%s\" გადაფარავდა სხვა ახალ დანაყოფს \"%s\"" - -#: partitioning/partbounds.c:5239 -#, c-format -msgid "lower bound of partition \"%s\" is not equal to lower bound of split partition" -msgstr "ქვედა ზღვარი დანაყოფისთვის \"%s\" არ უდრის დაყოფილი დანაყოფის ქვედა საზღვარს" - -#: partitioning/partbounds.c:5251 -#, c-format -msgid "lower bound of partition \"%s\" is less than lower bound of split partition" -msgstr "ქვედა ზღვარი დანაყოფისთვის \"%s\" დაყოფილი დანაყოფის ქვედა საზღვარზე ნაკლებია" - -#: partitioning/partbounds.c:5280 -#, c-format -msgid "upper bound of partition \"%s\" is not equal to upper bound of split partition" -msgstr "ზედა ზღვარი დანაყოფისთვის \"%s\" არ უდრის დაყოფილი დანაყოფის ზედა საზღვარს" - -#: partitioning/partbounds.c:5292 -#, c-format -msgid "upper bound of partition \"%s\" is greater than upper bound of split partition" -msgstr "ზედა ზღვარი დანაყოფისთვის \"%s\" დაყოფილი დანაყოფის ზედა საზღვარზე მეტია" - -#: partitioning/partbounds.c:5364 -#, c-format -msgid "new partition \"%s\" cannot have this value because split partition does not have" -msgstr "" - -#: partitioning/partbounds.c:5380 -#, c-format -msgid "new partition \"%s\" cannot have NULL value because split partition does not have" -msgstr "" - -#: partitioning/partbounds.c:5390 -#, c-format -msgid "new partition \"%s\" would overlap with another (not split) partition \"%s\"" -msgstr "ახალი დანაყოფი \"%s\" გადაფარავდა სხვა (არა დაყოფილ) დანაყოფს \"%s\"" - -#: partitioning/partbounds.c:5530 -#, c-format -msgid "new partitions do not have value %s but split partition does" -msgstr "ახალ დანაყოფს არ აქვს მნიშვნელობა %s, მაგრამ გაყოფილ დანაყოფს აქვს" - -#: partitioning/partbounds.c:5607 -#, c-format -msgid "DEFAULT partition should be one" -msgstr "" - -#: partitioning/partbounds.c:5623 -#, c-format -msgid "partition of hash-partitioned table cannot be split" -msgstr "ჰეშით დაყოფილი ცხრილის დანაყოფების დაყოფა შეუძლებელია" - -#: partitioning/partbounds.c:5677 -#, c-format -msgid "one partition in the list should be DEFAULT because split partition is DEFAULT" -msgstr "" - -#: partitioning/partbounds.c:5687 -#, c-format -msgid "new partition cannot be DEFAULT because DEFAULT partition already exists" -msgstr "" - -#: partitioning/partbounds.c:5746 -#, c-format -msgid "name \"%s\" is already used" -msgstr "სახელი \"%s\" უკვე გამოყენებულია" - -#: port/pg_sema.c:209 port/pg_shmem.c:717 port/posix_sema.c:209 port/sysv_sema.c:323 port/sysv_shmem.c:717 +#: port/pg_sema.c:209 port/pg_shmem.c:717 port/posix_sema.c:209 port/sysv_sema.c:329 port/sysv_shmem.c:717 #, c-format msgid "could not stat data directory \"%s\": %m" msgstr "მონაცემების საქაღალდის (%s) პოვნა შეუძლებელია: %m" @@ -19138,34 +19029,34 @@ msgid "huge pages not supported with the current \"shared_memory_type\" setting" msgstr "\"shared_memory_type\" პარამეტრთან ერთად უზარმაზარი გვერდები მხარდაჭერილი არაა" -#: port/pg_shmem.c:798 port/sysv_shmem.c:798 utils/init/miscinit.c:1347 +#: port/pg_shmem.c:798 port/sysv_shmem.c:798 utils/init/miscinit.c:1401 #, c-format msgid "pre-existing shared memory block (key %lu, ID %lu) is still in use" msgstr "უკვე არსებული გაზიარებული მეხსიერების ბლოკი (გასაღები %lu, ID %lu) ჯერ კიდევ გამოიყენება" -#: port/pg_shmem.c:801 port/sysv_shmem.c:801 utils/init/miscinit.c:1349 +#: port/pg_shmem.c:801 port/sysv_shmem.c:801 utils/init/miscinit.c:1403 #, c-format msgid "Terminate any old server processes associated with data directory \"%s\"." msgstr "" -#: port/sysv_sema.c:120 +#: port/sysv_sema.c:126 #, c-format msgid "could not create semaphores: %m" msgstr "სემაფორების შექმნის შეცდომა: %m" -#: port/sysv_sema.c:121 +#: port/sysv_sema.c:127 #, c-format msgid "Failed system call was semget(%lu, %d, 0%o)." msgstr "ავარიული სისტემური ფუნქცია იყო semget(%lu, %d, 0%o)." -#: port/sysv_sema.c:125 +#: port/sysv_sema.c:131 #, c-format msgid "" "This error does *not* mean that you have run out of disk space. It occurs when either the system limit for the maximum number of semaphore sets (SEMMNI), or the system wide maximum number of semaphores (SEMMNS), would be exceeded. You need to raise the respective kernel parameter. Alternatively, reduce PostgreSQL's consumption of semaphores by reducing its \"max_connections\" parameter.\n" "The PostgreSQL documentation contains more information about configuring your system for PostgreSQL." msgstr "" -#: port/sysv_sema.c:155 +#: port/sysv_sema.c:161 #, c-format msgid "You possibly need to raise your kernel's SEMVMX value to be at least %d. Look into the PostgreSQL documentation for details." msgstr "" @@ -19292,32 +19183,32 @@ msgid "autovacuum worker took too long to start; canceled" msgstr "ავტომომტვერსასრუტების დამხმარე პროცესის გაშვებას მეტისმეტად დიდი დრო მოუნდა. ის გაუქმდა" -#: postmaster/autovacuum.c:2199 +#: postmaster/autovacuum.c:2203 #, c-format msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "ავტომომტვერსასრუტება: წაიშლება მიტოვებული დროებითი ცხრილი \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2435 +#: postmaster/autovacuum.c:2439 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "ცხრილის ავტოდამტვერსასრუტება: \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2438 +#: postmaster/autovacuum.c:2442 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "ცხრილის ავტოანალიზი: \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2632 +#: postmaster/autovacuum.c:2636 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "" -#: postmaster/autovacuum.c:3250 +#: postmaster/autovacuum.c:3254 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "ავტომომტვერსასრუტება არ გაშვებულა კონფიგურაციის შეცდომის გამო" -#: postmaster/autovacuum.c:3251 +#: postmaster/autovacuum.c:3255 #, c-format msgid "Enable the \"track_counts\" option." msgstr "ჩართეთ \"track_counts\" პარამეტრი." @@ -19347,7 +19238,7 @@ msgid "background worker \"%s\": parallel workers may not be configured for restart" msgstr "" -#: postmaster/bgworker.c:715 tcop/postgres.c:3285 +#: postmaster/bgworker.c:715 tcop/postgres.c:3312 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "" @@ -19374,10 +19265,10 @@ msgstr[0] "" msgstr[1] "" -#: postmaster/bgworker.c:931 +#: postmaster/bgworker.c:931 postmaster/checkpointer.c:445 #, c-format -msgid "Consider increasing the configuration parameter \"max_worker_processes\"." -msgstr "გაითვალისწინეთ, რომ შეიძლება კონფიგურაციის პარამეტრის \"max_worker_processes\" გაზრდა გჭირდებათ." +msgid "Consider increasing the configuration parameter \"%s\"." +msgstr "გაითვალისწინეთ, რომ შეიძლება კონფიგურაციის პარამეტრის \"%s\" გაზრდა გჭირდებათ." #: postmaster/checkpointer.c:441 #, c-format @@ -19386,11 +19277,6 @@ msgstr[0] "საკონტროლო წერტილები მეტისმეტად ხშირად ხდება (%d წამიანი შუალედით)" msgstr[1] "საკონტროლო წერტილები მეტისმეტად ხშირად ხდება (%d წამიანი შუალედით)" -#: postmaster/checkpointer.c:445 -#, c-format -msgid "Consider increasing the configuration parameter \"%s\"." -msgstr "გაითვალისწინეთ, რომ შეიძლება კონფიგურაციის პარამეტრის \"%s\" გაზრდა გჭირდებათ." - #: postmaster/checkpointer.c:1067 #, c-format msgid "checkpoint request failed" @@ -19401,92 +19287,92 @@ msgid "Consult recent messages in the server log for details." msgstr "დეტალებისთვის იხილეთ სერვერის ჟურნალის უახლესი შეტყობინებები." -#: postmaster/launch_backend.c:369 +#: postmaster/launch_backend.c:381 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "სერვერის პროცესის (\"%s\") შესრულების შეცდომა: %m" -#: postmaster/launch_backend.c:422 +#: postmaster/launch_backend.c:434 #, c-format msgid "could not create backend parameter file mapping: error code %lu" msgstr "უკანაბოლოს პარამეტრის ფაილის მიბმის შექმნის შეცდომა. შეცდომის კოდი: %lu" -#: postmaster/launch_backend.c:430 +#: postmaster/launch_backend.c:442 #, c-format msgid "could not map backend parameter memory: error code %lu" msgstr "უკანაბოლოს პარამეტრის მეხსიერების მიმაგრების პრობლემა: შეცდომის კოდი %lu" -#: postmaster/launch_backend.c:447 +#: postmaster/launch_backend.c:459 #, c-format msgid "subprocess command line too long" msgstr "ქვეპროექტების ბრძანების სტრიქონი ძალიან გრძელია" -#: postmaster/launch_backend.c:465 +#: postmaster/launch_backend.c:477 #, c-format msgid "CreateProcess() call failed: %m (error code %lu)" msgstr "გამოძახების შეცდომა: CreateProcess(): %m (შეცდომის კოდი %lu)" -#: postmaster/launch_backend.c:492 +#: postmaster/launch_backend.c:504 #, c-format msgid "could not unmap view of backend parameter file: error code %lu" msgstr "უკანაბოლოს პარამეტრის ფაილის ხედის მოხსნის შეცდომა. შეცდომის კოდი: %lu" -#: postmaster/launch_backend.c:496 +#: postmaster/launch_backend.c:508 #, c-format msgid "could not close handle to backend parameter file: error code %lu" msgstr "უკანაბოლოს პარამეტრის ფაილის დამმუშავებლის დახურვა შეუძლებელია. შეცდომის კოდი: %lu" -#: postmaster/launch_backend.c:518 +#: postmaster/launch_backend.c:530 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "გაზიარებული მეხსიერების გამოყოფის მეტისმეტად ბევრი ცდის შემდეგ შევეშვი ცდას" -#: postmaster/launch_backend.c:519 +#: postmaster/launch_backend.c:531 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "ეს შეიძლება გამოწვეული იყოს ASLR ან ანტივირუსული პროგრამული უზრუნველყოფის მიერ." -#: postmaster/launch_backend.c:817 +#: postmaster/launch_backend.c:834 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "" -#: postmaster/launch_backend.c:849 +#: postmaster/launch_backend.c:866 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "მემკვიდრეობით მიღებული სოკეტის შექმნა შეუძლებელია: შეცდომის კოდი %d\n" -#: postmaster/launch_backend.c:878 +#: postmaster/launch_backend.c:895 #, c-format msgid "could not open backend variables file \"%s\": %m\n" msgstr "უკანაბოლოს ცვლადების ფაილის \"%s\" გახსნა შეუძლებელია: %m\n" -#: postmaster/launch_backend.c:884 +#: postmaster/launch_backend.c:901 #, c-format msgid "could not read from backend variables file \"%s\": %m\n" msgstr "უკანაბოლოს ცვლადების ფაილიდან \"%s\" წაკითხვა შეუძლებელია: %m\n" -#: postmaster/launch_backend.c:895 +#: postmaster/launch_backend.c:912 #, c-format msgid "could not read startup data from backend variables file \"%s\": %m\n" msgstr "უკანაბოლოს ცვლადების ფაილიდან \"%s\" გაშვების მონაცემების წაკითხვა შეუძლებელია: %m\n" -#: postmaster/launch_backend.c:907 +#: postmaster/launch_backend.c:924 #, c-format msgid "could not remove file \"%s\": %m\n" msgstr "ფაილის წაშლის შეცდომა \"%s\": %m\n" -#: postmaster/launch_backend.c:923 +#: postmaster/launch_backend.c:940 #, c-format msgid "could not map view of backend variables: error code %lu\n" msgstr "უკანაბოლოს ცვლადების ხედის მიბმა შეუძლებელია: შეცდომის კოდი %lu\n" -#: postmaster/launch_backend.c:942 +#: postmaster/launch_backend.c:959 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "უკანაბოლოს ცვლადების ხედის მოხსნა შეუძლებელია: შეცდომის კოდი %lu\n" -#: postmaster/launch_backend.c:949 +#: postmaster/launch_backend.c:966 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "უკანაბოლოს პარამეტრის ცვლადების დამმუშავებლის დახურვა შეუძლებელია. შეცდომის კოდი: %lu\n" @@ -19642,32 +19528,32 @@ msgid "could not load %s" msgstr "%s-ის ჩატვირთვა შეუძლებელია" -#: postmaster/postmaster.c:1340 +#: postmaster/postmaster.c:1342 #, c-format msgid "postmaster became multithreaded during startup" msgstr "პროცესი postmaster გაშვებისას მრავალნაკადიანი გახდა" -#: postmaster/postmaster.c:1341 +#: postmaster/postmaster.c:1343 postmaster/postmaster.c:3684 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "დააყენეთ LC_ALL გარემოს ცვლადი სწორ ლოკალზე." -#: postmaster/postmaster.c:1440 +#: postmaster/postmaster.c:1442 #, c-format msgid "%s: could not locate my own executable path" msgstr "%s: ჩემი საკუთარი გამშვები ფაილის ბილიკის მოძებნა შეუძლებელია" -#: postmaster/postmaster.c:1447 +#: postmaster/postmaster.c:1449 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: გამშვები ფაილი postgres ვერ ვიპოვე" -#: postmaster/postmaster.c:1470 utils/misc/tzparser.c:341 +#: postmaster/postmaster.c:1472 utils/misc/tzparser.c:341 #, c-format msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." msgstr "" -#: postmaster/postmaster.c:1497 +#: postmaster/postmaster.c:1499 #, c-format msgid "" "%s: could not find the database system\n" @@ -19676,239 +19562,239 @@ msgstr "" #. translator: %s is SIGKILL or SIGABRT -#: postmaster/postmaster.c:1787 +#: postmaster/postmaster.c:1789 #, c-format msgid "issuing %s to recalcitrant children" msgstr "" -#: postmaster/postmaster.c:1809 +#: postmaster/postmaster.c:1811 #, c-format msgid "performing immediate shutdown because data directory lock file is invalid" msgstr "" -#: postmaster/postmaster.c:1872 +#: postmaster/postmaster.c:1874 #, c-format msgid "wrong key in cancel request for process %d" msgstr "არასწორი გასაღები გაუქმების მოთხოვნაში პროცესისთვის %d" -#: postmaster/postmaster.c:1884 +#: postmaster/postmaster.c:1886 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "PID %d, მოთხოვნილი გაუქმების მოთხოვნაში, არც ერთ პროცესს არ ემთხვევა" -#: postmaster/postmaster.c:2105 +#: postmaster/postmaster.c:2106 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "მიღებულია SIGHUP, მიმდინარეობს კონფიგურაციის ფაილების თავიდან ჩატვირთვა" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2133 postmaster/postmaster.c:2137 +#: postmaster/postmaster.c:2134 postmaster/postmaster.c:2138 #, c-format msgid "%s was not reloaded" msgstr "%s არ გადატვირთულა" -#: postmaster/postmaster.c:2147 +#: postmaster/postmaster.c:2148 #, c-format msgid "SSL configuration was not reloaded" msgstr "SSL კონფიგურაცია არ იყო გადატვირთული" -#: postmaster/postmaster.c:2233 +#: postmaster/postmaster.c:2234 #, c-format msgid "received smart shutdown request" msgstr "მიღებულია ჭკვიანი გამორთვის მოთხოვნა" -#: postmaster/postmaster.c:2274 +#: postmaster/postmaster.c:2275 #, c-format msgid "received fast shutdown request" msgstr "მიღებულია სწრაფი გამორთვის მოთხოვნა" -#: postmaster/postmaster.c:2292 +#: postmaster/postmaster.c:2293 #, c-format msgid "aborting any active transactions" msgstr "ყველა აქტიური ტრანზაქციის შეწყვეტა" -#: postmaster/postmaster.c:2316 +#: postmaster/postmaster.c:2317 #, c-format msgid "received immediate shutdown request" msgstr "მიღებულია დაუყოვნებლივი გამორთვის მოთხოვნა" -#: postmaster/postmaster.c:2388 +#: postmaster/postmaster.c:2389 #, c-format msgid "shutdown at recovery target" msgstr "გამორთვა აღდგენის სამიზნეზე" -#: postmaster/postmaster.c:2406 postmaster/postmaster.c:2442 +#: postmaster/postmaster.c:2407 postmaster/postmaster.c:2443 msgid "startup process" msgstr "გაშვების პროცესი" -#: postmaster/postmaster.c:2409 +#: postmaster/postmaster.c:2410 #, c-format msgid "aborting startup due to startup process failure" msgstr "გაშვების გაუქმება გაშვების პროცესის შეცდომის გამო" -#: postmaster/postmaster.c:2484 +#: postmaster/postmaster.c:2485 #, c-format msgid "database system is ready to accept connections" msgstr "მონაცემთა ბაზის სისტემა მზადაა შეერთებების მისაღებად" -#: postmaster/postmaster.c:2505 +#: postmaster/postmaster.c:2506 msgid "background writer process" msgstr "ფონური ჩამწერი პროცესი" -#: postmaster/postmaster.c:2552 +#: postmaster/postmaster.c:2553 msgid "checkpointer process" msgstr "საკონტროლო წერტილის პროცესი" -#: postmaster/postmaster.c:2568 +#: postmaster/postmaster.c:2569 msgid "WAL writer process" msgstr "WAL-ის ჩამწერი პროცესი" -#: postmaster/postmaster.c:2583 +#: postmaster/postmaster.c:2584 msgid "WAL receiver process" msgstr "WAL-ის მიმღები პროცესი" -#: postmaster/postmaster.c:2597 +#: postmaster/postmaster.c:2598 msgid "WAL summarizer process" msgstr "WAL-ის შეჯამების პროცესი" -#: postmaster/postmaster.c:2612 +#: postmaster/postmaster.c:2613 msgid "autovacuum launcher process" msgstr "ავტომომტვერსასრუტების გამშვები პროცესი" -#: postmaster/postmaster.c:2630 +#: postmaster/postmaster.c:2631 msgid "archiver process" msgstr "არქივის პროცესი" -#: postmaster/postmaster.c:2643 +#: postmaster/postmaster.c:2644 msgid "system logger process" msgstr "სისტემური ჟურნალის პროცესი" -#: postmaster/postmaster.c:2660 +#: postmaster/postmaster.c:2661 msgid "slot sync worker process" msgstr "სლოტის სინქრონიზაციის დამხმარე პროცესი" -#: postmaster/postmaster.c:2716 +#: postmaster/postmaster.c:2717 #, c-format msgid "background worker \"%s\"" msgstr "ფონური დამხმარე პროცესი \"%s\"" -#: postmaster/postmaster.c:2795 postmaster/postmaster.c:2815 postmaster/postmaster.c:2822 postmaster/postmaster.c:2840 +#: postmaster/postmaster.c:2796 postmaster/postmaster.c:2816 postmaster/postmaster.c:2823 postmaster/postmaster.c:2841 msgid "server process" msgstr "სერვერის პროცესი" -#: postmaster/postmaster.c:2894 +#: postmaster/postmaster.c:2895 #, 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:3081 +#: postmaster/postmaster.c:3082 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) დასრულდა სტატუსით %d" -#: postmaster/postmaster.c:3083 postmaster/postmaster.c:3095 postmaster/postmaster.c:3105 postmaster/postmaster.c:3116 +#: postmaster/postmaster.c:3084 postmaster/postmaster.c:3096 postmaster/postmaster.c:3106 postmaster/postmaster.c:3117 #, 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:3092 +#: postmaster/postmaster.c:3093 #, 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:3102 +#: postmaster/postmaster.c:3103 #, 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:3114 +#: postmaster/postmaster.c:3115 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) დასრულდა უცნობი სტატუსით %d" -#: postmaster/postmaster.c:3330 +#: postmaster/postmaster.c:3331 #, c-format msgid "abnormal database system shutdown" msgstr "მონაცემთა ბაზის სისტემის არანორმალური გამორთვა" -#: postmaster/postmaster.c:3356 +#: postmaster/postmaster.c:3357 #, c-format msgid "shutting down due to startup process failure" msgstr "მუშაობის დასრულება გამშვები პროცესის შეცდომის გამო" -#: postmaster/postmaster.c:3362 +#: postmaster/postmaster.c:3363 #, c-format msgid "shutting down because \"restart_after_crash\" is off" msgstr "მუშაობა დასრულდება. რადგან \"restart_after_crash\" გამორთულია" -#: postmaster/postmaster.c:3374 +#: postmaster/postmaster.c:3375 #, c-format msgid "all server processes terminated; reinitializing" msgstr "სერვერის ყველა პროცესი დასრულდა; მიმდინარეობს რეინიციალიზაცია" -#: postmaster/postmaster.c:3573 postmaster/postmaster.c:3983 postmaster/postmaster.c:4372 +#: postmaster/postmaster.c:3574 postmaster/postmaster.c:3985 postmaster/postmaster.c:4374 #, c-format msgid "could not generate random cancel key" msgstr "შემთხვევითი გაუქმების გასაღების გენერაცია შეუძლებელია" -#: postmaster/postmaster.c:3606 +#: postmaster/postmaster.c:3607 #, c-format msgid "could not fork new process for connection: %m" msgstr "ახალი პროცესის ფორკის შეცდომა შეერთებისთვის: %m" -#: postmaster/postmaster.c:3648 +#: postmaster/postmaster.c:3649 msgid "could not fork new process for connection: " msgstr "ახალი პროცესის ფორკის შეცდომა შეერთებისთვის: " -#: postmaster/postmaster.c:3682 +#: postmaster/postmaster.c:3683 #, c-format -msgid "Please report this to <%s>." -msgstr "გთხოვთ, შეატყობინოთ <%s>." +msgid "postmaster became multithreaded" +msgstr "postmaster მრავალნაკადიანი გახდა" -#: postmaster/postmaster.c:3750 +#: postmaster/postmaster.c:3752 #, c-format msgid "database system is ready to accept read-only connections" msgstr "მონაცემთა ბაზის სისტემა მზადაა მხოლოდ-კითხვადი შეერთებების მისაღებად" -#: postmaster/postmaster.c:3933 +#: postmaster/postmaster.c:3935 #, c-format msgid "could not fork \"%s\" process: %m" msgstr "\"%s\" პროცესის ფორკის შეცდომა: %m" -#: postmaster/postmaster.c:4171 postmaster/postmaster.c:4205 +#: postmaster/postmaster.c:4173 postmaster/postmaster.c:4207 #, c-format msgid "database connection requirement not indicated during registration" msgstr "" -#: postmaster/postmaster.c:4181 postmaster/postmaster.c:4215 +#: postmaster/postmaster.c:4183 postmaster/postmaster.c:4217 #, c-format msgid "invalid processing mode in background worker" msgstr "არასწორი დამუშავების რეჟიმი ფონურ დამხმარე პროცესში" -#: postmaster/postmaster.c:4275 +#: postmaster/postmaster.c:4277 #, c-format msgid "could not fork background worker process: %m" msgstr "ფონური დამხმარე პროცესის ფორკის შეცდომა: %m" -#: postmaster/postmaster.c:4358 +#: postmaster/postmaster.c:4360 #, c-format msgid "no slot available for new background worker process" msgstr "ახალი ფონური დამხმარე პროცესისთვის სლოტი ხელმისაწვდომი არაა" -#: postmaster/postmaster.c:4621 +#: postmaster/postmaster.c:4623 #, c-format msgid "could not read exit code for process\n" msgstr "პროცესის გამოსვლის კოდის წაკითხვის შეცდომა\n" -#: postmaster/postmaster.c:4663 +#: postmaster/postmaster.c:4665 #, c-format msgid "could not post child completion status\n" msgstr "შვილი პროცესის დასრულების სტატუსის წაკითხვის შეცდომა\n" @@ -19963,36 +19849,43 @@ msgid "disabling automatic rotation (use SIGHUP to re-enable)" msgstr "" -#: postmaster/walsummarizer.c:384 +#: postmaster/walsummarizer.c:740 #, c-format -msgid "switch point from TLI %u to TLI %u is at %X/%X" +msgid "WAL summarization is not progressing" msgstr "" -#: postmaster/walsummarizer.c:885 +#: postmaster/walsummarizer.c:741 +#, c-format +msgid "Summarization is needed through %X/%X, but is stuck at %X/%X on disk and %X/%X in memory." +msgstr "" + +#: postmaster/walsummarizer.c:755 +#, c-format +msgid "still waiting for WAL summarization through %X/%X after %ld second" +msgid_plural "still waiting for WAL summarization through %X/%X after %ld seconds" +msgstr[0] "" +msgstr[1] "" + +#: postmaster/walsummarizer.c:760 +#, c-format +msgid "Summarization has reached %X/%X on disk and %X/%X in memory." +msgstr "" + +#: postmaster/walsummarizer.c:1000 #, c-format msgid "could not find a valid record after %X/%X" msgstr "%X/%X -ის შემდეგ სწორი ჩანაწერი არ არსებობს" -#: postmaster/walsummarizer.c:930 +#: postmaster/walsummarizer.c:1045 #, c-format msgid "could not read WAL from timeline %u at %X/%X: %s" msgstr "ვერ წავიკითხე WAL დროის ხაზიდან %u მისამართზე %X/%X: %s" -#: postmaster/walsummarizer.c:936 +#: postmaster/walsummarizer.c:1051 #, c-format msgid "could not read WAL from timeline %u at %X/%X" msgstr "ვერ წავიკითხე WAL დროის ხაზიდან %u მისამართზე %X/%X" -#: postmaster/walsummarizer.c:1077 -#, c-format -msgid "summarized WAL on TLI %u from %X/%X to %X/%X" -msgstr "" - -#: postmaster/walsummarizer.c:1385 -#, c-format -msgid "timeline %u became historic, can read up to %X/%X" -msgstr "" - #: regex/regc_pg_locale.c:244 #, c-format msgid "could not determine which collation to use for regular expression" @@ -20194,7 +20087,7 @@ msgid "out of logical replication worker slots" msgstr "ლოგიკური რეპლიკაციის დამხმარე პროგრამის სლოტები არასაკმარისია" -#: replication/logical/launcher.c:428 replication/logical/launcher.c:514 replication/slot.c:1524 storage/lmgr/lock.c:963 storage/lmgr/lock.c:1001 storage/lmgr/lock.c:2804 storage/lmgr/lock.c:4189 storage/lmgr/lock.c:4254 storage/lmgr/lock.c:4604 storage/lmgr/predicate.c:2464 storage/lmgr/predicate.c:2479 storage/lmgr/predicate.c:3876 +#: replication/logical/launcher.c:428 replication/logical/launcher.c:514 replication/slot.c:1524 storage/lmgr/lock.c:985 storage/lmgr/lock.c:1023 storage/lmgr/lock.c:2836 storage/lmgr/lock.c:4221 storage/lmgr/lock.c:4286 storage/lmgr/lock.c:4636 storage/lmgr/predicate.c:2469 storage/lmgr/predicate.c:2484 storage/lmgr/predicate.c:3881 #, c-format msgid "You might need to increase \"%s\"." msgstr "როგორც ჩანს, გჭირდებათ, \"%s\" გაზარდოთ." @@ -20224,82 +20117,82 @@ msgid "logical decoding requires a database connection" msgstr "ლოგიკურ გაშიფვრას ბაზასთან მიერთება ესაჭიროება" -#: replication/logical/logical.c:364 replication/logical/logical.c:518 +#: replication/logical/logical.c:365 replication/logical/logical.c:519 #, c-format msgid "cannot use physical replication slot for logical decoding" msgstr "ლოგიკური გაშიფვრისთვის ფიზიკური რეპლიკაციის სლოტის გამოყენება შეუძლებელია" -#: replication/logical/logical.c:369 replication/logical/logical.c:528 +#: replication/logical/logical.c:370 replication/logical/logical.c:529 #, c-format msgid "replication slot \"%s\" was not created in this database" msgstr "რეპლიკაციის სლოტი \"%s\" ამ ბაზაში არ შექმნილა" -#: replication/logical/logical.c:376 +#: replication/logical/logical.c:377 #, c-format msgid "cannot create logical replication slot in transaction that has performed writes" msgstr "შეუძლებელია ლოგიკური რეპლიკაციის სლოტის შექმნა ტრანზაქციაში, რომელიც ჩაწერებს ახორციელებს" -#: replication/logical/logical.c:539 +#: replication/logical/logical.c:540 #, c-format msgid "cannot use replication slot \"%s\" for logical decoding" msgstr "ლოგიკური გაშიფვრისთვის რეპლიკაციის სლოტის \"%s\" გამოყენება შეუძლებელია" -#: replication/logical/logical.c:541 +#: replication/logical/logical.c:542 replication/slot.c:798 replication/slot.c:829 #, c-format -msgid "This slot is being synchronized from the primary server." -msgstr "მიმდინარეობს ამ სლოტის სინქრონიზაცია ძირითადი სერვერიდან." +msgid "This replication slot is being synchronized from the primary server." +msgstr "მიმდინარეობს ამ რეპლიკაციის სლოტის სინქრონიზაცია ძირითადი სერვერიდან." -#: replication/logical/logical.c:542 +#: replication/logical/logical.c:543 #, c-format msgid "Specify another replication slot." msgstr "მიუთითეთ სხვა რეპლიკაციის სლოტი." -#: replication/logical/logical.c:553 replication/logical/logical.c:560 +#: replication/logical/logical.c:554 replication/logical/logical.c:561 #, c-format msgid "can no longer get changes from replication slot \"%s\"" msgstr "რეპლიკაციის სლოტიდან \"%s\" ცვლილებების მიღება უკვე შეუძლებელია" -#: replication/logical/logical.c:555 +#: replication/logical/logical.c:556 #, c-format msgid "This slot has been invalidated because it exceeded the maximum reserved size." msgstr "" -#: replication/logical/logical.c:562 +#: replication/logical/logical.c:563 #, c-format msgid "This slot has been invalidated because it was conflicting with recovery." msgstr "" -#: replication/logical/logical.c:627 +#: replication/logical/logical.c:628 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "იწყება ლოგიკური გაშიფვრა სლოტისთვის \"%s\"" -#: replication/logical/logical.c:629 +#: replication/logical/logical.c:630 #, c-format msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X." msgstr "" -#: replication/logical/logical.c:777 +#: replication/logical/logical.c:778 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X" msgstr "" -#: replication/logical/logical.c:783 +#: replication/logical/logical.c:784 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "" -#: replication/logical/logical.c:954 replication/logical/logical.c:999 replication/logical/logical.c:1044 replication/logical/logical.c:1090 +#: replication/logical/logical.c:955 replication/logical/logical.c:1000 replication/logical/logical.c:1045 replication/logical/logical.c:1091 #, c-format msgid "logical replication at prepare time requires a %s callback" msgstr "" -#: replication/logical/logical.c:1322 replication/logical/logical.c:1371 replication/logical/logical.c:1412 replication/logical/logical.c:1498 replication/logical/logical.c:1547 +#: replication/logical/logical.c:1323 replication/logical/logical.c:1372 replication/logical/logical.c:1413 replication/logical/logical.c:1499 replication/logical/logical.c:1548 #, c-format msgid "logical streaming requires a %s callback" msgstr "" -#: replication/logical/logical.c:1457 +#: replication/logical/logical.c:1458 #, c-format msgid "logical streaming at prepare time requires a %s callback" msgstr "" @@ -20324,7 +20217,7 @@ msgid "array must not contain nulls" msgstr "მასივი ნულოვან მნიშვნელობებს არ უნდა შეიცავდეს" -#: replication/logical/logicalfuncs.c:177 utils/adt/json.c:1406 utils/adt/jsonb.c:1304 +#: replication/logical/logicalfuncs.c:177 utils/adt/json.c:1420 utils/adt/jsonb.c:1304 #, c-format msgid "array must have even number of elements" msgstr "მასივს ლუწი რაოდენობის ელემენტები უნდა ჰქონდეს" @@ -20446,64 +20339,64 @@ msgid "logical replication target relation \"%s.%s\" does not exist" msgstr "" -#: replication/logical/reorderbuffer.c:3970 +#: replication/logical/reorderbuffer.c:3999 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "შეცდომა მონაცემის ფაილში ჩაწერისას XID-სთვის %u: %m" -#: replication/logical/reorderbuffer.c:4316 replication/logical/reorderbuffer.c:4341 +#: replication/logical/reorderbuffer.c:4345 replication/logical/reorderbuffer.c:4370 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "" -#: replication/logical/reorderbuffer.c:4320 replication/logical/reorderbuffer.c:4345 +#: replication/logical/reorderbuffer.c:4349 replication/logical/reorderbuffer.c:4374 #, c-format msgid "could not read from reorderbuffer spill file: read %d instead of %u bytes" msgstr "" -#: replication/logical/reorderbuffer.c:4595 +#: replication/logical/reorderbuffer.c:4624 #, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" msgstr "" -#: replication/logical/reorderbuffer.c:5091 +#: replication/logical/reorderbuffer.c:5120 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "" #: replication/logical/slotsync.c:215 #, c-format -msgid "could not sync slot \"%s\" as remote slot precedes local slot" -msgstr "" +msgid "could not synchronize replication slot \"%s\" because remote slot precedes local slot" +msgstr "რეპლიკაციის სლოტის სინქრონიზაცია \"%s\" შეუძლებელია, რადგან დაშორებული სლოტი წინ უსწრებს ლოკალურ სლოტს" #: replication/logical/slotsync.c:217 #, c-format -msgid "Remote slot has LSN %X/%X and catalog xmin %u, but local slot has LSN %X/%X and catalog xmin %u." +msgid "The remote slot has LSN %X/%X and catalog xmin %u, but the local slot has LSN %X/%X and catalog xmin %u." msgstr "" #: replication/logical/slotsync.c:459 #, c-format -msgid "dropped replication slot \"%s\" of dbid %u" -msgstr "წაიშალა რეპლიკაციის სლოტი \"%s\" dbid-სთვის %u" +msgid "dropped replication slot \"%s\" of database with OID %u" +msgstr "წაიშალა რეპლიკაციის სლოტი \"%s\" მონაცემთა ბაზიდან OID-ით %u" #: replication/logical/slotsync.c:579 #, c-format -msgid "could not sync slot \"%s\"" -msgstr "სლოტის \"%s\" სინქრონიზაცია შეუძლებელია" +msgid "could not synchronize replication slot \"%s\"" +msgstr "რეპლიკაციის სლოტის \"%s\" სინქრონიზაცია შეუძლებელია" #: replication/logical/slotsync.c:580 #, c-format -msgid "Logical decoding cannot find consistent point from local slot's LSN %X/%X." +msgid "Logical decoding could not find consistent point from local slot's LSN %X/%X." msgstr "" #: replication/logical/slotsync.c:589 #, c-format -msgid "newly created slot \"%s\" is sync-ready now" -msgstr "" +msgid "newly created replication slot \"%s\" is sync-ready now" +msgstr "ახლად შექმნილი რეპლიკაციის სლოტი \"%s\" ახლა სინქრონიზებულია" #: replication/logical/slotsync.c:628 #, c-format -msgid "skipping slot synchronization as the received slot sync LSN %X/%X for slot \"%s\" is ahead of the standby position %X/%X" +msgid "skipping slot synchronization because the received slot sync LSN %X/%X for slot \"%s\" is ahead of the standby position %X/%X" msgstr "" #: replication/logical/slotsync.c:650 @@ -20531,51 +20424,51 @@ msgid "cannot synchronize replication slots from a standby server" msgstr "უქმე სერვერიდან რეპლიკაციის სლოტების სინქრონიზაცია შეუძლებელია" -#: replication/logical/slotsync.c:995 -#, c-format -msgid "slot synchronization requires valid primary_slot_name" -msgstr "" - #. translator: second %s is a GUC variable name -#: replication/logical/slotsync.c:997 +#: replication/logical/slotsync.c:996 #, c-format -msgid "The replication slot \"%s\" specified by %s does not exist on the primary server." -msgstr "რეპლიკაციის სლოტი \"%s\", რომელიც %s-მა მიუთითა, არ არსებობს ძირითად სერვერზე." +msgid "replication slot \"%s\" specified by \"%s\" does not exist on primary server" +msgstr "რეპლიკაციის სლოტი \"%s\", რომელიც \"%s\"-მა მიუთითა, არ არსებობს ძირითად სერვერზე" +#. translator: first %s is a connection option; second %s is a GUC +#. variable name +#. #: replication/logical/slotsync.c:1029 #, c-format -msgid "slot synchronization requires dbname to be specified in %s" -msgstr "სლოტის სინქრონიზაციას \"%s\"-ში ბაზის სახელის მითითება სჭირდება" +msgid "replication slot synchronization requires \"%s\" to be specified in \"%s\"" +msgstr "რეპლიკაციის სლოტის სინქრონიზაციას სჭირდება, რომ \"%s\" მითითებული იყოს \"%s\"-ში" #: replication/logical/slotsync.c:1050 #, c-format -msgid "slot synchronization requires \"wal_level\" >= \"logical\"" -msgstr "სლოტის სინქრონიზაციას \"wal_level\" >= \"logical\" ესაჭიროება" +msgid "replication slot synchronization requires \"wal_level\" >= \"logical\"" +msgstr "რეპლიკაციის სლოტის სინქრონიზაციას \"wal_level\" >= \"logical\" ესაჭიროება" +#. translator: %s is a GUC variable name #: replication/logical/slotsync.c:1063 replication/logical/slotsync.c:1091 #, c-format -msgid "slot synchronization requires %s to be defined" -msgstr "სლოტის სინქრონიზაციას %s-ის აღწერა სჭირდება" +msgid "replication slot synchronization requires \"%s\" to be set" +msgstr "რეპლიკაციის სლოტის სინქრონიზაციას \"%s\"-ის დაყენება სჭირდება" +#. translator: %s is a GUC variable name #: replication/logical/slotsync.c:1077 #, c-format -msgid "slot synchronization requires %s to be enabled" -msgstr "სლოტის სინქრონიზაციას %s-ის ჩართვა სჭირდება" +msgid "replication slot synchronization requires \"%s\" to be enabled" +msgstr "რეპლიკაციის სლოტის სინქრონიზაციას \"%s\"-ის ჩართვა სჭირდება" #. translator: %s is a GUC variable name #: replication/logical/slotsync.c:1129 #, c-format -msgid "slot sync worker will shutdown because %s is disabled" +msgid "replication slot synchronization worker will shut down because \"%s\" is disabled" msgstr "" #: replication/logical/slotsync.c:1138 #, c-format -msgid "slot sync worker will restart because of a parameter change" +msgid "replication slot synchronization worker will restart because of a parameter change" msgstr "" #: replication/logical/slotsync.c:1162 #, c-format -msgid "slot sync worker is shutting down on receiving SIGINT" +msgid "replication slot synchronization worker is shutting down on receiving SIGINT" msgstr "" #: replication/logical/slotsync.c:1287 @@ -20598,69 +20491,69 @@ msgid "could not connect to the primary server: %s" msgstr "შეუძლებელია მიერთება ძირითად სერვერთან: %s" -#: replication/logical/snapbuild.c:643 +#: replication/logical/snapbuild.c:653 #, c-format msgid "initial slot snapshot too large" msgstr "საწყისი სლოტის სწრაფი ასლი ძალიან დიდია" -#: replication/logical/snapbuild.c:697 +#: replication/logical/snapbuild.c:707 #, c-format msgid "exported logical decoding snapshot: \"%s\" with %u transaction ID" msgid_plural "exported logical decoding snapshot: \"%s\" with %u transaction IDs" msgstr[0] "" msgstr[1] "" -#: replication/logical/snapbuild.c:1392 replication/logical/snapbuild.c:1484 replication/logical/snapbuild.c:2000 +#: replication/logical/snapbuild.c:1404 replication/logical/snapbuild.c:1501 replication/logical/snapbuild.c:2017 #, c-format msgid "logical decoding found consistent point at %X/%X" msgstr "" -#: replication/logical/snapbuild.c:1394 +#: replication/logical/snapbuild.c:1406 #, c-format msgid "There are no running transactions." msgstr "გაშვებული ტრანზაქციების გარეშე." -#: replication/logical/snapbuild.c:1436 +#: replication/logical/snapbuild.c:1453 #, c-format msgid "logical decoding found initial starting point at %X/%X" msgstr "" -#: replication/logical/snapbuild.c:1438 replication/logical/snapbuild.c:1462 +#: replication/logical/snapbuild.c:1455 replication/logical/snapbuild.c:1479 #, c-format msgid "Waiting for transactions (approximately %d) older than %u to end." msgstr "" -#: replication/logical/snapbuild.c:1460 +#: replication/logical/snapbuild.c:1477 #, c-format msgid "logical decoding found initial consistent point at %X/%X" msgstr "" -#: replication/logical/snapbuild.c:1486 +#: replication/logical/snapbuild.c:1503 #, c-format msgid "There are no old transactions anymore." msgstr "ძველი ტრანზაქციები აღარ დარჩა." -#: replication/logical/snapbuild.c:1887 +#: replication/logical/snapbuild.c:1904 #, c-format msgid "snapbuild state file \"%s\" has wrong magic number: %u instead of %u" msgstr "" -#: replication/logical/snapbuild.c:1893 +#: replication/logical/snapbuild.c:1910 #, c-format msgid "snapbuild state file \"%s\" has unsupported version: %u instead of %u" msgstr "" -#: replication/logical/snapbuild.c:1934 +#: replication/logical/snapbuild.c:1951 #, c-format msgid "checksum mismatch for snapbuild state file \"%s\": is %u, should be %u" msgstr "" -#: replication/logical/snapbuild.c:2002 +#: replication/logical/snapbuild.c:2019 #, c-format msgid "Logical decoding will begin using saved snapshot." msgstr "ლოგიკური გაშიფვრა შენახული სწრაფი ასლის გამოყენებას დაიწყებს." -#: replication/logical/snapbuild.c:2109 +#: replication/logical/snapbuild.c:2126 #, c-format msgid "could not parse file name \"%s\"" msgstr "ფაილის სახელის დამუშავების შეცდომა: \"%s\"" @@ -20815,122 +20708,117 @@ msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "გაეშვა ლოგიკური რეპლიკაციის გადატარების დამხმარე პროცესი გამოწერისთვის \"%s\"" -#: replication/logical/worker.c:4734 +#: replication/logical/worker.c:4758 #, c-format msgid "subscription \"%s\" has been disabled because of an error" msgstr "გამოწერა \"%s\" გაითიშა შეცდომის გამო" -#: replication/logical/worker.c:4782 +#: replication/logical/worker.c:4806 #, c-format msgid "logical replication starts skipping transaction at LSN %X/%X" msgstr "ლოგიკური რეპლიკაცია იწყებს ტრანზაქციის გამოტოვებას მისამართზე LSN %X/%X" -#: replication/logical/worker.c:4796 +#: replication/logical/worker.c:4820 #, c-format msgid "logical replication completed skipping transaction at LSN %X/%X" msgstr "ლოგიკურმა რეპლიკაციამ დაასრულა ტრანზაქციის გამოტოვება მისამართზე LSN %X/%X" -#: replication/logical/worker.c:4878 +#: replication/logical/worker.c:4902 #, c-format msgid "skip-LSN of subscription \"%s\" cleared" msgstr "skip-LSN გამოწერისთვის \"%s\" გასუფთავებულია" -#: replication/logical/worker.c:4879 +#: replication/logical/worker.c:4903 #, c-format msgid "Remote transaction's finish WAL location (LSN) %X/%X did not match skip-LSN %X/%X." msgstr "" -#: replication/logical/worker.c:4905 +#: replication/logical/worker.c:4940 #, c-format msgid "processing remote data for replication origin \"%s\" during message type \"%s\"" msgstr "" -#: replication/logical/worker.c:4909 +#: replication/logical/worker.c:4944 #, c-format msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u" msgstr "" -#: replication/logical/worker.c:4914 +#: replication/logical/worker.c:4949 #, c-format msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%X" msgstr "" -#: replication/logical/worker.c:4925 +#: replication/logical/worker.c:4960 #, c-format msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u" msgstr "" -#: replication/logical/worker.c:4932 +#: replication/logical/worker.c:4967 #, c-format msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%X" msgstr "" -#: replication/logical/worker.c:4943 +#: replication/logical/worker.c:4978 #, c-format msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u" msgstr "" -#: replication/logical/worker.c:4951 +#: replication/logical/worker.c:4986 #, c-format msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%X" msgstr "" -#: replication/pgoutput/pgoutput.c:315 +#: replication/pgoutput/pgoutput.c:322 #, c-format msgid "invalid proto_version" msgstr "არასწორი proto_version" -#: replication/pgoutput/pgoutput.c:320 +#: replication/pgoutput/pgoutput.c:327 #, c-format msgid "proto_version \"%s\" out of range" msgstr "proto_version \"%s\" დიაპაზონს გარეთაა" -#: replication/pgoutput/pgoutput.c:337 +#: replication/pgoutput/pgoutput.c:344 #, c-format msgid "invalid publication_names syntax" msgstr "არასწორი publication_names syntax" -#: replication/pgoutput/pgoutput.c:407 +#: replication/pgoutput/pgoutput.c:414 replication/pgoutput/pgoutput.c:418 #, c-format -msgid "proto_version option missing" -msgstr "პარამეტრი proto_version მითითებული არაა" +msgid "option \"%s\" missing" +msgstr "პარამეტრი \"%s\" აკლია" -#: replication/pgoutput/pgoutput.c:411 -#, c-format -msgid "publication_names option missing" -msgstr "აკლა პარამეტრი publication_names" - -#: replication/pgoutput/pgoutput.c:452 +#: replication/pgoutput/pgoutput.c:478 #, c-format msgid "client sent proto_version=%d but server only supports protocol %d or lower" msgstr "კლიენტმა გამოაგზავნა proto_version=%d მაგრამ სერვერს მხოლოდ %d პროტოკოლის და ქვემოთ გააჩნია მხარდაჭერა" -#: replication/pgoutput/pgoutput.c:458 +#: replication/pgoutput/pgoutput.c:484 #, c-format msgid "client sent proto_version=%d but server only supports protocol %d or higher" msgstr "კლიენტმა გამოაგზავნა proto_version=%d მაგრამ სერვერს მხოლოდ %d პროტოკოლის და ზემოთ გააჩნია მხარდაჭერა" -#: replication/pgoutput/pgoutput.c:473 +#: replication/pgoutput/pgoutput.c:499 #, c-format msgid "requested proto_version=%d does not support streaming, need %d or higher" msgstr "" -#: replication/pgoutput/pgoutput.c:479 +#: replication/pgoutput/pgoutput.c:505 #, c-format msgid "requested proto_version=%d does not support parallel streaming, need %d or higher" msgstr "" -#: replication/pgoutput/pgoutput.c:484 +#: replication/pgoutput/pgoutput.c:510 #, c-format msgid "streaming requested, but not supported by output plugin" msgstr "" -#: replication/pgoutput/pgoutput.c:498 +#: replication/pgoutput/pgoutput.c:524 #, c-format msgid "requested proto_version=%d does not support two-phase commit, need %d or higher" msgstr "" -#: replication/pgoutput/pgoutput.c:503 +#: replication/pgoutput/pgoutput.c:529 #, c-format msgid "two-phase commit requested, but not supported by output plugin" msgstr "" @@ -20980,7 +20868,7 @@ msgid "Free one or increase \"max_replication_slots\"." msgstr "გაათავისუფლეთ ერთი მაინც ან გაზარდეთ \"max_replication_slots\"." -#: replication/slot.c:560 replication/slot.c:2453 replication/slotfuncs.c:661 utils/activity/pgstat_replslot.c:56 utils/adt/genfile.c:728 +#: replication/slot.c:560 replication/slot.c:2450 replication/slotfuncs.c:661 utils/activity/pgstat_replslot.c:56 utils/adt/genfile.c:728 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "რეპლიკაციის სლოტი არ არსებობს: %s" @@ -21015,11 +20903,6 @@ msgid "cannot drop replication slot \"%s\"" msgstr "რეპლიკაციის სლოტის \"%s\" წაშლის შეცდომა" -#: replication/slot.c:798 replication/slot.c:829 -#, c-format -msgid "This slot is being synced from the primary server." -msgstr "მიმდინარეობს ამ სლოტის სინქრონიზაცია ძირითადი სერვერიდან." - #: replication/slot.c:816 #, c-format msgid "cannot use %s with a physical replication slot" @@ -21131,60 +21014,60 @@ msgid "too many replication slots active before shutdown" msgstr "გამორთვამდე მეტისმეტად ბევრი რეპლიკაციის სლოტი იყო აქტიური" -#: replication/slot.c:2461 +#: replication/slot.c:2458 #, c-format msgid "\"%s\" is not a physical replication slot" msgstr "\"%s\" ფიზიკური რეპლიკაციის სლოტი არაა" -#: replication/slot.c:2637 +#: replication/slot.c:2635 #, c-format -msgid "replication slot \"%s\" specified in parameter %s does not exist" -msgstr "რეპლიკაციის სლოტმა \"%s\" მიუთითა პარამეტრი %s, რომელიც არ არსებობს" +msgid "replication slot \"%s\" specified in parameter \"%s\" does not exist" +msgstr "რეპლიკაციის სლოტი \"%s\", მითითებული პარამეტრში %s, არ არსებობს" -#: replication/slot.c:2639 replication/slot.c:2680 replication/slot.c:2695 +#: replication/slot.c:2637 replication/slot.c:2671 replication/slot.c:2686 #, c-format -msgid "Logical replication is waiting on the standby associated with \"%s\"." -msgstr "ლოგიკური რეპლიკაცია \"%s\"-სთან ასოცირებულ უქმეს ელოდება." +msgid "Logical replication is waiting on the standby associated with replication slot \"%s\"." +msgstr "ლოგიკური რეპლიკაცია ელოდება უქმე სლოტს, რომელიც დაკავშირებულია რეპლიკაციის სლოტთან \"%s\"." -#: replication/slot.c:2641 +#: replication/slot.c:2639 #, c-format -msgid "Consider creating the slot \"%s\" or amend parameter %s." -msgstr "განიხილეთ, შექმნათ სლოტი \"%s\", ან მიაწერეთ პარამეტრი %s." +msgid "Create the replication slot \"%s\" or amend parameter \"%s\"." +msgstr "შექმენით რეპლიკაციის სლოტი \"%s\" ან შეცვალეთ პარამეტრი \"%s\"." -#: replication/slot.c:2658 +#: replication/slot.c:2649 #, c-format -msgid "cannot have logical replication slot \"%s\" in parameter %s" -msgstr "ვერ გექნებათ ლოგიკური რეპლიკაციის სლოტი \"%s\" პარამეტრში %s" +msgid "cannot specify logical replication slot \"%s\" in parameter \"%s\"" +msgstr "ვერ მიუთითებთ ლოგიკური რეპლიკაციის სლოტს \"%s\" პარამეტრში \"%s\"" -#: replication/slot.c:2660 +#: replication/slot.c:2651 #, c-format -msgid "Logical replication is waiting for correction on \"%s\"." -msgstr "ლოგიკური რეპლიკაციის სლოტი ელოდება გასწორებას \"%s\"-ზე." +msgid "Logical replication is waiting for correction on replication slot \"%s\"." +msgstr "ლოგიკური რეპლიკაცია ელოდება კორექტირებას რეპლიკაციის სლოტზე \"%s\"." -#: replication/slot.c:2662 +#: replication/slot.c:2653 #, c-format -msgid "Consider removing logical slot \"%s\" from parameter %s." -msgstr "" +msgid "Remove the logical replication slot \"%s\" from parameter \"%s\"." +msgstr "წაშალეთ ლოგიკური რეპლიკაციის სლოტი \"%s\" პარამეტრიდან \"%s\"." -#: replication/slot.c:2678 +#: replication/slot.c:2669 #, c-format -msgid "physical slot \"%s\" specified in parameter %s has been invalidated" -msgstr "" +msgid "physical replication slot \"%s\" specified in parameter \"%s\" has been invalidated" +msgstr "ფიზიკური რეპლიკაციის სლოტი \"%s\", მითითებული პარამეტრში \"%s\", გაუქმებულია" -#: replication/slot.c:2682 +#: replication/slot.c:2673 #, c-format -msgid "Consider dropping and recreating the slot \"%s\" or amend parameter %s." -msgstr "განიხილეთ მოცილება ან თავიდან შექმნა სლოტისთვის \"%s\" ან მიაწერეთ პარამეტრი %s." +msgid "Drop and recreate the replication slot \"%s\", or amend parameter \"%s\"." +msgstr "განიხილეთ მოცილება ან თავიდან შექმნა სლოტისთვის \"%s\" ან მიაწერეთ პარამეტრი \"%s\"." -#: replication/slot.c:2693 +#: replication/slot.c:2684 #, c-format -msgid "replication slot \"%s\" specified in parameter %s does not have active_pid" -msgstr "რეპლიკაციის სლოტს \"%s\", რომელიც მითითებულია პარამეტრში %s, active_pid არ გააჩნია" +msgid "replication slot \"%s\" specified in parameter \"%s\" does not have active_pid" +msgstr "რეპლიკაციის სლოტი \"%s\", რომელიც მითითებულია პარამეტრში \"%s\", active_pid არ გააჩნია" -#: replication/slot.c:2697 +#: replication/slot.c:2688 #, c-format -msgid "Consider starting standby associated with \"%s\" or amend parameter %s." -msgstr "" +msgid "Start the standby associated with the replication slot \"%s\", or amend parameter \"%s\"." +msgstr "გაუშვით უქმე, ასოცირებული რეპლიკაციის სლოტთან \"%s\", ან მიაწერეთ პარამეტრი \"%s\"." #: replication/slotfuncs.c:526 #, c-format @@ -21356,7 +21239,7 @@ msgid "cannot use %s with a logical replication slot" msgstr "%s-ის გამოყენება ლოგიკური რეპლიკაციის სლოტთან ერთად შეუძლებელია" -#: replication/walsender.c:635 storage/smgr/md.c:1723 +#: replication/walsender.c:635 storage/smgr/md.c:1735 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "ფაილის (\"%s\") ბოლოში გადახვევის პრობლემა: %m" @@ -21447,7 +21330,7 @@ msgid "received replication command: %s" msgstr "მიღებულია რეპლიკაციის ბრძანება: %s" -#: replication/walsender.c:2076 tcop/fastpath.c:209 tcop/postgres.c:1138 tcop/postgres.c:1496 tcop/postgres.c:1736 tcop/postgres.c:2206 tcop/postgres.c:2644 tcop/postgres.c:2722 +#: replication/walsender.c:2076 tcop/fastpath.c:209 tcop/postgres.c:1142 tcop/postgres.c:1500 tcop/postgres.c:1752 tcop/postgres.c:2234 tcop/postgres.c:2672 tcop/postgres.c:2749 #, c-format msgid "current transaction is aborted, commands ignored until end of transaction block" msgstr "" @@ -21647,280 +21530,285 @@ msgid "renaming an ON SELECT rule is not allowed" msgstr "'ON SELECT' წესზე სახელის გადარქმევა დაუშვებელია" -#: rewrite/rewriteHandler.c:581 +#: rewrite/rewriteHandler.c:588 #, c-format msgid "WITH query name \"%s\" appears in both a rule action and the query being rewritten" msgstr "" -#: rewrite/rewriteHandler.c:608 +#: rewrite/rewriteHandler.c:615 #, 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:661 +#: rewrite/rewriteHandler.c:668 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "" -#: rewrite/rewriteHandler.c:893 rewrite/rewriteHandler.c:932 +#: rewrite/rewriteHandler.c:900 rewrite/rewriteHandler.c:939 #, c-format msgid "cannot insert a non-DEFAULT value into column \"%s\"" msgstr "" -#: rewrite/rewriteHandler.c:895 rewrite/rewriteHandler.c:961 +#: rewrite/rewriteHandler.c:902 rewrite/rewriteHandler.c:968 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "" -#: rewrite/rewriteHandler.c:897 +#: rewrite/rewriteHandler.c:904 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "გადასაფარად გამოიყენეთ OVERRIDING SYSTEM VALUE." -#: rewrite/rewriteHandler.c:959 rewrite/rewriteHandler.c:967 +#: rewrite/rewriteHandler.c:966 rewrite/rewriteHandler.c:974 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "სვეტი \"%s\" მხოლოდ DEFAULT-მდე შეიძლება, განახლდეს" -#: rewrite/rewriteHandler.c:1114 rewrite/rewriteHandler.c:1132 +#: rewrite/rewriteHandler.c:1109 rewrite/rewriteHandler.c:1127 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "" -#: rewrite/rewriteHandler.c:1697 +#: rewrite/rewriteHandler.c:1682 #, c-format msgid "MERGE is not supported for relations with rules." msgstr "წესების მქონე ურთიერთობებისთვის MERGE მხარდაჭერილი არაა." -#: rewrite/rewriteHandler.c:2110 rewrite/rewriteHandler.c:4197 +#: rewrite/rewriteHandler.c:1722 rewrite/rewriteHandler.c:3262 +#, c-format +msgid "access to non-system view \"%s\" is restricted" +msgstr "" + +#: rewrite/rewriteHandler.c:2122 rewrite/rewriteHandler.c:4254 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "" -#: rewrite/rewriteHandler.c:2195 +#: rewrite/rewriteHandler.c:2227 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "" -#: rewrite/rewriteHandler.c:2547 +#: rewrite/rewriteHandler.c:2589 msgid "Junk view columns are not updatable." msgstr "ნაგვის ნახვის სვეტები განახლებადი არაა." -#: rewrite/rewriteHandler.c:2552 +#: rewrite/rewriteHandler.c:2594 msgid "View columns that are not columns of their base relation are not updatable." msgstr "ხედის სვეტები, რომლებიც მათი საბაზისო ურთიერთობის სვეტები არიან, განახლებადი არაა." -#: rewrite/rewriteHandler.c:2555 +#: rewrite/rewriteHandler.c:2597 msgid "View columns that refer to system columns are not updatable." msgstr "ხედის სვეტები, რომლებიც სისტემურ სვეტებზეა მიბმული, განახლებადი არაა." -#: rewrite/rewriteHandler.c:2558 +#: rewrite/rewriteHandler.c:2600 msgid "View columns that return whole-row references are not updatable." msgstr "ხედის სვეტები, რომლებიც მთელ-მწკრივიან ბმებზე მიუთითებენ, განახლებადი არაა." -#: rewrite/rewriteHandler.c:2619 +#: rewrite/rewriteHandler.c:2661 msgid "Views containing DISTINCT are not automatically updatable." msgstr "\"DISTINCT\"-ის შემცველი ხედები განახლებადი არაა." -#: rewrite/rewriteHandler.c:2622 +#: rewrite/rewriteHandler.c:2664 msgid "Views containing GROUP BY are not automatically updatable." msgstr "\"GROUP BY\"-ის შემცველი ხედები თვითგანახლებადი არაა." -#: rewrite/rewriteHandler.c:2625 +#: rewrite/rewriteHandler.c:2667 msgid "Views containing HAVING are not automatically updatable." msgstr "\"HAVING\"-ის შემცველი ხედები თვითგანახლებადი არაა." -#: rewrite/rewriteHandler.c:2628 +#: rewrite/rewriteHandler.c:2670 msgid "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "\"UNION\"-ის, \"INTERSECT\"-ის და \"EXCEPT\"-ის შემცველი ხედები თვითგანახლებადი არაა." -#: rewrite/rewriteHandler.c:2631 +#: rewrite/rewriteHandler.c:2673 msgid "Views containing WITH are not automatically updatable." msgstr "\"WITH\"-ის შემცველი ხედები თვითგანახლებადი არაა." -#: rewrite/rewriteHandler.c:2634 +#: rewrite/rewriteHandler.c:2676 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "\"LIMIT\"-ის და \"OFFSET\"-ის შემცველი ხედები თვითგანახლებადი არაა." -#: rewrite/rewriteHandler.c:2646 +#: rewrite/rewriteHandler.c:2688 msgid "Views that return aggregate functions are not automatically updatable." msgstr "ხედები, რომლებიც აგრეგატულ ფუნქციებს აბრუნებენ, თვითგანახლებადი არაა." -#: rewrite/rewriteHandler.c:2649 +#: rewrite/rewriteHandler.c:2691 msgid "Views that return window functions are not automatically updatable." msgstr "ხედები, რომლებიც ფანჯრის ფუნქციებს აბრუნებენ, თვითგანახლებადი არაა." -#: rewrite/rewriteHandler.c:2652 +#: rewrite/rewriteHandler.c:2694 msgid "Views that return set-returning functions are not automatically updatable." msgstr "ხედები, რომლებიც აბრუნებენ ფუნქციებს, რომლებიც სეტებს აბრუნებენ, თვითგანახლებადი არაა." -#: rewrite/rewriteHandler.c:2659 rewrite/rewriteHandler.c:2663 rewrite/rewriteHandler.c:2671 +#: rewrite/rewriteHandler.c:2701 rewrite/rewriteHandler.c:2705 rewrite/rewriteHandler.c:2713 msgid "Views that do not select from a single table or view are not automatically updatable." msgstr "" -#: rewrite/rewriteHandler.c:2674 +#: rewrite/rewriteHandler.c:2716 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "" -#: rewrite/rewriteHandler.c:2698 +#: rewrite/rewriteHandler.c:2740 msgid "Views that have no updatable columns are not automatically updatable." msgstr "ხედები, რომლებსაც განახლებადი ცხრილები არ გააჩნია, ავტომატურად განახლებადები არ არიან." -#: rewrite/rewriteHandler.c:3079 rewrite/rewriteHandler.c:3114 +#: rewrite/rewriteHandler.c:3121 rewrite/rewriteHandler.c:3156 #, c-format msgid "cannot insert into view \"%s\"" msgstr "ხედში ჩამატება შეუძლებელია: %s" -#: rewrite/rewriteHandler.c:3082 +#: rewrite/rewriteHandler.c:3124 #, c-format msgid "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule." msgstr "" -#: rewrite/rewriteHandler.c:3087 rewrite/rewriteHandler.c:3123 +#: rewrite/rewriteHandler.c:3129 rewrite/rewriteHandler.c:3165 #, c-format msgid "cannot update view \"%s\"" msgstr "ხედის განახლება შეუძლებელია: %s" -#: rewrite/rewriteHandler.c:3090 +#: rewrite/rewriteHandler.c:3132 #, c-format msgid "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule." msgstr "" -#: rewrite/rewriteHandler.c:3095 rewrite/rewriteHandler.c:3132 +#: rewrite/rewriteHandler.c:3137 rewrite/rewriteHandler.c:3174 #, c-format msgid "cannot delete from view \"%s\"" msgstr "ხედიდან წაშლა შეუძლებელია: %s" -#: rewrite/rewriteHandler.c:3098 +#: rewrite/rewriteHandler.c:3140 #, c-format msgid "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule." msgstr "" -#: rewrite/rewriteHandler.c:3117 +#: rewrite/rewriteHandler.c:3159 #, c-format msgid "To enable inserting into the view using MERGE, provide an INSTEAD OF INSERT trigger." msgstr "ხედში MERGE-ით ჩასმის ჩასართავად მიუთითეთ INSTEAD OF INSERT ტრიგერი." -#: rewrite/rewriteHandler.c:3126 +#: rewrite/rewriteHandler.c:3168 #, c-format msgid "To enable updating the view using MERGE, provide an INSTEAD OF UPDATE trigger." msgstr "ხედის MERGE-ით განახლების ჩასართავად მიუთითეთ INSTEAD OF UPDATE ტრიგერი." -#: rewrite/rewriteHandler.c:3135 +#: rewrite/rewriteHandler.c:3177 #, c-format msgid "To enable deleting from the view using MERGE, provide an INSTEAD OF DELETE trigger." msgstr "ამ ხედიდან MERGE-ის საშუალებით წაშლის ჩასართავად მიუთითეთ INSTEAD OF DELETE ტრიგერი." -#: rewrite/rewriteHandler.c:3289 +#: rewrite/rewriteHandler.c:3352 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "ხედის (\"%2$s\") სვეტში \"%1$s\" მონაცემის ჩასმა შეუძლებელია" -#: rewrite/rewriteHandler.c:3297 +#: rewrite/rewriteHandler.c:3360 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "ხედის (\"%2$s\") სვეტის \"%1$s\" განახლება შეუძლებელია" -#: rewrite/rewriteHandler.c:3305 +#: rewrite/rewriteHandler.c:3368 #, c-format msgid "cannot merge into column \"%s\" of view \"%s\"" msgstr "ხედის (\"%2$s\") სვეტთან \"%1$s\" შერწყმა შეუძლებელია" -#: rewrite/rewriteHandler.c:3333 +#: rewrite/rewriteHandler.c:3396 #, c-format msgid "cannot merge into view \"%s\"" msgstr "შეუძლებელია შერწყმა ხედში \"%s\"" -#: rewrite/rewriteHandler.c:3335 +#: rewrite/rewriteHandler.c:3398 #, c-format -msgid "MERGE is not supported for views with INSTEAD OF triggers for some actions, but not others." +msgid "MERGE is not supported for views with INSTEAD OF triggers for some actions but not all." msgstr "" -#: rewrite/rewriteHandler.c:3336 +#: rewrite/rewriteHandler.c:3399 #, c-format msgid "To enable merging into the view, either provide a full set of INSTEAD OF triggers or drop the existing INSTEAD OF triggers." msgstr "ამ ხედში შერწყმის ჩასართავად, ან შეიყვანეთ INSTEAD OF ტრიგერების სრული სია, ან წაშალეთ არსებული INSTEAD OF ტრიგერები." -#: rewrite/rewriteHandler.c:3855 +#: rewrite/rewriteHandler.c:3912 #, c-format msgid "DO INSTEAD NOTIFY rules are not supported for data-modifying statements in WITH" msgstr "" -#: rewrite/rewriteHandler.c:3866 +#: rewrite/rewriteHandler.c:3923 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH" msgstr "" -#: rewrite/rewriteHandler.c:3880 +#: rewrite/rewriteHandler.c:3937 #, c-format msgid "conditional DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "" -#: rewrite/rewriteHandler.c:3884 +#: rewrite/rewriteHandler.c:3941 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "" -#: rewrite/rewriteHandler.c:3889 +#: rewrite/rewriteHandler.c:3946 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "" -#: rewrite/rewriteHandler.c:4149 +#: rewrite/rewriteHandler.c:4206 msgid "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "" -#: rewrite/rewriteHandler.c:4246 +#: rewrite/rewriteHandler.c:4303 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "ურთიერთობაზე \"%s\" 'INSERT RETURNING'-ის განხორციელება შეუძლებელია" -#: rewrite/rewriteHandler.c:4248 +#: rewrite/rewriteHandler.c:4305 #, c-format msgid "You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause." msgstr "" -#: rewrite/rewriteHandler.c:4253 +#: rewrite/rewriteHandler.c:4310 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "ურთიერთობაზე \"%s\" 'UPDATE RETURNING'-ის განხორციელება შეუძლებელია" -#: rewrite/rewriteHandler.c:4255 +#: rewrite/rewriteHandler.c:4312 #, c-format msgid "You need an unconditional ON UPDATE DO INSTEAD rule with a RETURNING clause." msgstr "" -#: rewrite/rewriteHandler.c:4260 +#: rewrite/rewriteHandler.c:4317 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "ურთიერთობაზე \"%s\" 'DELETE RETURNING'-ის განხორციელება შეუძლებელია" -#: rewrite/rewriteHandler.c:4262 +#: rewrite/rewriteHandler.c:4319 #, c-format msgid "You need an unconditional ON DELETE DO INSTEAD rule with a RETURNING clause." msgstr "" -#: rewrite/rewriteHandler.c:4280 +#: rewrite/rewriteHandler.c:4337 #, c-format msgid "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or UPDATE rules" msgstr "" -#: rewrite/rewriteHandler.c:4337 +#: rewrite/rewriteHandler.c:4394 #, c-format msgid "WITH cannot be used in a query that is rewritten by rules into multiple queries" msgstr "" -#: rewrite/rewriteManip.c:1083 +#: rewrite/rewriteManip.c:1084 #, c-format msgid "conditional utility statements are not implemented" msgstr "პირობითი სამსახურეობრივი გამოსახულებები განხორციელებული არაა" -#: rewrite/rewriteManip.c:1427 +#: rewrite/rewriteManip.c:1431 #, c-format msgid "WHERE CURRENT OF on a view is not implemented" msgstr "WHERE CURRENT OF ხედზე განხორციელებული არაა" -#: rewrite/rewriteManip.c:1762 +#: rewrite/rewriteManip.c:1767 #, 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 "" @@ -21930,117 +21818,117 @@ msgid "with a SEARCH or CYCLE clause, the recursive reference to WITH query \"%s\" must be at the top level of its right-hand SELECT" msgstr "" -#: scan.l:483 +#: scan.l:497 msgid "unterminated /* comment" msgstr "დაუსრულებელი /* კომენტარი" -#: scan.l:503 +#: scan.l:517 msgid "unterminated bit string literal" msgstr "გაწყვეტილი ბიტური სტრიქონი" -#: scan.l:517 +#: scan.l:531 msgid "unterminated hexadecimal string literal" msgstr "გაწყვეტილი თექვსმეტობითი სტრიქონი" -#: scan.l:567 +#: scan.l:581 #, c-format msgid "unsafe use of string constant with Unicode escapes" msgstr "" -#: scan.l:568 +#: scan.l:582 #, c-format msgid "String constants with Unicode escapes cannot be used when \"standard_conforming_strings\" is off." msgstr "" -#: scan.l:629 +#: scan.l:643 msgid "unhandled previous state in xqs" msgstr "დაუმუშავებელი წინა მდგომარეობა დამხურავი ბრჭყალის აღმოჩენისას" -#: scan.l:703 +#: scan.l:717 #, c-format msgid "Unicode escapes must be \\uXXXX or \\UXXXXXXXX." msgstr "უნიკოდის სპეცკოდების შესაძლო ვარიანტებია \\uXXXX და \\UXXXXXXXX." -#: scan.l:714 +#: scan.l:728 #, c-format msgid "unsafe use of \\' in a string literal" msgstr "სტრიქონში \\'-ის გამოყენება უსაფრთხო არაა" -#: scan.l:715 +#: scan.l:729 #, c-format msgid "Use '' to write quotes in strings. \\' is insecure in client-only encodings." msgstr "" -#: scan.l:787 +#: scan.l:801 msgid "unterminated dollar-quoted string" msgstr "$-ით დაწყებული სტრიქონ დაუმთავრებელია" -#: scan.l:804 scan.l:814 +#: scan.l:818 scan.l:828 msgid "zero-length delimited identifier" msgstr "გამყოფის ნულოვანი სიგრძის იდენტიფიკატორი" -#: scan.l:825 syncrep_scanner.l:101 +#: scan.l:839 syncrep_scanner.l:101 msgid "unterminated quoted identifier" msgstr "დაუსრულებელი იდენტიფიკატორი ბრჭყალებში" -#: scan.l:988 +#: scan.l:1002 msgid "operator too long" msgstr "ოპერატორი ძალიან გრძელია" -#: scan.l:1001 +#: scan.l:1015 msgid "trailing junk after parameter" msgstr "პარამეტრის შემდეგ მოყოლილი მონაცემები ნაგავია" -#: scan.l:1022 +#: scan.l:1036 msgid "invalid hexadecimal integer" msgstr "არასწორი თექვსმეტობითი მთელი რიცხვი" -#: scan.l:1026 +#: scan.l:1040 msgid "invalid octal integer" msgstr "არასწორი რვაობითი მთელი რიცხვი" -#: scan.l:1030 +#: scan.l:1044 msgid "invalid binary integer" msgstr "არასწორი ბინარული მთელი რიცხვი" #. translator: %s is typically the translation of "syntax error" -#: scan.l:1237 +#: scan.l:1239 #, c-format msgid "%s at end of input" msgstr "%s შეყვანის ბოლოს" #. translator: first %s is typically the translation of "syntax error" -#: scan.l:1245 +#: scan.l:1247 #, c-format msgid "%s at or near \"%s\"" msgstr "%s \"%s\"-სთან ან ახლოს" -#: scan.l:1437 +#: scan.l:1439 #, c-format msgid "nonstandard use of \\' in a string literal" msgstr "სტრიქონში \\' არასტანდარტულადაა გამოყენებული" -#: scan.l:1438 +#: scan.l:1440 #, c-format msgid "Use '' to write quotes in strings, or use the escape string syntax (E'...')." msgstr "" -#: scan.l:1447 +#: scan.l:1449 #, c-format msgid "nonstandard use of \\\\ in a string literal" msgstr "სტრიქონში \\\\ არასტანდარტულადაა გამოყენებული" -#: scan.l:1448 +#: scan.l:1450 #, c-format msgid "Use the escape string syntax for backslashes, e.g., E'\\\\'." msgstr "" -#: scan.l:1462 +#: scan.l:1464 #, c-format msgid "nonstandard use of escape in a string literal" msgstr "" -#: scan.l:1463 +#: scan.l:1465 #, c-format msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "" @@ -22160,7 +22048,7 @@ msgid "could not delete fileset \"%s\": %m" msgstr "ფაილების სეტის (\"%s\") წაშლის შეცდომა: %m" -#: storage/file/buffile.c:974 storage/smgr/md.c:336 storage/smgr/md.c:1192 +#: storage/file/buffile.c:974 storage/smgr/md.c:336 storage/smgr/md.c:1194 #, c-format msgid "could not truncate file \"%s\": %m" msgstr "ფაილის (%s) მოკვეთის შეცდომა: %m" @@ -22400,27 +22288,27 @@ msgid "requested DSM segment size does not match size of existing segment" msgstr "" -#: storage/ipc/procarray.c:488 storage/lmgr/proc.c:352 tcop/backend_startup.c:304 +#: storage/ipc/procarray.c:488 storage/lmgr/proc.c:357 tcop/backend_startup.c:304 #, c-format msgid "sorry, too many clients already" msgstr "უკაცრავად, უკვე მეტისმეტად ბევრი კლიენტია" -#: storage/ipc/procarray.c:3845 +#: storage/ipc/procarray.c:3857 #, c-format msgid "database \"%s\" is being used by prepared transactions" msgstr "მონაცემთა ბაზა \"%s\" მომზადებული ტრანზაქციების მიერ გამოიყენება" -#: storage/ipc/procarray.c:3881 storage/ipc/procarray.c:3889 storage/ipc/signalfuncs.c:235 storage/ipc/signalfuncs.c:242 +#: storage/ipc/procarray.c:3893 storage/ipc/procarray.c:3901 storage/ipc/signalfuncs.c:235 storage/ipc/signalfuncs.c:242 #, c-format msgid "permission denied to terminate process" msgstr "პროცესის შეწყვეტის წვდომა აკრძალულია" -#: storage/ipc/procarray.c:3882 storage/ipc/signalfuncs.c:236 +#: storage/ipc/procarray.c:3894 storage/ipc/signalfuncs.c:236 #, c-format msgid "Only roles with the %s attribute may terminate processes of roles with the %s attribute." msgstr "" -#: storage/ipc/procarray.c:3890 storage/ipc/signalfuncs.c:243 +#: storage/ipc/procarray.c:3902 storage/ipc/signalfuncs.c:243 #, c-format msgid "Only roles with privileges of the role whose process is being terminated or with privileges of the \"%s\" role may terminate this process." msgstr "" @@ -22440,7 +22328,7 @@ msgid "invalid message size %zu in shared memory queue" msgstr "გაზიარებული მეხსიერების რიგში არსებული შეტყობინების ზომა %zu არასწორია" -#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:962 storage/lmgr/lock.c:1000 storage/lmgr/lock.c:2803 storage/lmgr/lock.c:4188 storage/lmgr/lock.c:4253 storage/lmgr/lock.c:4603 storage/lmgr/predicate.c:2463 storage/lmgr/predicate.c:2478 storage/lmgr/predicate.c:3875 storage/lmgr/predicate.c:4922 utils/hash/dynahash.c:1095 +#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:984 storage/lmgr/lock.c:1022 storage/lmgr/lock.c:2835 storage/lmgr/lock.c:4220 storage/lmgr/lock.c:4285 storage/lmgr/lock.c:4635 storage/lmgr/predicate.c:2468 storage/lmgr/predicate.c:2483 storage/lmgr/predicate.c:3880 storage/lmgr/predicate.c:4927 utils/hash/dynahash.c:1095 #, c-format msgid "out of shared memory" msgstr "არასაკმარისი გაზიარებული მეხსიერება" @@ -22475,7 +22363,7 @@ msgid "PID %d is not a PostgreSQL backend process" msgstr "პროცესი PID-ით %d PostgreSQL-ის უკანაბოლოს პროცესს არ წარმოადგენს" -#: storage/ipc/signalfuncs.c:109 storage/lmgr/proc.c:1448 utils/adt/mcxtfuncs.c:182 +#: storage/ipc/signalfuncs.c:109 storage/lmgr/proc.c:1453 utils/adt/mcxtfuncs.c:182 #, c-format msgid "could not send signal to process %d: %m" msgstr "პროცესისთვის %d სიგნალის გაგზავნა შეუძლებელია: %m" @@ -22527,12 +22415,12 @@ msgid "recovery finished waiting after %ld.%03d ms: %s" msgstr "" -#: storage/ipc/standby.c:920 tcop/postgres.c:3169 +#: storage/ipc/standby.c:920 tcop/postgres.c:3196 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "გამოსახულების გაუქმება აღდგენასთან კონფლიქტის გამო" -#: storage/ipc/standby.c:921 tcop/postgres.c:2529 +#: storage/ipc/standby.c:921 tcop/postgres.c:2557 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "" @@ -22614,122 +22502,122 @@ msgid "See server log for query details." msgstr "მოთხოვნის დეტალებისთვის იხილეთ სერვერის ჟურნალი." -#: storage/lmgr/lmgr.c:858 +#: storage/lmgr/lmgr.c:848 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "კორტეჟის (%u,%u) განახლებისას ურთიერთობაში \"%s\"" -#: storage/lmgr/lmgr.c:861 +#: storage/lmgr/lmgr.c:851 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "კორტეჟის (%u,%u) წაშლისას ურთიერთობაში \"%s\"" -#: storage/lmgr/lmgr.c:864 +#: storage/lmgr/lmgr.c:854 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "კორტეჟის (%u,%u) დაბლოკვისას ურთიერთობაში \"%s\"" -#: storage/lmgr/lmgr.c:867 +#: storage/lmgr/lmgr.c:857 #, c-format msgid "while locking updated version (%u,%u) of tuple in relation \"%s\"" msgstr "კორტეჟის (%u,%u) განახლებული ვერსიის დაბლოკვისას ურთიერთობაში \"%s\"" -#: storage/lmgr/lmgr.c:870 +#: storage/lmgr/lmgr.c:860 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "" -#: storage/lmgr/lmgr.c:873 +#: storage/lmgr/lmgr.c:863 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "" -#: storage/lmgr/lmgr.c:876 +#: storage/lmgr/lmgr.c:866 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "" -#: storage/lmgr/lmgr.c:879 +#: storage/lmgr/lmgr.c:869 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "" -#: storage/lmgr/lmgr.c:1249 +#: storage/lmgr/lmgr.c:1239 #, c-format msgid "relation %u of database %u" msgstr "ურთიერთობა %u ბაზისთვის %u" -#: storage/lmgr/lmgr.c:1255 +#: storage/lmgr/lmgr.c:1245 #, c-format msgid "extension of relation %u of database %u" msgstr "ურთიერთობის %u გაფართოება ბაზისთვის %u" -#: storage/lmgr/lmgr.c:1261 +#: storage/lmgr/lmgr.c:1251 #, c-format msgid "pg_database.datfrozenxid of database %u" msgstr "pg_database.datfrozenxid ბაზისთვის %u" -#: storage/lmgr/lmgr.c:1266 +#: storage/lmgr/lmgr.c:1256 #, c-format msgid "page %u of relation %u of database %u" msgstr "გვერდი %u ურთიერთობისთვის %u ბაზისთვის %u" -#: storage/lmgr/lmgr.c:1273 +#: storage/lmgr/lmgr.c:1263 #, c-format msgid "tuple (%u,%u) of relation %u of database %u" msgstr "" -#: storage/lmgr/lmgr.c:1281 +#: storage/lmgr/lmgr.c:1271 #, c-format msgid "transaction %u" msgstr "ტრანზაქცია %u" -#: storage/lmgr/lmgr.c:1286 +#: storage/lmgr/lmgr.c:1276 #, c-format msgid "virtual transaction %d/%u" msgstr "ვირტუალური ტრანზაქცია %d/%u" -#: storage/lmgr/lmgr.c:1292 +#: storage/lmgr/lmgr.c:1282 #, c-format msgid "speculative token %u of transaction %u" msgstr "" -#: storage/lmgr/lmgr.c:1298 +#: storage/lmgr/lmgr.c:1288 #, c-format msgid "object %u of class %u of database %u" msgstr "" -#: storage/lmgr/lmgr.c:1306 +#: storage/lmgr/lmgr.c:1296 #, c-format msgid "user lock [%u,%u,%u]" msgstr "მომხმარებლის ბლოკი [%u,%u,%u]" -#: storage/lmgr/lmgr.c:1313 +#: storage/lmgr/lmgr.c:1303 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "რეკომენდებული ბლოკი [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:1321 +#: storage/lmgr/lmgr.c:1311 #, c-format msgid "remote transaction %u of subscription %u of database %u" msgstr "დაშორებული ტრანზაქცია %u გამოწერა %u ბაზისთვის %u" -#: storage/lmgr/lmgr.c:1328 +#: storage/lmgr/lmgr.c:1318 #, c-format msgid "unrecognized locktag type %d" msgstr "locktag-ის უცნობი ტიპი %d" -#: storage/lmgr/lock.c:790 +#: storage/lmgr/lock.c:812 #, c-format msgid "cannot acquire lock mode %s on database objects while recovery is in progress" msgstr "" -#: storage/lmgr/lock.c:792 +#: storage/lmgr/lock.c:814 #, c-format msgid "Only RowExclusiveLock or less can be acquired on database objects during recovery." msgstr "" -#: storage/lmgr/lock.c:3252 storage/lmgr/lock.c:3320 storage/lmgr/lock.c:3436 +#: storage/lmgr/lock.c:3284 storage/lmgr/lock.c:3352 storage/lmgr/lock.c:3468 #, c-format msgid "cannot PREPARE while holding both session-level and transaction-level locks on the same object" msgstr "" @@ -22749,67 +22637,67 @@ msgid "not enough elements in RWConflictPool to record a potential read/write conflict" msgstr "" -#: storage/lmgr/predicate.c:1681 +#: storage/lmgr/predicate.c:1686 #, c-format msgid "\"default_transaction_isolation\" is set to \"serializable\"." msgstr "\"default_transaction_isolation\"-ი \"serializable\"-ზეა დაყენებული." -#: storage/lmgr/predicate.c:1682 +#: storage/lmgr/predicate.c:1687 #, c-format msgid "You can use \"SET default_transaction_isolation = 'repeatable read'\" to change the default." msgstr "" -#: storage/lmgr/predicate.c:1733 +#: storage/lmgr/predicate.c:1738 #, c-format msgid "a snapshot-importing transaction must not be READ ONLY DEFERRABLE" msgstr "" -#: storage/lmgr/predicate.c:1812 utils/time/snapmgr.c:535 utils/time/snapmgr.c:541 +#: storage/lmgr/predicate.c:1817 utils/time/snapmgr.c:535 utils/time/snapmgr.c:541 #, c-format msgid "could not import the requested snapshot" msgstr "მოთხოვნილი სწრაფი ასლის შემოტანა შეუძლებელია" -#: storage/lmgr/predicate.c:1813 utils/time/snapmgr.c:542 +#: storage/lmgr/predicate.c:1818 utils/time/snapmgr.c:542 #, c-format msgid "The source process with PID %d is not running anymore." msgstr "საწყისი პროცესი PID-ით %d გაშვებული აღარაა." -#: storage/lmgr/predicate.c:3986 storage/lmgr/predicate.c:4022 storage/lmgr/predicate.c:4055 storage/lmgr/predicate.c:4063 storage/lmgr/predicate.c:4102 storage/lmgr/predicate.c:4332 storage/lmgr/predicate.c:4651 storage/lmgr/predicate.c:4663 storage/lmgr/predicate.c:4710 storage/lmgr/predicate.c:4746 +#: storage/lmgr/predicate.c:3991 storage/lmgr/predicate.c:4027 storage/lmgr/predicate.c:4060 storage/lmgr/predicate.c:4068 storage/lmgr/predicate.c:4107 storage/lmgr/predicate.c:4337 storage/lmgr/predicate.c:4656 storage/lmgr/predicate.c:4668 storage/lmgr/predicate.c:4715 storage/lmgr/predicate.c:4751 #, c-format msgid "could not serialize access due to read/write dependencies among transactions" msgstr "" -#: storage/lmgr/predicate.c:3988 storage/lmgr/predicate.c:4024 storage/lmgr/predicate.c:4057 storage/lmgr/predicate.c:4065 storage/lmgr/predicate.c:4104 storage/lmgr/predicate.c:4334 storage/lmgr/predicate.c:4653 storage/lmgr/predicate.c:4665 storage/lmgr/predicate.c:4712 storage/lmgr/predicate.c:4748 +#: storage/lmgr/predicate.c:3993 storage/lmgr/predicate.c:4029 storage/lmgr/predicate.c:4062 storage/lmgr/predicate.c:4070 storage/lmgr/predicate.c:4109 storage/lmgr/predicate.c:4339 storage/lmgr/predicate.c:4658 storage/lmgr/predicate.c:4670 storage/lmgr/predicate.c:4717 storage/lmgr/predicate.c:4753 #, c-format msgid "The transaction might succeed if retried." msgstr "ტრანზაქცია შეიძლება გაიტანოს, თუ გაიმეორებთ." -#: storage/lmgr/proc.c:348 +#: storage/lmgr/proc.c:353 #, c-format msgid "number of requested standby connections exceeds \"max_wal_senders\" (currently %d)" msgstr "" -#: storage/lmgr/proc.c:1541 +#: storage/lmgr/proc.c:1546 #, c-format msgid "process %d avoided deadlock for %s on %s by rearranging queue order after %ld.%03d ms" msgstr "" -#: storage/lmgr/proc.c:1556 +#: storage/lmgr/proc.c:1561 #, c-format msgid "process %d detected deadlock while waiting for %s on %s after %ld.%03d ms" msgstr "" -#: storage/lmgr/proc.c:1565 +#: storage/lmgr/proc.c:1570 #, c-format msgid "process %d still waiting for %s on %s after %ld.%03d ms" msgstr "" -#: storage/lmgr/proc.c:1572 +#: storage/lmgr/proc.c:1577 #, c-format msgid "process %d acquired %s on %s after %ld.%03d ms" msgstr "" -#: storage/lmgr/proc.c:1589 +#: storage/lmgr/proc.c:1594 #, c-format msgid "process %d failed to acquire %s on %s after %ld.%03d ms" msgstr "" @@ -22874,22 +22762,22 @@ msgid "could not write blocks %u..%u in file \"%s\": %m" msgstr "ბლოკის %u..%u ჩაწერის შეცდომა ფაილში \"%s\": %m" -#: storage/smgr/md.c:1163 +#: storage/smgr/md.c:1165 #, c-format msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" msgstr "" -#: storage/smgr/md.c:1218 +#: storage/smgr/md.c:1220 #, c-format msgid "could not truncate file \"%s\" to %u blocks: %m" msgstr "" -#: storage/smgr/md.c:1688 +#: storage/smgr/md.c:1700 #, c-format msgid "could not open file \"%s\" (target block %u): previous segment is only %u blocks" msgstr "" -#: storage/smgr/md.c:1702 +#: storage/smgr/md.c:1714 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "" @@ -23049,7 +22937,7 @@ msgid "fastpath function call: \"%s\" (OID %u)" msgstr "" -#: tcop/fastpath.c:313 tcop/postgres.c:1365 tcop/postgres.c:1601 tcop/postgres.c:2055 tcop/postgres.c:2305 +#: tcop/fastpath.c:313 tcop/postgres.c:1369 tcop/postgres.c:1605 tcop/postgres.c:2071 tcop/postgres.c:2333 #, c-format msgid "duration: %s ms" msgstr "ხანგრძლივობა: %s მწმ" @@ -23079,320 +22967,320 @@ msgid "incorrect binary data format in function argument %d" msgstr "" -#: tcop/postgres.c:463 tcop/postgres.c:4925 +#: tcop/postgres.c:467 tcop/postgres.c:5012 #, c-format msgid "invalid frontend message type %d" msgstr "არასწორი წინაბოლოს შეტყობინების ტიპი %d" -#: tcop/postgres.c:1072 +#: tcop/postgres.c:1076 #, c-format msgid "statement: %s" msgstr "ოპერატორი: %s" -#: tcop/postgres.c:1370 +#: tcop/postgres.c:1374 #, c-format msgid "duration: %s ms statement: %s" msgstr "ხანგრძლივობა: %s მწმ გამოსახულება: %s" -#: tcop/postgres.c:1476 +#: tcop/postgres.c:1480 #, c-format msgid "cannot insert multiple commands into a prepared statement" msgstr "" -#: tcop/postgres.c:1606 +#: tcop/postgres.c:1610 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "ხანგრძლივობა: %s მწმ %s-ის დამუშავება: %s" -#: tcop/postgres.c:1672 tcop/postgres.c:2625 +#: tcop/postgres.c:1677 tcop/postgres.c:2653 #, c-format msgid "unnamed prepared statement does not exist" msgstr "" -#: tcop/postgres.c:1713 +#: tcop/postgres.c:1729 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "" -#: tcop/postgres.c:1719 +#: tcop/postgres.c:1735 #, c-format msgid "bind message supplies %d parameters, but prepared statement \"%s\" requires %d" msgstr "" -#: tcop/postgres.c:1933 +#: tcop/postgres.c:1949 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "" -#: tcop/postgres.c:2060 +#: tcop/postgres.c:2076 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "ხანგრძლივობა: %s მწმ მიბმა %s%s%s: %s" -#: tcop/postgres.c:2114 tcop/postgres.c:2708 +#: tcop/postgres.c:2131 tcop/postgres.c:2735 #, c-format msgid "portal \"%s\" does not exist" msgstr "პორტალი \"%s\" არ არსებობს" -#: tcop/postgres.c:2185 +#: tcop/postgres.c:2213 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2187 tcop/postgres.c:2313 +#: tcop/postgres.c:2215 tcop/postgres.c:2341 msgid "execute fetch from" msgstr "" -#: tcop/postgres.c:2188 tcop/postgres.c:2314 +#: tcop/postgres.c:2216 tcop/postgres.c:2342 msgid "execute" msgstr "გაშვება" -#: tcop/postgres.c:2310 +#: tcop/postgres.c:2338 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "ხანგრძლივობა: %s მწმs %s %s%s%s: %s" -#: tcop/postgres.c:2458 +#: tcop/postgres.c:2486 #, c-format msgid "prepare: %s" msgstr "მომზადება: %s" -#: tcop/postgres.c:2483 +#: tcop/postgres.c:2511 #, c-format msgid "Parameters: %s" msgstr "პარამეტრები: %s" -#: tcop/postgres.c:2498 +#: tcop/postgres.c:2526 #, c-format msgid "Abort reason: recovery conflict" msgstr "გაუქმების მიზეზი: აღდგენის კონფლიქტი" -#: tcop/postgres.c:2514 +#: tcop/postgres.c:2542 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "" -#: tcop/postgres.c:2517 +#: tcop/postgres.c:2545 #, c-format msgid "User was holding a relation lock for too long." msgstr "" -#: tcop/postgres.c:2520 +#: tcop/postgres.c:2548 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "" -#: tcop/postgres.c:2523 +#: tcop/postgres.c:2551 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "" -#: tcop/postgres.c:2526 +#: tcop/postgres.c:2554 #, c-format msgid "User was using a logical replication slot that must be invalidated." msgstr "" -#: tcop/postgres.c:2532 +#: tcop/postgres.c:2560 #, c-format msgid "User was connected to a database that must be dropped." msgstr "" -#: tcop/postgres.c:2571 +#: tcop/postgres.c:2599 #, c-format msgid "portal \"%s\" parameter $%d = %s" msgstr "პორტალის \"%s\" პარამეტრი $%d = %s" -#: tcop/postgres.c:2574 +#: tcop/postgres.c:2602 #, c-format msgid "portal \"%s\" parameter $%d" msgstr "პორტალის \"%s\" პარამეტრი $%d" -#: tcop/postgres.c:2580 +#: tcop/postgres.c:2608 #, c-format msgid "unnamed portal parameter $%d = %s" msgstr "უსახელო პორტალის პარამეტრი $%d = %s" -#: tcop/postgres.c:2583 +#: tcop/postgres.c:2611 #, c-format msgid "unnamed portal parameter $%d" msgstr "უსახელო პორტალის პარამეტრი $%d" -#: tcop/postgres.c:2928 +#: tcop/postgres.c:2955 #, c-format msgid "terminating connection because of unexpected SIGQUIT signal" msgstr "" -#: tcop/postgres.c:2934 +#: tcop/postgres.c:2961 #, c-format msgid "terminating connection because of crash of another server process" msgstr "" -#: tcop/postgres.c:2935 +#: tcop/postgres.c:2962 #, c-format msgid "The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory." msgstr "" -#: tcop/postgres.c:2939 tcop/postgres.c:3192 +#: tcop/postgres.c:2966 tcop/postgres.c:3219 #, c-format msgid "In a moment you should be able to reconnect to the database and repeat your command." msgstr "" -#: tcop/postgres.c:2946 +#: tcop/postgres.c:2973 #, c-format msgid "terminating connection due to immediate shutdown command" msgstr "მიერთების შეწყვეტა დაუყოვნებლივი გამორთვის ბრძანების გამო" -#: tcop/postgres.c:3024 +#: tcop/postgres.c:3051 #, c-format msgid "floating-point exception" msgstr "წილადი რიცხვების ანგარიშის შეცდომა" -#: tcop/postgres.c:3025 +#: tcop/postgres.c:3052 #, c-format msgid "An invalid floating-point operation was signaled. This probably means an out-of-range result or an invalid operation, such as division by zero." msgstr "" -#: tcop/postgres.c:3190 +#: tcop/postgres.c:3217 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "მიერთების შეწყვეტა აღდგენასთან კონფლიქტის გამო" -#: tcop/postgres.c:3262 +#: tcop/postgres.c:3289 #, c-format msgid "canceling authentication due to timeout" msgstr "ავთენტიკაცია გაუქმდა მოლოდინის ვადის ამოწურვის გამო" -#: tcop/postgres.c:3266 +#: tcop/postgres.c:3293 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "ავტომომტვერსასრუტების პროცესის შეწყვეტა ადმინისტრატორის ბრძანების გამო" -#: tcop/postgres.c:3270 +#: tcop/postgres.c:3297 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "ლოგიკური რეპლიკაციის დამხმარე პროცესის შეწყვეტა ადმინისტრატორის ბრძანების გამო" -#: tcop/postgres.c:3290 +#: tcop/postgres.c:3317 #, c-format msgid "terminating connection due to administrator command" msgstr "მიერთების შეწყვეტა ადმინისტრატორის ბრძანების გამო" -#: tcop/postgres.c:3321 +#: tcop/postgres.c:3348 #, c-format msgid "connection to client lost" msgstr "კლიენტთან შეერთების შეცდომა" -#: tcop/postgres.c:3373 +#: tcop/postgres.c:3400 #, c-format msgid "canceling statement due to lock timeout" msgstr "გამოსახულება გაუქმდება ბლოკის მოლოდინის ვადის ამოწურვის გამო" -#: tcop/postgres.c:3380 +#: tcop/postgres.c:3407 #, c-format msgid "canceling statement due to statement timeout" msgstr "" -#: tcop/postgres.c:3387 +#: tcop/postgres.c:3414 #, c-format msgid "canceling autovacuum task" msgstr "ავტომომტვერსასრუტების ამოცანის გაუქმება" -#: tcop/postgres.c:3400 +#: tcop/postgres.c:3427 #, c-format msgid "canceling statement due to user request" msgstr "" -#: tcop/postgres.c:3421 +#: tcop/postgres.c:3448 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "" -#: tcop/postgres.c:3434 +#: tcop/postgres.c:3461 #, c-format msgid "terminating connection due to transaction timeout" msgstr "მიერთების შეწყვეტა ტრანზაქციის მოლოდინის ვადის ამოწურვის გამო" -#: tcop/postgres.c:3447 +#: tcop/postgres.c:3474 #, c-format msgid "terminating connection due to idle-session timeout" msgstr "" -#: tcop/postgres.c:3537 +#: tcop/postgres.c:3564 #, c-format msgid "stack depth limit exceeded" msgstr "გადაცილებულია სტეკის სიღრმის ლიმიტი" -#: tcop/postgres.c:3538 +#: tcop/postgres.c:3565 #, c-format msgid "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), after ensuring the platform's stack depth limit is adequate." msgstr "" -#: tcop/postgres.c:3585 +#: tcop/postgres.c:3612 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "\"max_stack_depth\" %ldკბ-ს არ უნდა ზცდებოდეს." -#: tcop/postgres.c:3587 +#: tcop/postgres.c:3614 #, c-format msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." msgstr "" -#: tcop/postgres.c:3610 +#: tcop/postgres.c:3637 #, c-format msgid "\"client_connection_check_interval\" must be set to 0 on this platform." msgstr "ამ პლატფორმაზე \"client_connection_check_interval\" 0 უნდა იყოს." -#: tcop/postgres.c:3631 +#: tcop/postgres.c:3658 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "პარამეტრის ჩართვა მაშინ, როცა \"log_statement_stats\" ჩართულია, შეუძლებელია." -#: tcop/postgres.c:3646 +#: tcop/postgres.c:3673 #, c-format msgid "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", \"log_planner_stats\", or \"log_executor_stats\" is true." msgstr "ვერ ჩართავთ \"log_statement_stats\"-ს, როცა \"when log_parser_stats\", \"log_planner_stats\", ან \"log_executor_stats\" ჭეშმარიტია." -#: tcop/postgres.c:4011 +#: tcop/postgres.c:4098 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "" -#: tcop/postgres.c:4012 tcop/postgres.c:4018 +#: tcop/postgres.c:4099 tcop/postgres.c:4105 #, c-format msgid "Try \"%s --help\" for more information." msgstr "მეტი ინფორმაციისთვის სცადეთ '%s --help'." -#: tcop/postgres.c:4016 +#: tcop/postgres.c:4103 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: არასწორი ბრძანების სტრიქონის არგუმენტი: %s" -#: tcop/postgres.c:4069 +#: tcop/postgres.c:4156 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: არც ბაზა, არც მომხმარებელი მითითებული არაა" -#: tcop/postgres.c:4822 +#: tcop/postgres.c:4909 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "არასწორი CLOSE შეტყობინების ქვეტიპი %d" -#: tcop/postgres.c:4859 +#: tcop/postgres.c:4946 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "არასწორი DESCRIBE შეტყობინების ქვეტიპი %d" -#: tcop/postgres.c:4946 +#: tcop/postgres.c:5033 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "" -#: tcop/postgres.c:4950 +#: tcop/postgres.c:5037 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "" -#: tcop/postgres.c:5130 +#: tcop/postgres.c:5217 #, c-format msgid "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s%s" msgstr "" @@ -23402,12 +23290,12 @@ msgid "bind message has %d result formats but query has %d columns" msgstr "" -#: tcop/pquery.c:944 tcop/pquery.c:1701 +#: tcop/pquery.c:942 tcop/pquery.c:1696 #, c-format msgid "cursor can only scan forward" msgstr "კურსორს მხოლოდ წინ სკანირება შეუძლია" -#: tcop/pquery.c:945 tcop/pquery.c:1702 +#: tcop/pquery.c:943 tcop/pquery.c:1697 #, c-format msgid "Declare it with SCROLL option to enable backward scan." msgstr "" @@ -23675,60 +23563,55 @@ #: tsearch/wparser_def.c:2674 #, c-format -msgid "MinWords should be less than MaxWords" -msgstr "MinWords MaxWords-ზე ნაკლები უნდა იყოს" +msgid "%s must be less than %s" +msgstr "%s უნდა იყოს %s-ზე ნაკლები" #: tsearch/wparser_def.c:2678 #, c-format -msgid "MinWords should be positive" -msgstr "MinWords დადებით უნდა იყოს" +msgid "%s must be positive" +msgstr "%s დადებითი უნდა იყოს" -#: tsearch/wparser_def.c:2682 +#: tsearch/wparser_def.c:2682 tsearch/wparser_def.c:2686 #, c-format -msgid "ShortWord should be >= 0" -msgstr "ShortWord >= 0 უნდა იყოს" - -#: tsearch/wparser_def.c:2686 -#, c-format -msgid "MaxFragments should be >= 0" -msgstr "MaxFragments >= 0 უნდა იყოს" +msgid "%s must be >= 0" +msgstr "" #: utils/activity/pgstat.c:435 #, c-format msgid "could not unlink permanent statistics file \"%s\": %m" msgstr "" -#: utils/activity/pgstat.c:1252 +#: utils/activity/pgstat.c:1255 #, c-format msgid "invalid statistics kind: \"%s\"" msgstr "სტატისტიკის არასწორი ტიპი: \"%s\"" -#: utils/activity/pgstat.c:1332 +#: utils/activity/pgstat.c:1335 #, c-format msgid "could not open temporary statistics file \"%s\": %m" msgstr "სტატისტიკის დროებითი ფაილის (\"%s\") გახსნა შეუძლებელია: %m" -#: utils/activity/pgstat.c:1444 +#: utils/activity/pgstat.c:1455 #, c-format msgid "could not write temporary statistics file \"%s\": %m" msgstr "სტატისტიკის დროებითი ფაილში (\"%s\") ჩაწერა შეუძლებელია: %m" -#: utils/activity/pgstat.c:1453 +#: utils/activity/pgstat.c:1464 #, c-format msgid "could not close temporary statistics file \"%s\": %m" msgstr "სტატისტიკის დროებითი ფაილის (\"%s\") დახურვა შეუძლებელია: %m" -#: utils/activity/pgstat.c:1461 +#: utils/activity/pgstat.c:1472 #, c-format msgid "could not rename temporary statistics file \"%s\" to \"%s\": %m" msgstr "სტატისტიკის დროებითი ფაილის \"%s\"-დან \"%s\" -მდე სახელის გადარქმევა შეუძლებელია: %m" -#: utils/activity/pgstat.c:1510 +#: utils/activity/pgstat.c:1521 #, c-format msgid "could not open statistics file \"%s\": %m" msgstr "სტატისტიკის ფაილის (\"%s\") გახსნა შეუძლებელია: %m" -#: utils/activity/pgstat.c:1672 +#: utils/activity/pgstat.c:1683 #, c-format msgid "corrupted statistics file \"%s\"" msgstr "სტატისტიკის დაზიანებული ფაილი \"%s\"" @@ -23743,10 +23626,15 @@ msgid "resetting existing statistics for kind %s, db=%u, oid=%u" msgstr "" -#: utils/activity/wait_event.c:210 +#: utils/activity/wait_event.c:207 utils/activity/wait_event.c:232 +#, c-format +msgid "wait event \"%s\" already exists in type \"%s\"" +msgstr "მოცდის მოვლენა \"%s\" უკვე არსებობს ტიპში \"%s\"" + +#: utils/activity/wait_event.c:246 #, c-format -msgid "too many wait events for extensions" -msgstr "მეტისმეტად ბევრი მოცდის მოვლენა გაფართოებებისთვის" +msgid "too many custom wait events" +msgstr "მეტისმეტად ბევრი მორგებული მოცდის მოვლენა" #: utils/adt/acl.c:183 utils/adt/name.c:93 #, c-format @@ -23818,32 +23706,32 @@ msgid "extra garbage at the end of the ACL specification" msgstr "" -#: utils/adt/acl.c:1257 +#: utils/adt/acl.c:1263 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "" -#: utils/adt/acl.c:1573 +#: utils/adt/acl.c:1579 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert მხარდაჭერილი აღარაა" -#: utils/adt/acl.c:1583 +#: utils/adt/acl.c:1589 #, c-format msgid "aclremove is no longer supported" msgstr "aclremove მხარდაჭერილი აღარაა" -#: utils/adt/acl.c:1703 +#: utils/adt/acl.c:1709 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "პრივილეგიის უცნობი ტიპი \"%s\"" -#: utils/adt/acl.c:3544 utils/adt/regproc.c:100 utils/adt/regproc.c:265 +#: utils/adt/acl.c:3550 utils/adt/regproc.c:100 utils/adt/regproc.c:265 #, c-format msgid "function \"%s\" does not exist" msgstr "ფუნქცია არ არსებობს: \"%s\"" -#: utils/adt/acl.c:5190 +#: utils/adt/acl.c:5196 #, c-format msgid "must be able to SET ROLE \"%s\"" msgstr "უნდა შეეძლოს SET ROLE \"%s\"" @@ -23859,7 +23747,7 @@ msgstr "შემოტანის მონაცემების ტიპი მასივი არაა" #: utils/adt/array_userfuncs.c:151 utils/adt/array_userfuncs.c:203 utils/adt/float.c:1222 utils/adt/float.c:1296 utils/adt/float.c:4022 utils/adt/float.c:4060 utils/adt/int.c:778 utils/adt/int.c:800 utils/adt/int.c:814 utils/adt/int.c:828 utils/adt/int.c:859 utils/adt/int.c:880 utils/adt/int.c:997 utils/adt/int.c:1011 utils/adt/int.c:1025 utils/adt/int.c:1058 utils/adt/int.c:1072 utils/adt/int.c:1086 utils/adt/int.c:1117 utils/adt/int.c:1199 utils/adt/int.c:1263 -#: utils/adt/int.c:1331 utils/adt/int.c:1337 utils/adt/int8.c:1256 utils/adt/numeric.c:1902 utils/adt/numeric.c:4439 utils/adt/rangetypes.c:1488 utils/adt/rangetypes.c:1501 utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1135 utils/adt/varlena.c:3137 +#: utils/adt/int.c:1331 utils/adt/int.c:1337 utils/adt/int8.c:1256 utils/adt/numeric.c:1917 utils/adt/numeric.c:4454 utils/adt/rangetypes.c:1488 utils/adt/rangetypes.c:1501 utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1135 utils/adt/varlena.c:3137 #, c-format msgid "integer out of range" msgstr "მთელი მნიშვნელობა დიაპაზონს გარეთაა" @@ -23894,7 +23782,7 @@ msgid "Arrays with differing dimensions are not compatible for concatenation." msgstr "" -#: utils/adt/array_userfuncs.c:975 utils/adt/array_userfuncs.c:983 utils/adt/arrayfuncs.c:5609 utils/adt/arrayfuncs.c:5615 +#: utils/adt/array_userfuncs.c:975 utils/adt/array_userfuncs.c:983 utils/adt/arrayfuncs.c:5616 utils/adt/arrayfuncs.c:5622 #, c-format msgid "cannot accumulate arrays of different dimensionality" msgstr "სხვადასხვა განსაზღვრების მქონე მასივების შეგროვება შეუძლებელია" @@ -23954,7 +23842,7 @@ msgid "Missing array dimension value." msgstr "აკლია მასივის განზომილების მნიშვნელობა." -#: utils/adt/arrayfuncs.c:481 utils/adt/arrayfuncs.c:2933 utils/adt/arrayfuncs.c:2978 utils/adt/arrayfuncs.c:2993 +#: utils/adt/arrayfuncs.c:481 utils/adt/arrayfuncs.c:2940 utils/adt/arrayfuncs.c:2985 utils/adt/arrayfuncs.c:3000 #, c-format msgid "upper bound cannot be less than lower bound" msgstr "" @@ -23984,7 +23872,7 @@ msgid "Specified array dimensions do not match array contents." msgstr "მითითებული მასივის ზომები მასივის შემცველობას არ ემთხვევა." -#: utils/adt/arrayfuncs.c:783 utils/adt/jsonfuncs.c:2597 +#: utils/adt/arrayfuncs.c:783 utils/adt/jsonfuncs.c:2598 #, c-format msgid "Multidimensional arrays must have sub-arrays with matching dimensions." msgstr "მრავალგანზომილებიან მასივებს უნდა ჰქონდეთ ქვე-მასივები იგივე ზომებით." @@ -23999,7 +23887,7 @@ msgid "Unexpected end of input." msgstr "შეყვანის მოულოდნელი დასასრული." -#: utils/adt/arrayfuncs.c:1301 utils/adt/arrayfuncs.c:3492 utils/adt/arrayfuncs.c:6099 +#: utils/adt/arrayfuncs.c:1301 utils/adt/arrayfuncs.c:3499 utils/adt/arrayfuncs.c:6106 #, c-format msgid "invalid number of dimensions: %d" msgstr "განზომილებების არასწორი რაოდენობა: %d" @@ -24034,12 +23922,12 @@ msgid "slices of fixed-length arrays not implemented" msgstr "" -#: utils/adt/arrayfuncs.c:2245 utils/adt/arrayfuncs.c:2267 utils/adt/arrayfuncs.c:2316 utils/adt/arrayfuncs.c:2570 utils/adt/arrayfuncs.c:2908 utils/adt/arrayfuncs.c:6085 utils/adt/arrayfuncs.c:6111 utils/adt/arrayfuncs.c:6122 utils/adt/json.c:1419 utils/adt/json.c:1491 utils/adt/jsonb.c:1317 utils/adt/jsonb.c:1401 utils/adt/jsonfuncs.c:4688 utils/adt/jsonfuncs.c:4841 utils/adt/jsonfuncs.c:4952 utils/adt/jsonfuncs.c:5000 +#: utils/adt/arrayfuncs.c:2245 utils/adt/arrayfuncs.c:2267 utils/adt/arrayfuncs.c:2316 utils/adt/arrayfuncs.c:2570 utils/adt/arrayfuncs.c:2915 utils/adt/arrayfuncs.c:6092 utils/adt/arrayfuncs.c:6118 utils/adt/arrayfuncs.c:6129 utils/adt/json.c:1433 utils/adt/json.c:1505 utils/adt/jsonb.c:1317 utils/adt/jsonb.c:1401 utils/adt/jsonfuncs.c:4710 utils/adt/jsonfuncs.c:4863 utils/adt/jsonfuncs.c:4974 utils/adt/jsonfuncs.c:5022 #, c-format msgid "wrong number of array subscripts" msgstr "მასივის ქვესკრიპტების არასწორი რაოდენობა" -#: utils/adt/arrayfuncs.c:2250 utils/adt/arrayfuncs.c:2374 utils/adt/arrayfuncs.c:2653 utils/adt/arrayfuncs.c:2983 +#: utils/adt/arrayfuncs.c:2250 utils/adt/arrayfuncs.c:2374 utils/adt/arrayfuncs.c:2653 utils/adt/arrayfuncs.c:2990 #, c-format msgid "array subscript out of range" msgstr "მასივის ინდექსი დიაპაზონს გარეთაა" @@ -24064,82 +23952,82 @@ msgid "When assigning to a slice of an empty array value, slice boundaries must be fully specified." msgstr "" -#: utils/adt/arrayfuncs.c:2898 utils/adt/arrayfuncs.c:3010 +#: utils/adt/arrayfuncs.c:2905 utils/adt/arrayfuncs.c:3017 #, c-format msgid "source array too small" msgstr "საწყისი მასივი ძალიან პატარაა" -#: utils/adt/arrayfuncs.c:3650 +#: utils/adt/arrayfuncs.c:3657 #, c-format msgid "null array element not allowed in this context" msgstr "ნულოვანი მასივის ელემენტი ამ კონტექსტში დაშვებული არაა" -#: utils/adt/arrayfuncs.c:3821 utils/adt/arrayfuncs.c:3992 utils/adt/arrayfuncs.c:4383 +#: utils/adt/arrayfuncs.c:3828 utils/adt/arrayfuncs.c:3999 utils/adt/arrayfuncs.c:4390 #, c-format msgid "cannot compare arrays of different element types" msgstr "განსხვავებული ელემენტის ტიპების მქონე მასივების შედარება შეუძლებელია" -#: utils/adt/arrayfuncs.c:4170 utils/adt/multirangetypes.c:2805 utils/adt/multirangetypes.c:2877 utils/adt/rangetypes.c:1361 utils/adt/rangetypes.c:1425 utils/adt/rowtypes.c:1875 +#: utils/adt/arrayfuncs.c:4177 utils/adt/multirangetypes.c:2805 utils/adt/multirangetypes.c:2877 utils/adt/rangetypes.c:1361 utils/adt/rangetypes.c:1425 utils/adt/rowtypes.c:1875 #, c-format msgid "could not identify a hash function for type %s" msgstr "ტიპისთვის \"%s\" ჰეშის ფუნქცია ვერ ვიპოვე" -#: utils/adt/arrayfuncs.c:4298 utils/adt/rowtypes.c:1996 +#: utils/adt/arrayfuncs.c:4305 utils/adt/rowtypes.c:1996 #, c-format msgid "could not identify an extended hash function for type %s" msgstr "ტიპისთვის \"%s\" გაფართოებული ჰეშის ფუნქცია ვერ ვიპოვე" -#: utils/adt/arrayfuncs.c:5499 +#: utils/adt/arrayfuncs.c:5506 #, c-format msgid "data type %s is not an array type" msgstr "მონაცემის ტიპი %s მასივის ტიპი არაა" -#: utils/adt/arrayfuncs.c:5554 +#: utils/adt/arrayfuncs.c:5561 #, c-format msgid "cannot accumulate null arrays" msgstr "ნულოვანი მასივების დაგროვება შეუძლებელია" -#: utils/adt/arrayfuncs.c:5582 +#: utils/adt/arrayfuncs.c:5589 #, c-format msgid "cannot accumulate empty arrays" msgstr "ცარიელი მასივების დაგროვება შეუძლებელია" -#: utils/adt/arrayfuncs.c:5983 utils/adt/arrayfuncs.c:6023 +#: utils/adt/arrayfuncs.c:5990 utils/adt/arrayfuncs.c:6030 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "" -#: utils/adt/arrayfuncs.c:6086 utils/adt/arrayfuncs.c:6112 +#: utils/adt/arrayfuncs.c:6093 utils/adt/arrayfuncs.c:6119 #, c-format msgid "Dimension array must be one dimensional." msgstr "განზომილების მასივი ერთგანზომილებიანი უნდა იყოს." -#: utils/adt/arrayfuncs.c:6091 utils/adt/arrayfuncs.c:6117 +#: utils/adt/arrayfuncs.c:6098 utils/adt/arrayfuncs.c:6124 #, c-format msgid "dimension values cannot be null" msgstr "განზომილების მნიშვნელობები ნულოვანი ვერ იქნება" -#: utils/adt/arrayfuncs.c:6123 +#: utils/adt/arrayfuncs.c:6130 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "" -#: utils/adt/arrayfuncs.c:6404 +#: utils/adt/arrayfuncs.c:6411 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "" -#: utils/adt/arrayfuncs.c:6681 +#: utils/adt/arrayfuncs.c:6688 #, c-format msgid "thresholds must be one-dimensional array" msgstr "" -#: utils/adt/arrayfuncs.c:6686 +#: utils/adt/arrayfuncs.c:6693 #, c-format msgid "thresholds array must not contain NULLs" msgstr "" -#: utils/adt/arrayfuncs.c:6919 +#: utils/adt/arrayfuncs.c:6926 #, c-format msgid "number of elements to trim must be between 0 and %d" msgstr "" @@ -24180,24 +24068,29 @@ msgstr "" #. translator: first %s is inet or cidr -#: utils/adt/bool.c:149 utils/adt/cash.c:277 utils/adt/datetime.c:4142 utils/adt/float.c:200 utils/adt/float.c:287 utils/adt/float.c:301 utils/adt/float.c:406 utils/adt/float.c:489 utils/adt/float.c:503 utils/adt/geo_ops.c:250 utils/adt/geo_ops.c:335 utils/adt/geo_ops.c:974 utils/adt/geo_ops.c:1417 utils/adt/geo_ops.c:1454 utils/adt/geo_ops.c:1462 utils/adt/geo_ops.c:3428 utils/adt/geo_ops.c:4650 utils/adt/geo_ops.c:4665 utils/adt/geo_ops.c:4672 utils/adt/int.c:174 -#: utils/adt/int.c:186 utils/adt/jsonpath.c:185 utils/adt/mac.c:94 utils/adt/mac8.c:226 utils/adt/network.c:99 utils/adt/numeric.c:796 utils/adt/numeric.c:7206 utils/adt/numeric.c:7409 utils/adt/numeric.c:8356 utils/adt/numutils.c:356 utils/adt/numutils.c:618 utils/adt/numutils.c:880 utils/adt/numutils.c:919 utils/adt/numutils.c:941 utils/adt/numutils.c:1005 utils/adt/numutils.c:1027 utils/adt/pg_lsn.c:73 utils/adt/tid.c:72 utils/adt/tid.c:80 utils/adt/tid.c:94 -#: utils/adt/tid.c:103 utils/adt/timestamp.c:510 utils/adt/uuid.c:140 utils/adt/xid8funcs.c:360 +#: utils/adt/bool.c:149 utils/adt/cash.c:354 utils/adt/datetime.c:4142 utils/adt/float.c:200 utils/adt/float.c:287 utils/adt/float.c:301 utils/adt/float.c:406 utils/adt/float.c:489 utils/adt/float.c:503 utils/adt/geo_ops.c:250 utils/adt/geo_ops.c:335 utils/adt/geo_ops.c:974 utils/adt/geo_ops.c:1417 utils/adt/geo_ops.c:1454 utils/adt/geo_ops.c:1462 utils/adt/geo_ops.c:3428 utils/adt/geo_ops.c:4650 utils/adt/geo_ops.c:4665 utils/adt/geo_ops.c:4672 utils/adt/int.c:174 +#: utils/adt/int.c:186 utils/adt/jsonpath.c:185 utils/adt/mac.c:94 utils/adt/mac8.c:226 utils/adt/network.c:99 utils/adt/numeric.c:803 utils/adt/numeric.c:7221 utils/adt/numeric.c:7424 utils/adt/numeric.c:8371 utils/adt/numutils.c:356 utils/adt/numutils.c:618 utils/adt/numutils.c:880 utils/adt/numutils.c:919 utils/adt/numutils.c:941 utils/adt/numutils.c:1005 utils/adt/numutils.c:1027 utils/adt/pg_lsn.c:73 utils/adt/tid.c:72 utils/adt/tid.c:80 utils/adt/tid.c:94 +#: utils/adt/tid.c:103 utils/adt/timestamp.c:510 utils/adt/uuid.c:140 utils/adt/xid8funcs.c:323 #, c-format msgid "invalid input syntax for type %s: \"%s\"" msgstr "არასწორი შეყვანის სინტაქსი ტიპისთვის %s: \"%s\"" -#: utils/adt/cash.c:215 utils/adt/cash.c:240 utils/adt/cash.c:250 utils/adt/cash.c:290 utils/adt/int.c:180 utils/adt/numutils.c:350 utils/adt/numutils.c:612 utils/adt/numutils.c:874 utils/adt/numutils.c:925 utils/adt/numutils.c:964 utils/adt/numutils.c:1011 +#: utils/adt/cash.c:98 utils/adt/cash.c:111 utils/adt/cash.c:124 utils/adt/cash.c:137 utils/adt/cash.c:150 #, c-format -msgid "value \"%s\" is out of range for type %s" -msgstr "" +msgid "money out of range" +msgstr "ფული შუალედს გარეთაა" -#: utils/adt/cash.c:652 utils/adt/cash.c:702 utils/adt/cash.c:753 utils/adt/cash.c:802 utils/adt/cash.c:854 utils/adt/cash.c:904 utils/adt/float.c:99 utils/adt/int.c:843 utils/adt/int.c:959 utils/adt/int.c:1039 utils/adt/int.c:1101 utils/adt/int.c:1139 utils/adt/int.c:1167 utils/adt/int8.c:514 utils/adt/int8.c:572 utils/adt/int8.c:942 utils/adt/int8.c:1022 utils/adt/int8.c:1084 utils/adt/int8.c:1164 utils/adt/numeric.c:3176 utils/adt/numeric.c:3199 -#: utils/adt/numeric.c:3284 utils/adt/numeric.c:3302 utils/adt/numeric.c:3398 utils/adt/numeric.c:8905 utils/adt/numeric.c:9218 utils/adt/numeric.c:9566 utils/adt/numeric.c:9682 utils/adt/numeric.c:11192 utils/adt/timestamp.c:3713 +#: utils/adt/cash.c:161 utils/adt/cash.c:723 utils/adt/float.c:99 utils/adt/int.c:843 utils/adt/int.c:959 utils/adt/int.c:1039 utils/adt/int.c:1101 utils/adt/int.c:1139 utils/adt/int.c:1167 utils/adt/int8.c:514 utils/adt/int8.c:572 utils/adt/int8.c:942 utils/adt/int8.c:1022 utils/adt/int8.c:1084 utils/adt/int8.c:1164 utils/adt/numeric.c:3191 utils/adt/numeric.c:3214 utils/adt/numeric.c:3299 utils/adt/numeric.c:3317 utils/adt/numeric.c:3413 utils/adt/numeric.c:8920 +#: utils/adt/numeric.c:9233 utils/adt/numeric.c:9581 utils/adt/numeric.c:9697 utils/adt/numeric.c:11208 utils/adt/timestamp.c:3713 #, c-format msgid "division by zero" msgstr "ნულზე გაყოფა" +#: utils/adt/cash.c:292 utils/adt/cash.c:317 utils/adt/cash.c:327 utils/adt/cash.c:367 utils/adt/int.c:180 utils/adt/numutils.c:350 utils/adt/numutils.c:612 utils/adt/numutils.c:874 utils/adt/numutils.c:925 utils/adt/numutils.c:964 utils/adt/numutils.c:1011 +#, c-format +msgid "value \"%s\" is out of range for type %s" +msgstr "" + #: utils/adt/char.c:197 #, c-format msgid "\"char\" out of range" @@ -24228,7 +24121,7 @@ msgid "date out of range: \"%s\"" msgstr "თარიღი დიაპაზონს გარეთაა: \"%s\"" -#: utils/adt/date.c:222 utils/adt/date.c:520 utils/adt/date.c:544 utils/adt/rangetypes.c:1584 utils/adt/rangetypes.c:1599 utils/adt/xml.c:2489 +#: utils/adt/date.c:222 utils/adt/date.c:520 utils/adt/date.c:544 utils/adt/rangetypes.c:1584 utils/adt/rangetypes.c:1599 utils/adt/xml.c:2552 #, c-format msgid "date out of range" msgstr "თარიღი დიაპაზონს გარეთაა" @@ -24266,7 +24159,7 @@ #: utils/adt/date.c:1314 utils/adt/date.c:1360 utils/adt/date.c:1919 utils/adt/date.c:1950 utils/adt/date.c:1979 utils/adt/date.c:2869 utils/adt/date.c:3101 utils/adt/datetime.c:422 utils/adt/datetime.c:1807 utils/adt/formatting.c:4269 utils/adt/formatting.c:4305 utils/adt/formatting.c:4392 utils/adt/formatting.c:4514 utils/adt/json.c:366 utils/adt/json.c:405 utils/adt/timestamp.c:248 utils/adt/timestamp.c:280 utils/adt/timestamp.c:716 utils/adt/timestamp.c:725 #: utils/adt/timestamp.c:803 utils/adt/timestamp.c:836 utils/adt/timestamp.c:3066 utils/adt/timestamp.c:3075 utils/adt/timestamp.c:3092 utils/adt/timestamp.c:3097 utils/adt/timestamp.c:3116 utils/adt/timestamp.c:3129 utils/adt/timestamp.c:3140 utils/adt/timestamp.c:3146 utils/adt/timestamp.c:3152 utils/adt/timestamp.c:3157 utils/adt/timestamp.c:3210 utils/adt/timestamp.c:3219 utils/adt/timestamp.c:3240 utils/adt/timestamp.c:3245 utils/adt/timestamp.c:3266 #: utils/adt/timestamp.c:3279 utils/adt/timestamp.c:3293 utils/adt/timestamp.c:3301 utils/adt/timestamp.c:3307 utils/adt/timestamp.c:3312 utils/adt/timestamp.c:4380 utils/adt/timestamp.c:4532 utils/adt/timestamp.c:4608 utils/adt/timestamp.c:4644 utils/adt/timestamp.c:4734 utils/adt/timestamp.c:4813 utils/adt/timestamp.c:4849 utils/adt/timestamp.c:4952 utils/adt/timestamp.c:5407 utils/adt/timestamp.c:5681 utils/adt/timestamp.c:6199 utils/adt/timestamp.c:6209 -#: utils/adt/timestamp.c:6214 utils/adt/timestamp.c:6220 utils/adt/timestamp.c:6260 utils/adt/timestamp.c:6347 utils/adt/timestamp.c:6388 utils/adt/timestamp.c:6392 utils/adt/timestamp.c:6446 utils/adt/timestamp.c:6450 utils/adt/timestamp.c:6456 utils/adt/timestamp.c:6497 utils/adt/xml.c:2511 utils/adt/xml.c:2518 utils/adt/xml.c:2538 utils/adt/xml.c:2545 +#: utils/adt/timestamp.c:6214 utils/adt/timestamp.c:6220 utils/adt/timestamp.c:6260 utils/adt/timestamp.c:6347 utils/adt/timestamp.c:6388 utils/adt/timestamp.c:6392 utils/adt/timestamp.c:6446 utils/adt/timestamp.c:6450 utils/adt/timestamp.c:6456 utils/adt/timestamp.c:6497 utils/adt/xml.c:2574 utils/adt/xml.c:2581 utils/adt/xml.c:2601 utils/adt/xml.c:2608 #, c-format msgid "timestamp out of range" msgstr "დროის შტამპი დიაპაზონს გარეთაა" @@ -24296,7 +24189,7 @@ msgid "cannot subtract infinite interval from time" msgstr "დროისთვის უსასრულო ინტერვალების გამოკლება შეუძლებელია" -#: utils/adt/date.c:2115 utils/adt/date.c:2667 utils/adt/float.c:1036 utils/adt/float.c:1112 utils/adt/int.c:635 utils/adt/int.c:682 utils/adt/int.c:717 utils/adt/int8.c:413 utils/adt/numeric.c:2580 utils/adt/timestamp.c:3810 utils/adt/timestamp.c:3847 utils/adt/timestamp.c:3888 +#: utils/adt/date.c:2115 utils/adt/date.c:2667 utils/adt/float.c:1036 utils/adt/float.c:1112 utils/adt/int.c:635 utils/adt/int.c:682 utils/adt/int.c:717 utils/adt/int8.c:413 utils/adt/numeric.c:2595 utils/adt/timestamp.c:3810 utils/adt/timestamp.c:3847 utils/adt/timestamp.c:3888 #, c-format msgid "invalid preceding or following size in window function" msgstr "" @@ -24351,17 +24244,17 @@ msgid "invalid Datum pointer" msgstr "არასწორი მაჩვენებელი: Datum" -#: utils/adt/dbsize.c:760 utils/adt/dbsize.c:836 +#: utils/adt/dbsize.c:764 utils/adt/dbsize.c:840 #, c-format msgid "invalid size: \"%s\"" msgstr "არასწორი ზომა: %s" -#: utils/adt/dbsize.c:837 +#: utils/adt/dbsize.c:841 #, c-format msgid "Invalid size unit: \"%s\"." msgstr "ერთეულის არასწორი ზომა: \"%s\"." -#: utils/adt/dbsize.c:838 +#: utils/adt/dbsize.c:842 #, c-format msgid "Valid units are \"bytes\", \"B\", \"kB\", \"MB\", \"GB\", \"TB\", and \"PB\"." msgstr "პარამეტრის სწორი ერთეულებია \"ბ\", \"კბ\", \"მბ\", \"გბ\", \"ტბ\" და \"პბ\"." @@ -24466,32 +24359,32 @@ msgid "\"%s\" is out of range for type double precision" msgstr "%s დიაპაზონს გარეთაა ტიპისთვის: double precision" -#: utils/adt/float.c:1247 utils/adt/float.c:1321 utils/adt/int.c:355 utils/adt/int.c:893 utils/adt/int.c:915 utils/adt/int.c:929 utils/adt/int.c:943 utils/adt/int.c:975 utils/adt/int.c:1213 utils/adt/int8.c:1277 utils/adt/numeric.c:4578 utils/adt/numeric.c:4583 +#: utils/adt/float.c:1247 utils/adt/float.c:1321 utils/adt/int.c:355 utils/adt/int.c:893 utils/adt/int.c:915 utils/adt/int.c:929 utils/adt/int.c:943 utils/adt/int.c:975 utils/adt/int.c:1213 utils/adt/int8.c:1277 utils/adt/numeric.c:4593 utils/adt/numeric.c:4598 #, c-format msgid "smallint out of range" msgstr "smallint დიაპაზონს გარეთაა" -#: utils/adt/float.c:1447 utils/adt/numeric.c:3694 utils/adt/numeric.c:10097 +#: utils/adt/float.c:1447 utils/adt/numeric.c:3709 utils/adt/numeric.c:10112 #, c-format msgid "cannot take square root of a negative number" msgstr "უარყოფითი რიცხვიდან ფესვის ამოღება შეუძლებელია" -#: utils/adt/float.c:1515 utils/adt/numeric.c:3982 utils/adt/numeric.c:4094 +#: utils/adt/float.c:1515 utils/adt/numeric.c:3997 utils/adt/numeric.c:4109 #, c-format msgid "zero raised to a negative power is undefined" msgstr "ნული უარყოფით ხარისხში განუსაზღვრელია" -#: utils/adt/float.c:1519 utils/adt/numeric.c:3986 utils/adt/numeric.c:10988 +#: utils/adt/float.c:1519 utils/adt/numeric.c:4001 utils/adt/numeric.c:11003 #, c-format msgid "a negative number raised to a non-integer power yields a complex result" msgstr "" -#: utils/adt/float.c:1695 utils/adt/float.c:1728 utils/adt/numeric.c:3894 utils/adt/numeric.c:10768 +#: utils/adt/float.c:1695 utils/adt/float.c:1728 utils/adt/numeric.c:3909 utils/adt/numeric.c:10783 #, c-format msgid "cannot take logarithm of zero" msgstr "ნულის ლოგარითმის აღება შეუძლებელია" -#: utils/adt/float.c:1699 utils/adt/float.c:1732 utils/adt/numeric.c:3832 utils/adt/numeric.c:3889 utils/adt/numeric.c:10772 +#: utils/adt/float.c:1699 utils/adt/float.c:1732 utils/adt/numeric.c:3847 utils/adt/numeric.c:3904 utils/adt/numeric.c:10787 #, c-format msgid "cannot take logarithm of a negative number" msgstr "უარყოფითი რიცხვის ლოგარითმის აღება შეუძლებელია" @@ -24501,22 +24394,22 @@ msgid "input is out of range" msgstr "შეყვანილი მნიშვნელობა დიაპაზონის გარეთაა" -#: utils/adt/float.c:4000 utils/adt/numeric.c:1842 +#: utils/adt/float.c:4000 utils/adt/numeric.c:1857 #, c-format msgid "count must be greater than zero" msgstr "რაოდენობა ნულზე მეტი უნდა იყოს" -#: utils/adt/float.c:4005 utils/adt/numeric.c:1853 +#: utils/adt/float.c:4005 utils/adt/numeric.c:1868 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "" -#: utils/adt/float.c:4011 utils/adt/numeric.c:1858 +#: utils/adt/float.c:4011 utils/adt/numeric.c:1873 #, c-format msgid "lower and upper bounds must be finite" msgstr "ქვედა და ზედა ზღვრები სასრული უნდა ყოს" -#: utils/adt/float.c:4077 utils/adt/numeric.c:1872 +#: utils/adt/float.c:4077 utils/adt/numeric.c:1887 #, c-format msgid "lower bound cannot equal upper bound" msgstr "ქვედა ზღვარი ზედა ზღვარის ტოლი ვერ იქნება" @@ -24856,13 +24749,13 @@ msgid "invalid int2vector data" msgstr "int2vector -ის არასწორი მონაცემები" -#: utils/adt/int.c:1529 utils/adt/int8.c:1403 utils/adt/numeric.c:1750 utils/adt/timestamp.c:6546 utils/adt/timestamp.c:6632 +#: utils/adt/int.c:1529 utils/adt/int8.c:1403 utils/adt/numeric.c:1765 utils/adt/timestamp.c:6546 utils/adt/timestamp.c:6632 #, c-format msgid "step size cannot equal zero" msgstr "ბიჯის ზომა ნულის ტოლი ვერ იქნება" #: utils/adt/int8.c:448 utils/adt/int8.c:471 utils/adt/int8.c:485 utils/adt/int8.c:499 utils/adt/int8.c:530 utils/adt/int8.c:554 utils/adt/int8.c:636 utils/adt/int8.c:704 utils/adt/int8.c:710 utils/adt/int8.c:736 utils/adt/int8.c:750 utils/adt/int8.c:774 utils/adt/int8.c:787 utils/adt/int8.c:899 utils/adt/int8.c:913 utils/adt/int8.c:927 utils/adt/int8.c:958 utils/adt/int8.c:980 utils/adt/int8.c:994 utils/adt/int8.c:1008 utils/adt/int8.c:1041 utils/adt/int8.c:1055 -#: utils/adt/int8.c:1069 utils/adt/int8.c:1100 utils/adt/int8.c:1122 utils/adt/int8.c:1136 utils/adt/int8.c:1150 utils/adt/int8.c:1312 utils/adt/int8.c:1347 utils/adt/numeric.c:4527 utils/adt/rangetypes.c:1535 utils/adt/rangetypes.c:1548 utils/adt/varbit.c:1676 +#: utils/adt/int8.c:1069 utils/adt/int8.c:1100 utils/adt/int8.c:1122 utils/adt/int8.c:1136 utils/adt/int8.c:1150 utils/adt/int8.c:1312 utils/adt/int8.c:1347 utils/adt/numeric.c:4542 utils/adt/rangetypes.c:1535 utils/adt/rangetypes.c:1548 utils/adt/varbit.c:1676 #, c-format msgid "bigint out of range" msgstr "bigint დიაპაზონს გარეთაა" @@ -24882,38 +24775,38 @@ msgid "could not determine data type for argument %d" msgstr "არგუმენტისთვის %d მონაცემების ტიპის განსაზღვრა შეუძლებელია" -#: utils/adt/json.c:1067 utils/adt/json.c:1259 utils/adt/json.c:1435 utils/adt/json.c:1513 utils/adt/jsonb.c:1333 utils/adt/jsonb.c:1423 +#: utils/adt/json.c:1067 utils/adt/json.c:1266 utils/adt/json.c:1449 utils/adt/json.c:1527 utils/adt/jsonb.c:1333 utils/adt/jsonb.c:1423 #, c-format msgid "null value not allowed for object key" msgstr "ობიექტის გასაღებისთვის ნულოვანი მნიშვნელობა დაშვებული არაა" -#: utils/adt/json.c:1110 utils/adt/json.c:1274 +#: utils/adt/json.c:1117 utils/adt/json.c:1288 #, c-format msgid "duplicate JSON object key value: %s" msgstr "დუბლირებული JSON ობიექტის გასაღების მნიშვნელობა: %s" -#: utils/adt/json.c:1219 utils/adt/jsonb.c:1134 +#: utils/adt/json.c:1226 utils/adt/jsonb.c:1134 #, c-format msgid "argument list must have even number of elements" msgstr "არგუმენტების სიას ლუწი რაოდენობის ელემენტები უნდა ჰქონდეს" #. translator: %s is a SQL function name -#: utils/adt/json.c:1221 utils/adt/jsonb.c:1136 +#: utils/adt/json.c:1228 utils/adt/jsonb.c:1136 #, c-format msgid "The arguments of %s must consist of alternating keys and values." msgstr "%s-ის არგუმენტები პარამეტრებისა და მნიშვნელობების მონაცვლეობით სიას უნდა წარმოადგენდეს." -#: utils/adt/json.c:1413 utils/adt/jsonb.c:1311 +#: utils/adt/json.c:1427 utils/adt/jsonb.c:1311 #, c-format msgid "array must have two columns" msgstr "მასივს ორი სვეტი უნდა ჰქონდეს" -#: utils/adt/json.c:1502 utils/adt/jsonb.c:1412 +#: utils/adt/json.c:1516 utils/adt/jsonb.c:1412 #, c-format msgid "mismatched array dimensions" msgstr "მასივის ზომები არ ემთხვევა" -#: utils/adt/json.c:1688 utils/adt/jsonb_util.c:1956 +#: utils/adt/json.c:1702 utils/adt/jsonb_util.c:1956 #, c-format msgid "duplicate JSON object key value" msgstr "დუბლირებული JSON ობიექტის გასაღების მნიშვნელობა" @@ -25028,204 +24921,204 @@ msgid "jsonb subscript in assignment must not be null" msgstr "" -#: utils/adt/jsonfuncs.c:582 utils/adt/jsonfuncs.c:829 utils/adt/jsonfuncs.c:2438 utils/adt/jsonfuncs.c:3013 utils/adt/jsonfuncs.c:3926 utils/adt/jsonfuncs.c:4273 +#: utils/adt/jsonfuncs.c:583 utils/adt/jsonfuncs.c:830 utils/adt/jsonfuncs.c:2439 utils/adt/jsonfuncs.c:3015 utils/adt/jsonfuncs.c:3948 utils/adt/jsonfuncs.c:4295 #, c-format msgid "cannot call %s on a scalar" msgstr "%s-ის გამოძახება სკალარზე შეუძლებელია" -#: utils/adt/jsonfuncs.c:587 utils/adt/jsonfuncs.c:814 utils/adt/jsonfuncs.c:3015 utils/adt/jsonfuncs.c:3913 +#: utils/adt/jsonfuncs.c:588 utils/adt/jsonfuncs.c:815 utils/adt/jsonfuncs.c:3017 utils/adt/jsonfuncs.c:3935 #, c-format msgid "cannot call %s on an array" msgstr "%s-ის გამოძახება მასივზე შეუძლებელია" -#: utils/adt/jsonfuncs.c:723 +#: utils/adt/jsonfuncs.c:724 #, c-format msgid "JSON data, line %d: %s%s%s" msgstr "JSON მონაცემი, ხაზი %d: %s%s%s" -#: utils/adt/jsonfuncs.c:1882 utils/adt/jsonfuncs.c:1919 +#: utils/adt/jsonfuncs.c:1883 utils/adt/jsonfuncs.c:1920 #, c-format msgid "cannot get array length of a scalar" msgstr "სკალარის მასივის სიგრძის მიღება შეუძლებელია" -#: utils/adt/jsonfuncs.c:1886 utils/adt/jsonfuncs.c:1905 +#: utils/adt/jsonfuncs.c:1887 utils/adt/jsonfuncs.c:1906 #, c-format msgid "cannot get array length of a non-array" msgstr "არა-მასივის მასივის სიგრძის მიღება შეუძლებელია" -#: utils/adt/jsonfuncs.c:1985 +#: utils/adt/jsonfuncs.c:1986 #, c-format msgid "cannot call %s on a non-object" msgstr "არა-ობიექტზე %s-ის გამოძახება შეუძლებელია" -#: utils/adt/jsonfuncs.c:2173 +#: utils/adt/jsonfuncs.c:2174 #, c-format msgid "cannot deconstruct an array as an object" msgstr "მასივის დეკონსტრუქცია ობიექტად შეუძლებელია" -#: utils/adt/jsonfuncs.c:2187 +#: utils/adt/jsonfuncs.c:2188 #, c-format msgid "cannot deconstruct a scalar" msgstr "სკალარის დეკონსტრუქცია შეუძლებელია" -#: utils/adt/jsonfuncs.c:2232 +#: utils/adt/jsonfuncs.c:2233 #, c-format msgid "cannot extract elements from a scalar" msgstr "სკალარიდან ელემენტების გამოღება შეუძლებელია" -#: utils/adt/jsonfuncs.c:2236 +#: utils/adt/jsonfuncs.c:2237 #, c-format msgid "cannot extract elements from an object" msgstr "ობიექტიდან ელემენტების გამოღება შეუძლებელია" -#: utils/adt/jsonfuncs.c:2423 utils/adt/jsonfuncs.c:4151 +#: utils/adt/jsonfuncs.c:2424 utils/adt/jsonfuncs.c:4173 #, c-format msgid "cannot call %s on a non-array" msgstr "არა-მასივზე %s-ს ვერ გამოიძახებთ" -#: utils/adt/jsonfuncs.c:2514 utils/adt/jsonfuncs.c:2519 utils/adt/jsonfuncs.c:2537 utils/adt/jsonfuncs.c:2543 +#: utils/adt/jsonfuncs.c:2515 utils/adt/jsonfuncs.c:2520 utils/adt/jsonfuncs.c:2538 utils/adt/jsonfuncs.c:2544 #, c-format msgid "expected JSON array" msgstr "მოველოდი JSON მასივს" -#: utils/adt/jsonfuncs.c:2515 +#: utils/adt/jsonfuncs.c:2516 #, c-format msgid "See the value of key \"%s\"." msgstr "იხილეთ მასივის ელემენტი \"%s\"." -#: utils/adt/jsonfuncs.c:2538 +#: utils/adt/jsonfuncs.c:2539 #, c-format msgid "See the array element %s of key \"%s\"." msgstr "იხილეთ მასივის ელემენტი %s გასაღებიდან \"%s\"." -#: utils/adt/jsonfuncs.c:2544 +#: utils/adt/jsonfuncs.c:2545 #, c-format msgid "See the array element %s." msgstr "იხილეთ მასივის ელემენტი %s." -#: utils/adt/jsonfuncs.c:2596 +#: utils/adt/jsonfuncs.c:2597 #, c-format msgid "malformed JSON array" msgstr "დამახინჯებული JSON მასივი" #. translator: %s is a function name, eg json_to_record -#: utils/adt/jsonfuncs.c:3625 +#: utils/adt/jsonfuncs.c:3647 #, c-format msgid "first argument of %s must be a row type" msgstr "%s-ის პირველი არგუმენტი მწკრივის ტიპის უნდა იყოს" #. translator: %s is a function name, eg json_to_record -#: utils/adt/jsonfuncs.c:3649 +#: utils/adt/jsonfuncs.c:3671 #, c-format msgid "could not determine row type for result of %s" msgstr "%s-ის შედეგის მწკრივის ტიპის დადგენა შეუძლებელია" -#: utils/adt/jsonfuncs.c:3651 +#: utils/adt/jsonfuncs.c:3673 #, c-format msgid "Provide a non-null record argument, or call the function in the FROM clause using a column definition list." msgstr "" -#: utils/adt/jsonfuncs.c:4037 utils/fmgr/funcapi.c:94 +#: utils/adt/jsonfuncs.c:4059 utils/fmgr/funcapi.c:94 #, c-format msgid "materialize mode required, but it is not allowed in this context" msgstr "საჭიროა მატერიალიზებული რეჟიმი, მაგრამ ამ კონტექსტში ეს დაუშვებელია" -#: utils/adt/jsonfuncs.c:4168 utils/adt/jsonfuncs.c:4252 +#: utils/adt/jsonfuncs.c:4190 utils/adt/jsonfuncs.c:4274 #, c-format msgid "argument of %s must be an array of objects" msgstr "%s-ის არგუმენტი ობიექტების მასივს უნდა წარმოადგენდეს" -#: utils/adt/jsonfuncs.c:4201 +#: utils/adt/jsonfuncs.c:4223 #, c-format msgid "cannot call %s on an object" msgstr "%s-ს ობიექტზე ვერ გამოიძახებთ" -#: utils/adt/jsonfuncs.c:4634 utils/adt/jsonfuncs.c:4693 utils/adt/jsonfuncs.c:4773 +#: utils/adt/jsonfuncs.c:4656 utils/adt/jsonfuncs.c:4715 utils/adt/jsonfuncs.c:4795 #, c-format msgid "cannot delete from scalar" msgstr "სკალარიდან წაშლა შეუძლებელია" -#: utils/adt/jsonfuncs.c:4778 +#: utils/adt/jsonfuncs.c:4800 #, c-format msgid "cannot delete from object using integer index" msgstr "ობიექტიდან წაშლა მთელი რიცხვის ინდექსის გამოყენებით შეუძლებელია" -#: utils/adt/jsonfuncs.c:4846 utils/adt/jsonfuncs.c:5005 +#: utils/adt/jsonfuncs.c:4868 utils/adt/jsonfuncs.c:5027 #, c-format msgid "cannot set path in scalar" msgstr "სკალარში ბილიკის დაყენება შეუძლებელია" -#: utils/adt/jsonfuncs.c:4887 utils/adt/jsonfuncs.c:4929 +#: utils/adt/jsonfuncs.c:4909 utils/adt/jsonfuncs.c:4951 #, c-format msgid "null_value_treatment must be \"delete_key\", \"return_target\", \"use_json_null\", or \"raise_exception\"" msgstr "" -#: utils/adt/jsonfuncs.c:4900 +#: utils/adt/jsonfuncs.c:4922 #, c-format msgid "JSON value must not be null" msgstr "JSON მნიშვნელობა ნულოვანი ვერ იქნება" -#: utils/adt/jsonfuncs.c:4901 +#: utils/adt/jsonfuncs.c:4923 #, c-format msgid "Exception was raised because null_value_treatment is \"raise_exception\"." msgstr "" -#: utils/adt/jsonfuncs.c:4902 +#: utils/adt/jsonfuncs.c:4924 #, c-format msgid "To avoid, either change the null_value_treatment argument or ensure that an SQL NULL is not passed." msgstr "" -#: utils/adt/jsonfuncs.c:4957 +#: utils/adt/jsonfuncs.c:4979 #, c-format msgid "cannot delete path in scalar" msgstr "სკალარში ბილიკის წაშლა შეუძლებელია" -#: utils/adt/jsonfuncs.c:5171 +#: utils/adt/jsonfuncs.c:5193 #, c-format msgid "path element at position %d is null" msgstr "ბილიკის ელემენტი პოზიციაზე %d ნულოვანია" -#: utils/adt/jsonfuncs.c:5190 utils/adt/jsonfuncs.c:5221 utils/adt/jsonfuncs.c:5294 +#: utils/adt/jsonfuncs.c:5212 utils/adt/jsonfuncs.c:5243 utils/adt/jsonfuncs.c:5316 #, c-format msgid "cannot replace existing key" msgstr "არსებული გასაღების ჩანაცვლება შეუძლებელია" -#: utils/adt/jsonfuncs.c:5191 utils/adt/jsonfuncs.c:5222 +#: utils/adt/jsonfuncs.c:5213 utils/adt/jsonfuncs.c:5244 #, c-format msgid "The path assumes key is a composite object, but it is a scalar value." msgstr "" -#: utils/adt/jsonfuncs.c:5295 +#: utils/adt/jsonfuncs.c:5317 #, c-format msgid "Try using the function jsonb_set to replace key value." msgstr "" -#: utils/adt/jsonfuncs.c:5399 +#: utils/adt/jsonfuncs.c:5421 #, c-format msgid "path element at position %d is not an integer: \"%s\"" msgstr "" -#: utils/adt/jsonfuncs.c:5416 +#: utils/adt/jsonfuncs.c:5438 #, c-format msgid "path element at position %d is out of range: %d" msgstr "" -#: utils/adt/jsonfuncs.c:5568 +#: utils/adt/jsonfuncs.c:5590 #, c-format msgid "wrong flag type, only arrays and scalars are allowed" msgstr "არასწორი ალმის ტიპი. დაშვებულია მხოლოდ მასივები და სკალარები" -#: utils/adt/jsonfuncs.c:5575 +#: utils/adt/jsonfuncs.c:5597 #, c-format msgid "flag array element is not a string" msgstr "ალმის მასივის ელემენტი სტრიქონი არაა" -#: utils/adt/jsonfuncs.c:5576 utils/adt/jsonfuncs.c:5598 +#: utils/adt/jsonfuncs.c:5598 utils/adt/jsonfuncs.c:5620 #, c-format msgid "Possible values are: \"string\", \"numeric\", \"boolean\", \"key\", and \"all\"." msgstr "" -#: utils/adt/jsonfuncs.c:5596 +#: utils/adt/jsonfuncs.c:5618 #, c-format msgid "wrong flag in flag array: \"%s\"" msgstr "არასწორი ალამი ალმების მასივში: \"%s\"" @@ -25240,214 +25133,214 @@ msgid "LAST is allowed only in array subscripts" msgstr "" -#: utils/adt/jsonpath_exec.c:490 +#: utils/adt/jsonpath_exec.c:491 #, c-format msgid "single boolean result is expected" msgstr "მოველოდი ერთ ლოგიკურ შედეგს" -#: utils/adt/jsonpath_exec.c:850 +#: utils/adt/jsonpath_exec.c:851 #, c-format msgid "jsonpath wildcard array accessor can only be applied to an array" msgstr "" -#: utils/adt/jsonpath_exec.c:873 +#: utils/adt/jsonpath_exec.c:874 #, c-format msgid "jsonpath wildcard member accessor can only be applied to an object" msgstr "" -#: utils/adt/jsonpath_exec.c:922 +#: utils/adt/jsonpath_exec.c:923 #, c-format msgid "jsonpath array subscript is out of bounds" msgstr "" -#: utils/adt/jsonpath_exec.c:979 +#: utils/adt/jsonpath_exec.c:980 #, c-format msgid "jsonpath array accessor can only be applied to an array" msgstr "" -#: utils/adt/jsonpath_exec.c:1043 +#: utils/adt/jsonpath_exec.c:1044 #, c-format msgid "JSON object does not contain key \"%s\"" msgstr "JSON ობიექტი არ შეიცავს გასაღებს \"%s\"" -#: utils/adt/jsonpath_exec.c:1055 +#: utils/adt/jsonpath_exec.c:1056 #, c-format msgid "jsonpath member accessor can only be applied to an object" msgstr "" -#: utils/adt/jsonpath_exec.c:1113 +#: utils/adt/jsonpath_exec.c:1114 #, c-format msgid "jsonpath item method .%s() can only be applied to an array" msgstr "" -#: utils/adt/jsonpath_exec.c:1166 utils/adt/jsonpath_exec.c:1192 +#: utils/adt/jsonpath_exec.c:1167 utils/adt/jsonpath_exec.c:1193 #, c-format msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type double precision" msgstr "არგუმენტი \"%s\" jsonpath-ის ელემენტის მეთოდისთვის .%s() არასწორია ტიპისთვის double precision" -#: utils/adt/jsonpath_exec.c:1171 utils/adt/jsonpath_exec.c:1197 utils/adt/jsonpath_exec.c:1413 utils/adt/jsonpath_exec.c:1445 +#: utils/adt/jsonpath_exec.c:1172 utils/adt/jsonpath_exec.c:1198 utils/adt/jsonpath_exec.c:1414 utils/adt/jsonpath_exec.c:1446 #, c-format msgid "NaN or Infinity is not allowed for jsonpath item method .%s()" msgstr "" -#: utils/adt/jsonpath_exec.c:1210 utils/adt/jsonpath_exec.c:1312 utils/adt/jsonpath_exec.c:1454 utils/adt/jsonpath_exec.c:1592 +#: utils/adt/jsonpath_exec.c:1211 utils/adt/jsonpath_exec.c:1313 utils/adt/jsonpath_exec.c:1455 utils/adt/jsonpath_exec.c:1593 #, c-format msgid "jsonpath item method .%s() can only be applied to a string or numeric value" msgstr "" -#: utils/adt/jsonpath_exec.c:1280 utils/adt/jsonpath_exec.c:1304 +#: utils/adt/jsonpath_exec.c:1281 utils/adt/jsonpath_exec.c:1305 #, c-format msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type bigint" msgstr "" -#: utils/adt/jsonpath_exec.c:1356 utils/adt/jsonpath_exec.c:1376 +#: utils/adt/jsonpath_exec.c:1357 utils/adt/jsonpath_exec.c:1377 #, c-format msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type boolean" msgstr "" -#: utils/adt/jsonpath_exec.c:1385 +#: utils/adt/jsonpath_exec.c:1386 #, c-format -msgid "jsonpath item method .%s() can only be applied to a bool, string, or numeric value" +msgid "jsonpath item method .%s() can only be applied to a boolean, string, or numeric value" msgstr "" -#: utils/adt/jsonpath_exec.c:1438 utils/adt/jsonpath_exec.c:1527 +#: utils/adt/jsonpath_exec.c:1439 utils/adt/jsonpath_exec.c:1528 #, c-format msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type numeric" msgstr "" -#: utils/adt/jsonpath_exec.c:1486 +#: utils/adt/jsonpath_exec.c:1487 #, c-format msgid "precision of jsonpath item method .%s() is out of range for type integer" msgstr "" -#: utils/adt/jsonpath_exec.c:1500 +#: utils/adt/jsonpath_exec.c:1501 #, c-format msgid "scale of jsonpath item method .%s() is out of range for type integer" msgstr "" -#: utils/adt/jsonpath_exec.c:1560 utils/adt/jsonpath_exec.c:1584 +#: utils/adt/jsonpath_exec.c:1561 utils/adt/jsonpath_exec.c:1585 #, c-format msgid "argument \"%s\" of jsonpath item method .%s() is invalid for type integer" msgstr "" -#: utils/adt/jsonpath_exec.c:1663 +#: utils/adt/jsonpath_exec.c:1648 #, c-format -msgid "jsonpath item method .%s() can only be applied to a bool, string, numeric, or datetime value" +msgid "jsonpath item method .%s() can only be applied to a boolean, string, numeric, or datetime value" msgstr "" -#: utils/adt/jsonpath_exec.c:2152 +#: utils/adt/jsonpath_exec.c:2137 #, c-format msgid "left operand of jsonpath operator %s is not a single numeric value" msgstr "" -#: utils/adt/jsonpath_exec.c:2159 +#: utils/adt/jsonpath_exec.c:2144 #, c-format msgid "right operand of jsonpath operator %s is not a single numeric value" msgstr "" -#: utils/adt/jsonpath_exec.c:2227 +#: utils/adt/jsonpath_exec.c:2212 #, c-format msgid "operand of unary jsonpath operator %s is not a numeric value" msgstr "" -#: utils/adt/jsonpath_exec.c:2326 +#: utils/adt/jsonpath_exec.c:2311 #, c-format msgid "jsonpath item method .%s() can only be applied to a numeric value" msgstr "" -#: utils/adt/jsonpath_exec.c:2372 +#: utils/adt/jsonpath_exec.c:2357 #, c-format msgid "jsonpath item method .%s() can only be applied to a string" msgstr "" -#: utils/adt/jsonpath_exec.c:2465 +#: utils/adt/jsonpath_exec.c:2450 #, c-format msgid "time precision of jsonpath item method .%s() is out of range for type integer" msgstr "" -#: utils/adt/jsonpath_exec.c:2499 utils/adt/jsonpath_exec.c:2505 utils/adt/jsonpath_exec.c:2532 utils/adt/jsonpath_exec.c:2560 utils/adt/jsonpath_exec.c:2613 utils/adt/jsonpath_exec.c:2664 utils/adt/jsonpath_exec.c:2720 +#: utils/adt/jsonpath_exec.c:2484 utils/adt/jsonpath_exec.c:2490 utils/adt/jsonpath_exec.c:2517 utils/adt/jsonpath_exec.c:2545 utils/adt/jsonpath_exec.c:2598 utils/adt/jsonpath_exec.c:2649 utils/adt/jsonpath_exec.c:2720 #, c-format msgid "%s format is not recognized: \"%s\"" msgstr "%s-ის ფორმატი უცნობია: \"%s\"" -#: utils/adt/jsonpath_exec.c:2501 +#: utils/adt/jsonpath_exec.c:2486 #, c-format msgid "Use a datetime template argument to specify the input data format." msgstr "" -#: utils/adt/jsonpath_exec.c:2694 utils/adt/jsonpath_exec.c:2750 +#: utils/adt/jsonpath_exec.c:2679 utils/adt/jsonpath_exec.c:2760 #, c-format msgid "time precision of jsonpath item method .%s() is invalid" msgstr "" -#: utils/adt/jsonpath_exec.c:2830 +#: utils/adt/jsonpath_exec.c:2840 #, c-format msgid "jsonpath item method .%s() can only be applied to an object" msgstr "" -#: utils/adt/jsonpath_exec.c:3113 +#: utils/adt/jsonpath_exec.c:3124 #, c-format msgid "could not convert value of type %s to jsonpath" msgstr "%s ტიპის მნიშვნელობის jsonpath-ში გადაყვანა ვერ შევძელი" -#: utils/adt/jsonpath_exec.c:3147 +#: utils/adt/jsonpath_exec.c:3158 #, c-format msgid "could not find jsonpath variable \"%s\"" msgstr "" -#: utils/adt/jsonpath_exec.c:3200 +#: utils/adt/jsonpath_exec.c:3211 #, c-format msgid "\"vars\" argument is not an object" msgstr "არგუმენტი \"vars\" ობიექტი არაა" -#: utils/adt/jsonpath_exec.c:3201 +#: utils/adt/jsonpath_exec.c:3212 #, c-format msgid "Jsonpath parameters should be encoded as key-value pairs of \"vars\" object." msgstr "" -#: utils/adt/jsonpath_exec.c:3464 +#: utils/adt/jsonpath_exec.c:3475 #, c-format msgid "jsonpath array subscript is not a single numeric value" msgstr "" -#: utils/adt/jsonpath_exec.c:3476 +#: utils/adt/jsonpath_exec.c:3487 #, c-format msgid "jsonpath array subscript is out of integer range" msgstr "" -#: utils/adt/jsonpath_exec.c:3660 +#: utils/adt/jsonpath_exec.c:3671 #, c-format msgid "cannot convert value from %s to %s without time zone usage" msgstr "" -#: utils/adt/jsonpath_exec.c:3662 +#: utils/adt/jsonpath_exec.c:3673 #, c-format msgid "Use *_tz() function for time zone support." msgstr "" -#: utils/adt/jsonpath_exec.c:3956 +#: utils/adt/jsonpath_exec.c:3981 #, c-format -msgid "JSON path expression for column \"%s\" should return single item without wrapper" +msgid "JSON path expression for column \"%s\" must return single item when no wrapper is requested" msgstr "" -#: utils/adt/jsonpath_exec.c:3958 utils/adt/jsonpath_exec.c:3963 +#: utils/adt/jsonpath_exec.c:3983 utils/adt/jsonpath_exec.c:3988 #, c-format -msgid "Use WITH WRAPPER clause to wrap SQL/JSON items into array." +msgid "Use the WITH WRAPPER clause to wrap SQL/JSON items into an array." msgstr "" -#: utils/adt/jsonpath_exec.c:3962 +#: utils/adt/jsonpath_exec.c:3987 #, c-format -msgid "JSON path expression in JSON_QUERY should return single item without wrapper" +msgid "JSON path expression in JSON_QUERY must return single item when no wrapper is requested" msgstr "" -#: utils/adt/jsonpath_exec.c:4020 utils/adt/jsonpath_exec.c:4044 +#: utils/adt/jsonpath_exec.c:4045 utils/adt/jsonpath_exec.c:4069 #, c-format -msgid "JSON path expression for column \"%s\" should return single scalar item" +msgid "JSON path expression for column \"%s\" must return single scalar item" msgstr "" -#: utils/adt/jsonpath_exec.c:4025 utils/adt/jsonpath_exec.c:4049 +#: utils/adt/jsonpath_exec.c:4050 utils/adt/jsonpath_exec.c:4074 #, c-format -msgid "JSON path expression in JSON_VALUE should return single scalar item" +msgid "JSON path expression in JSON_VALUE must return single scalar item" msgstr "" #: utils/adt/levenshtein.c:132 @@ -25687,127 +25580,127 @@ msgid "cannot subtract inet values of different sizes" msgstr "" -#: utils/adt/numeric.c:786 utils/adt/numeric.c:3644 utils/adt/numeric.c:7201 utils/adt/numeric.c:7404 utils/adt/numeric.c:7876 utils/adt/numeric.c:10571 utils/adt/numeric.c:11045 utils/adt/numeric.c:11139 utils/adt/numeric.c:11273 +#: utils/adt/numeric.c:793 utils/adt/numeric.c:3659 utils/adt/numeric.c:7216 utils/adt/numeric.c:7419 utils/adt/numeric.c:7891 utils/adt/numeric.c:10586 utils/adt/numeric.c:11061 utils/adt/numeric.c:11155 utils/adt/numeric.c:11290 #, c-format msgid "value overflows numeric format" msgstr "მნიშვნელობა გადაავსებს რიცხვის ფორმატს" -#: utils/adt/numeric.c:1099 +#: utils/adt/numeric.c:1106 #, c-format msgid "invalid sign in external \"numeric\" value" msgstr "" -#: utils/adt/numeric.c:1105 +#: utils/adt/numeric.c:1112 #, c-format msgid "invalid scale in external \"numeric\" value" msgstr "" -#: utils/adt/numeric.c:1114 +#: utils/adt/numeric.c:1121 #, c-format msgid "invalid digit in external \"numeric\" value" msgstr "" -#: utils/adt/numeric.c:1329 utils/adt/numeric.c:1343 +#: utils/adt/numeric.c:1336 utils/adt/numeric.c:1350 #, c-format msgid "NUMERIC precision %d must be between 1 and %d" msgstr "" -#: utils/adt/numeric.c:1334 +#: utils/adt/numeric.c:1341 #, c-format msgid "NUMERIC scale %d must be between %d and %d" msgstr "" -#: utils/adt/numeric.c:1352 +#: utils/adt/numeric.c:1359 #, c-format msgid "invalid NUMERIC type modifier" msgstr "არასწორი NUMERIC ტიპის მოდიფიკატორი" -#: utils/adt/numeric.c:1710 +#: utils/adt/numeric.c:1725 #, c-format msgid "start value cannot be NaN" msgstr "საწყისი მნიშვნელობა NaN ვერ იქნება" -#: utils/adt/numeric.c:1714 +#: utils/adt/numeric.c:1729 #, c-format msgid "start value cannot be infinity" msgstr "საწყისი მნიშვნელობა უსასრულო ვერ იქნება" -#: utils/adt/numeric.c:1721 +#: utils/adt/numeric.c:1736 #, c-format msgid "stop value cannot be NaN" msgstr "საბოლოო მნიშვნელობა NaN ვერ იქნება" -#: utils/adt/numeric.c:1725 +#: utils/adt/numeric.c:1740 #, c-format msgid "stop value cannot be infinity" msgstr "საბოლოო მნიშვნელობა უსასრულო ვერ იქნება" -#: utils/adt/numeric.c:1738 +#: utils/adt/numeric.c:1753 #, c-format msgid "step size cannot be NaN" msgstr "ბიჯის ზომა NaN ვერ იქნება" -#: utils/adt/numeric.c:1742 +#: utils/adt/numeric.c:1757 #, c-format msgid "step size cannot be infinity" msgstr "ბიჯის ზომა უსასრულო ვერ იქნება" -#: utils/adt/numeric.c:3634 +#: utils/adt/numeric.c:3649 #, c-format msgid "factorial of a negative number is undefined" msgstr "უასრყოფითი რიცხვის ფაქტორიალი გაურკვეველია" -#: utils/adt/numeric.c:4241 +#: utils/adt/numeric.c:4256 #, c-format msgid "lower bound cannot be NaN" msgstr "ქვედა ზღვარი ნულოვანი ვერ იქნება" -#: utils/adt/numeric.c:4245 +#: utils/adt/numeric.c:4260 #, c-format msgid "lower bound cannot be infinity" msgstr "ქვედა ზღვარი უსასრულობა ვერ იქნება" -#: utils/adt/numeric.c:4252 +#: utils/adt/numeric.c:4267 #, c-format msgid "upper bound cannot be NaN" msgstr "ზედა ზღვარი ნულოვანი ვერ იქნება" -#: utils/adt/numeric.c:4256 +#: utils/adt/numeric.c:4271 #, c-format msgid "upper bound cannot be infinity" msgstr "ზედა ზღვარი უსასრულობა ვერ იქნება" -#: utils/adt/numeric.c:4417 utils/adt/numeric.c:4505 utils/adt/numeric.c:4565 utils/adt/numeric.c:4761 +#: utils/adt/numeric.c:4432 utils/adt/numeric.c:4520 utils/adt/numeric.c:4580 utils/adt/numeric.c:4776 #, c-format msgid "cannot convert NaN to %s" msgstr "\"NaN\"-ის %s-ში გადაყვანა შეუძლებელია" -#: utils/adt/numeric.c:4421 utils/adt/numeric.c:4509 utils/adt/numeric.c:4569 utils/adt/numeric.c:4765 +#: utils/adt/numeric.c:4436 utils/adt/numeric.c:4524 utils/adt/numeric.c:4584 utils/adt/numeric.c:4780 #, c-format msgid "cannot convert infinity to %s" msgstr "უსასრულობის %s-ში გადაყვანა შეუძლებელია" -#: utils/adt/numeric.c:4774 +#: utils/adt/numeric.c:4789 #, c-format msgid "pg_lsn out of range" msgstr "pg_lsn დიაპაზონს გარეთაა" -#: utils/adt/numeric.c:7966 utils/adt/numeric.c:8017 +#: utils/adt/numeric.c:7981 utils/adt/numeric.c:8032 #, c-format msgid "numeric field overflow" msgstr "რიცხვითი ველის გადავსება" -#: utils/adt/numeric.c:7967 +#: utils/adt/numeric.c:7982 #, c-format msgid "A field with precision %d, scale %d must round to an absolute value less than %s%d." msgstr "" -#: utils/adt/numeric.c:8018 +#: utils/adt/numeric.c:8033 #, c-format msgid "A field with precision %d, scale %d cannot hold an infinite value." msgstr "" -#: utils/adt/numeric.c:11342 utils/adt/pseudorandomfuncs.c:135 utils/adt/pseudorandomfuncs.c:159 +#: utils/adt/numeric.c:11359 utils/adt/pseudorandomfuncs.c:135 utils/adt/pseudorandomfuncs.c:159 #, c-format msgid "lower bound must be less than or equal to upper bound" msgstr "ქვედა ზღვარი ზედა ზღვარზე ნაკლები ან ტოლი უნდა იყოს" @@ -25847,137 +25740,142 @@ msgid "percentile value %g is not between 0 and 1" msgstr "" -#: utils/adt/pg_locale.c:1484 +#: utils/adt/pg_locale.c:326 utils/adt/pg_locale.c:358 +#, c-format +msgid "locale name \"%s\" contains non-ASCII characters" +msgstr "ლოკალის სახელი \"%s\" არა-ASCII სიმბოლოებს შეიცავს" + +#: utils/adt/pg_locale.c:1507 #, c-format msgid "could not open collator for locale \"%s\" with rules \"%s\": %s" msgstr "ლოკალისთვის \"%s\" წესებით \"%s\" კოლატორის გახსნის შეცდომა: %s" -#: utils/adt/pg_locale.c:1495 utils/adt/pg_locale.c:2969 utils/adt/pg_locale.c:3042 +#: utils/adt/pg_locale.c:1518 utils/adt/pg_locale.c:2992 utils/adt/pg_locale.c:3065 #, c-format msgid "ICU is not supported in this build" msgstr "ამ აგებაში ICU-ის მხარდაჭერა არ არსებბს" -#: utils/adt/pg_locale.c:1523 +#: utils/adt/pg_locale.c:1546 #, c-format msgid "could not create locale \"%s\": %m" msgstr "ლოკალის \"%s\" შექმნა შეუძლებელია: %m" -#: utils/adt/pg_locale.c:1526 +#: utils/adt/pg_locale.c:1549 #, c-format msgid "The operating system could not find any locale data for the locale name \"%s\"." msgstr "" -#: utils/adt/pg_locale.c:1647 +#: utils/adt/pg_locale.c:1670 #, c-format msgid "collations with different collate and ctype values are not supported on this platform" msgstr "" -#: utils/adt/pg_locale.c:1694 +#: utils/adt/pg_locale.c:1717 #, c-format msgid "collation \"%s\" has no actual version, but a version was recorded" msgstr "" -#: utils/adt/pg_locale.c:1700 +#: utils/adt/pg_locale.c:1723 #, c-format msgid "collation \"%s\" has version mismatch" msgstr "კოლაციის ვერსია არ ემთხვევა: %s" -#: utils/adt/pg_locale.c:1702 +#: utils/adt/pg_locale.c:1725 #, c-format msgid "The collation in the database was created using version %s, but the operating system provides version %s." msgstr "" -#: utils/adt/pg_locale.c:1705 +#: utils/adt/pg_locale.c:1728 #, c-format msgid "Rebuild all objects affected by this collation and run ALTER COLLATION %s REFRESH VERSION, or build PostgreSQL with the right library version." msgstr "" -#: utils/adt/pg_locale.c:1749 utils/adt/pg_locale.c:2533 utils/adt/pg_locale.c:2558 +#: utils/adt/pg_locale.c:1772 utils/adt/pg_locale.c:2556 utils/adt/pg_locale.c:2581 #, c-format msgid "invalid locale name \"%s\" for builtin provider" msgstr "არასწორი ლოკალის სახელი \"%s\" ჩაშენებული მომწოდებლისთვის" -#: utils/adt/pg_locale.c:1791 +#: utils/adt/pg_locale.c:1814 #, c-format msgid "could not load locale \"%s\"" msgstr "ენის ჩატვირთვის შეცდომა: %s" -#: utils/adt/pg_locale.c:1816 +#: utils/adt/pg_locale.c:1839 #, c-format msgid "could not get collation version for locale \"%s\": error code %lu" msgstr "" -#: utils/adt/pg_locale.c:1872 utils/adt/pg_locale.c:1885 +#: utils/adt/pg_locale.c:1895 utils/adt/pg_locale.c:1908 #, c-format msgid "could not convert string to UTF-16: error code %lu" msgstr "" -#: utils/adt/pg_locale.c:1897 +#: utils/adt/pg_locale.c:1920 #, c-format msgid "could not compare Unicode strings: %m" msgstr "უნიკოდის სტრიქონების შედარება შეუძლებელია: %m" -#: utils/adt/pg_locale.c:2071 +#: utils/adt/pg_locale.c:2094 #, c-format msgid "collation failed: %s" msgstr "კოლაციის შეცდომა: %s" -#: utils/adt/pg_locale.c:2290 utils/adt/pg_locale.c:2322 +#: utils/adt/pg_locale.c:2313 utils/adt/pg_locale.c:2345 #, c-format msgid "sort key generation failed: %s" msgstr "დალაგების გასაღების გენერაციის შეცდომა: %s" -#: utils/adt/pg_locale.c:2612 +#: utils/adt/pg_locale.c:2635 #, c-format msgid "could not get language from locale \"%s\": %s" msgstr "ლოკალიდან \"%s\" ენის მიღების შეცდომა: %s" -#: utils/adt/pg_locale.c:2633 utils/adt/pg_locale.c:2649 +#: utils/adt/pg_locale.c:2656 utils/adt/pg_locale.c:2672 #, c-format msgid "could not open collator for locale \"%s\": %s" msgstr "" -#: utils/adt/pg_locale.c:2674 +#: utils/adt/pg_locale.c:2697 #, c-format msgid "encoding \"%s\" not supported by ICU" msgstr "კოდირება \"%s\" ICU-ის მიერ მხარდაჭერილი არაა" -#: utils/adt/pg_locale.c:2681 +#: utils/adt/pg_locale.c:2704 #, c-format msgid "could not open ICU converter for encoding \"%s\": %s" msgstr "შეცდომა ICU გარდამქმნელის გახსნისას კოდირებისთვის \"%s\": %s" -#: utils/adt/pg_locale.c:2699 utils/adt/pg_locale.c:2718 utils/adt/pg_locale.c:2774 utils/adt/pg_locale.c:2785 +#: utils/adt/pg_locale.c:2722 utils/adt/pg_locale.c:2741 utils/adt/pg_locale.c:2797 utils/adt/pg_locale.c:2808 #, c-format msgid "%s failed: %s" msgstr "%s ვერ მოხერხდა: %s" -#: utils/adt/pg_locale.c:2960 +#: utils/adt/pg_locale.c:2983 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "მდებარეობის კოდის \"%s\" ენის ჭდეში (%s) გადაყვანის შეცდომა" -#: utils/adt/pg_locale.c:3001 +#: utils/adt/pg_locale.c:3024 #, c-format msgid "could not get language from ICU locale \"%s\": %s" msgstr "'ICU' ლოკალიდან \"%s\" ენის მიღების შეცდომა: %s" -#: utils/adt/pg_locale.c:3003 utils/adt/pg_locale.c:3032 +#: utils/adt/pg_locale.c:3026 utils/adt/pg_locale.c:3055 #, c-format msgid "To disable ICU locale validation, set the parameter \"%s\" to \"%s\"." msgstr "ICU ლოკალის გადამოწმების გასათიშად პარამეტრი \"%s\" დააყენეთ მნიშვნელობაზე \"%s\"." -#: utils/adt/pg_locale.c:3030 +#: utils/adt/pg_locale.c:3053 #, c-format msgid "ICU locale \"%s\" has unknown language \"%s\"" msgstr "ICU ლოკალს \"%s\" გააჩნია უცნობი ენა \"%s\"" -#: utils/adt/pg_locale.c:3181 +#: utils/adt/pg_locale.c:3204 #, c-format msgid "invalid multibyte character for locale" msgstr "არასწორი მრავალბაიტიანი სიმბოლო ლოკალისთვის" -#: utils/adt/pg_locale.c:3182 +#: utils/adt/pg_locale.c:3205 #, c-format msgid "The server's LC_CTYPE locale is probably incompatible with the database encoding." msgstr "" @@ -26112,7 +26010,7 @@ msgid "If you meant to use regexp_replace() with a start parameter, cast the fourth argument to integer explicitly." msgstr "" -#: utils/adt/regexp.c:716 utils/adt/regexp.c:725 utils/adt/regexp.c:1082 utils/adt/regexp.c:1146 utils/adt/regexp.c:1155 utils/adt/regexp.c:1164 utils/adt/regexp.c:1173 utils/adt/regexp.c:1853 utils/adt/regexp.c:1862 utils/adt/regexp.c:1871 utils/misc/guc.c:6776 utils/misc/guc.c:6810 +#: utils/adt/regexp.c:716 utils/adt/regexp.c:725 utils/adt/regexp.c:1082 utils/adt/regexp.c:1146 utils/adt/regexp.c:1155 utils/adt/regexp.c:1164 utils/adt/regexp.c:1173 utils/adt/regexp.c:1853 utils/adt/regexp.c:1862 utils/adt/regexp.c:1871 utils/misc/guc.c:6820 utils/misc/guc.c:6854 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "არასწორი მნიშვნელობა პარამეტრისთვის \"%s\": %d" @@ -26148,7 +26046,7 @@ msgid "more than one operator named %s" msgstr "ერთზე მეტი ოპერატორი, სახელად %s" -#: utils/adt/regproc.c:675 utils/adt/regproc.c:2029 utils/adt/ruleutils.c:10424 utils/adt/ruleutils.c:10637 +#: utils/adt/regproc.c:675 utils/adt/regproc.c:2029 utils/adt/ruleutils.c:10509 utils/adt/ruleutils.c:10722 #, c-format msgid "too many arguments" msgstr "მეტისმეტად ბევრი არგუმენტი" @@ -26313,22 +26211,22 @@ msgid "cannot compare record types with different numbers of columns" msgstr "" -#: utils/adt/ruleutils.c:2693 +#: utils/adt/ruleutils.c:2694 #, c-format msgid "input is a query, not an expression" msgstr "შეყვანა არის მოთხოვნა და არა გამოსახულება" -#: utils/adt/ruleutils.c:2705 +#: utils/adt/ruleutils.c:2706 #, c-format msgid "expression contains variables of more than one relation" msgstr "" -#: utils/adt/ruleutils.c:2712 +#: utils/adt/ruleutils.c:2713 #, c-format msgid "expression contains variables" msgstr "გამოხატულება შეიცავს ცვლადებს" -#: utils/adt/ruleutils.c:5242 +#: utils/adt/ruleutils.c:5246 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "წესს \"%s\" გააჩნია მხარდაუჭერელი მოვლენის ტიპი %d" @@ -26374,7 +26272,7 @@ msgstr "დროის შტამპი დიაპაზონს გარეთაა: \"%g\"" #: utils/adt/timestamp.c:957 utils/adt/timestamp.c:1516 utils/adt/timestamp.c:1526 utils/adt/timestamp.c:1587 utils/adt/timestamp.c:2807 utils/adt/timestamp.c:2816 utils/adt/timestamp.c:2831 utils/adt/timestamp.c:2905 utils/adt/timestamp.c:2922 utils/adt/timestamp.c:2979 utils/adt/timestamp.c:3022 utils/adt/timestamp.c:3400 utils/adt/timestamp.c:3458 utils/adt/timestamp.c:3481 utils/adt/timestamp.c:3490 utils/adt/timestamp.c:3514 utils/adt/timestamp.c:3537 -#: utils/adt/timestamp.c:3546 utils/adt/timestamp.c:3681 utils/adt/timestamp.c:3782 utils/adt/timestamp.c:4274 utils/adt/timestamp.c:4283 utils/adt/timestamp.c:4375 utils/adt/timestamp.c:4422 utils/adt/timestamp.c:4431 utils/adt/timestamp.c:4527 utils/adt/timestamp.c:4580 utils/adt/timestamp.c:4590 utils/adt/timestamp.c:4785 utils/adt/timestamp.c:4795 utils/adt/timestamp.c:5097 +#: utils/adt/timestamp.c:3546 utils/adt/timestamp.c:3681 utils/adt/timestamp.c:3782 utils/adt/timestamp.c:4189 utils/adt/timestamp.c:4226 utils/adt/timestamp.c:4274 utils/adt/timestamp.c:4283 utils/adt/timestamp.c:4375 utils/adt/timestamp.c:4422 utils/adt/timestamp.c:4431 utils/adt/timestamp.c:4527 utils/adt/timestamp.c:4580 utils/adt/timestamp.c:4590 utils/adt/timestamp.c:4785 utils/adt/timestamp.c:4795 utils/adt/timestamp.c:5097 #, c-format msgid "interval out of range" msgstr "ინტერვალი საზღვრებს გარეთაა" @@ -26399,11 +26297,6 @@ msgid "interval(%d) precision must be between %d and %d" msgstr "" -#: utils/adt/timestamp.c:4189 utils/adt/timestamp.c:4226 -#, c-format -msgid "interval out of range." -msgstr "ინტერვალი დაშვებული შუალედის გარეთაა." - #: utils/adt/timestamp.c:4564 utils/adt/timestamp.c:4769 #, c-format msgid "origin out of range" @@ -26794,12 +26687,12 @@ msgid "argument of nth_value must be greater than zero" msgstr "nth_value-ის არგუმენტი ნულზე მეტი უნდა იყოს" -#: utils/adt/xid8funcs.c:124 +#: utils/adt/xid8funcs.c:120 #, c-format msgid "transaction ID %llu is in the future" msgstr "ტრანზაქციის ID მომავალშია: %llu" -#: utils/adt/xid8funcs.c:553 +#: utils/adt/xid8funcs.c:522 #, c-format msgid "invalid external pg_snapshot data" msgstr "pg_snapshot-ის არასწორი გარე მონაცემები" @@ -26824,141 +26717,141 @@ msgid "invalid XML comment" msgstr "არასწორი XML კომენტარი" -#: utils/adt/xml.c:691 +#: utils/adt/xml.c:697 #, c-format msgid "not an XML document" msgstr "არ არის XML დოკუმენტი" -#: utils/adt/xml.c:987 utils/adt/xml.c:1010 +#: utils/adt/xml.c:1008 utils/adt/xml.c:1031 #, c-format msgid "invalid XML processing instruction" msgstr "xml-ის დამუშავების არასწორი ინსტრუქცია" -#: utils/adt/xml.c:988 +#: utils/adt/xml.c:1009 #, c-format msgid "XML processing instruction target name cannot be \"%s\"." msgstr "" -#: utils/adt/xml.c:1011 +#: utils/adt/xml.c:1032 #, c-format msgid "XML processing instruction cannot contain \"?>\"." msgstr "" -#: utils/adt/xml.c:1090 +#: utils/adt/xml.c:1111 #, c-format msgid "xmlvalidate is not implemented" msgstr "xmlvalidate განხორციელებული არაა" -#: utils/adt/xml.c:1146 +#: utils/adt/xml.c:1167 #, c-format msgid "could not initialize XML library" msgstr "xml ბიბლიოთეკის ინიციალიზება ვერ მოხერხდა" -#: utils/adt/xml.c:1147 +#: utils/adt/xml.c:1168 #, c-format msgid "libxml2 has incompatible char type: sizeof(char)=%zu, sizeof(xmlChar)=%zu." msgstr "libxml2 აქვს შეუთავსებელი char ტიპის: ზომა (char)=%zu, sizeof(xmlChar)=%zu." -#: utils/adt/xml.c:1233 +#: utils/adt/xml.c:1254 #, c-format msgid "could not set up XML error handler" msgstr "\"XML\" შეცდომების დამმუშავებლის მორგების შეცდომა" -#: utils/adt/xml.c:1234 +#: utils/adt/xml.c:1255 #, c-format msgid "This probably indicates that the version of libxml2 being used is not compatible with the libxml2 header files that PostgreSQL was built with." msgstr "" -#: utils/adt/xml.c:2218 +#: utils/adt/xml.c:2281 msgid "Invalid character value." msgstr "სტრიქონის არასწორი მნშვნელობა." -#: utils/adt/xml.c:2221 +#: utils/adt/xml.c:2284 msgid "Space required." msgstr "საჭიროა გამოტოვება." -#: utils/adt/xml.c:2224 +#: utils/adt/xml.c:2287 msgid "standalone accepts only 'yes' or 'no'." msgstr "standalone-ის მნიშვნელობა შეიძლება იყოს \"yes\"(დიახ) ან \"no\"(არა)." -#: utils/adt/xml.c:2227 +#: utils/adt/xml.c:2290 msgid "Malformed declaration: missing version." msgstr "არასწორი აღწერა: ვერსია მითითებული არაა." -#: utils/adt/xml.c:2230 +#: utils/adt/xml.c:2293 msgid "Missing encoding in text declaration." msgstr "ტექსტის აღწერაში კოდირება მითითებული არაა." -#: utils/adt/xml.c:2233 +#: utils/adt/xml.c:2296 msgid "Parsing XML declaration: '?>' expected." msgstr "" -#: utils/adt/xml.c:2236 +#: utils/adt/xml.c:2299 #, c-format msgid "Unrecognized libxml error code: %d." msgstr "Libxml-ის შეცდომის უცნობი კოდი: %d." -#: utils/adt/xml.c:2490 +#: utils/adt/xml.c:2553 #, c-format msgid "XML does not support infinite date values." msgstr "XML-ს უსასრულო თარიღის მნიშვნელობების მხარდაჭერა არ გააჩნია." -#: utils/adt/xml.c:2512 utils/adt/xml.c:2539 +#: utils/adt/xml.c:2575 utils/adt/xml.c:2602 #, c-format msgid "XML does not support infinite timestamp values." msgstr "XML-ს უსასრულო დროის შტამპის მნიშვნელობების მხარდაჭერა არ გააჩნია." -#: utils/adt/xml.c:2955 +#: utils/adt/xml.c:3018 #, c-format msgid "invalid query" msgstr "არასწორი მოთხოვნა" -#: utils/adt/xml.c:3047 +#: utils/adt/xml.c:3110 #, c-format msgid "portal \"%s\" does not return tuples" msgstr "პორტალი \"%s\" კორტეჟებს არ აბრუნებს" -#: utils/adt/xml.c:4299 +#: utils/adt/xml.c:4362 #, c-format msgid "invalid array for XML namespace mapping" msgstr "" -#: utils/adt/xml.c:4300 +#: utils/adt/xml.c:4363 #, c-format msgid "The array must be two-dimensional with length of the second axis equal to 2." msgstr "" -#: utils/adt/xml.c:4324 +#: utils/adt/xml.c:4387 #, c-format msgid "empty XPath expression" msgstr "ცარიელი XPath გამოხატულება" -#: utils/adt/xml.c:4376 +#: utils/adt/xml.c:4439 #, c-format msgid "neither namespace name nor URI may be null" msgstr "სახელების სივრცის სახელი და URI ნულოვანი არ შეიძლება, იყოს" -#: utils/adt/xml.c:4383 +#: utils/adt/xml.c:4446 #, c-format msgid "could not register XML namespace with name \"%s\" and URI \"%s\"" msgstr "" -#: utils/adt/xml.c:4726 +#: utils/adt/xml.c:4795 #, c-format msgid "DEFAULT namespace is not supported" msgstr "სახელების სივრცე DEFAULT მხარდაუჭერელია" -#: utils/adt/xml.c:4755 +#: utils/adt/xml.c:4824 #, c-format msgid "row path filter must not be empty string" msgstr "მწკრივის ბილიკის ფილტრი ცარიელი სტრიქონი არ შეიძლება იყოს" -#: utils/adt/xml.c:4786 +#: utils/adt/xml.c:4858 #, c-format msgid "column path filter must not be empty string" msgstr "სვეტის ბილიკის ფილტრი ცარიელი სტრიქონი არ შეიძლება იყოს" -#: utils/adt/xml.c:4930 +#: utils/adt/xml.c:5005 #, c-format msgid "more than one value returned by column XPath expression" msgstr "" @@ -26993,27 +26886,27 @@ msgid "cached plan must not change result type" msgstr "დაკეშილი გეგმა შედეგის ტიპს არ უნდა ცვლიდეს" -#: utils/cache/relcache.c:3797 +#: utils/cache/relcache.c:3801 #, c-format msgid "heap relfilenumber value not set when in binary upgrade mode" msgstr "heap relfilenumber-ის მნიშვნელობა ბინარული განახლების დროს დაყენებული არაა" -#: utils/cache/relcache.c:3805 +#: utils/cache/relcache.c:3809 #, c-format msgid "unexpected request for new relfilenumber in binary upgrade mode" msgstr "ახალი relfilenumber-ის მოულოდნელი მოთხოვნა ბინარული განახლების რეჟიმში" -#: utils/cache/relcache.c:6533 +#: utils/cache/relcache.c:6539 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "" -#: utils/cache/relcache.c:6535 +#: utils/cache/relcache.c:6541 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "მაინც ვაგრძელებ, მაგრამ რაღაც ცუდი ხდება." -#: utils/cache/relcache.c:6865 +#: utils/cache/relcache.c:6871 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "კეშის ფაილის \"%s\" წაშლის შეცდომა: %m" @@ -27053,97 +26946,97 @@ msgid "error occurred before error message processing is available\n" msgstr "აღმოჩენილია შეცდომა მანამდე, სანამ შეცდომის შეტყობინებების დამუშავება ხელმისაწვდომი გახდებოდა\n" -#: utils/error/elog.c:2101 +#: utils/error/elog.c:2134 #, c-format msgid "could not reopen file \"%s\" as stderr: %m" msgstr "" -#: utils/error/elog.c:2114 +#: utils/error/elog.c:2147 #, c-format msgid "could not reopen file \"%s\" as stdout: %m" msgstr "" -#: utils/error/elog.c:2150 +#: utils/error/elog.c:2183 #, c-format msgid "Invalid character" msgstr "არასწორი სიმბოლო" -#: utils/error/elog.c:2856 utils/error/elog.c:2883 utils/error/elog.c:2899 +#: utils/error/elog.c:2889 utils/error/elog.c:2916 utils/error/elog.c:2932 msgid "[unknown]" msgstr "[უცნობი]" -#: utils/error/elog.c:3169 utils/error/elog.c:3493 utils/error/elog.c:3600 +#: utils/error/elog.c:3202 utils/error/elog.c:3526 utils/error/elog.c:3633 msgid "missing error text" msgstr "შეცდომის ტექსტი ხელმიუწვდომელია" -#: utils/error/elog.c:3172 utils/error/elog.c:3175 +#: utils/error/elog.c:3205 utils/error/elog.c:3208 #, c-format msgid " at character %d" msgstr " სიმბოლოსთან %d" -#: utils/error/elog.c:3185 utils/error/elog.c:3192 +#: utils/error/elog.c:3218 utils/error/elog.c:3225 msgid "DETAIL: " msgstr "დეტალები: " -#: utils/error/elog.c:3199 +#: utils/error/elog.c:3232 msgid "HINT: " msgstr "მინიშნება: " -#: utils/error/elog.c:3206 +#: utils/error/elog.c:3239 msgid "QUERY: " msgstr "მოთხოვნა: " -#: utils/error/elog.c:3213 +#: utils/error/elog.c:3246 msgid "CONTEXT: " msgstr "კონტექსტი: " -#: utils/error/elog.c:3223 +#: utils/error/elog.c:3256 #, c-format msgid "LOCATION: %s, %s:%d\n" msgstr "მდებარეობა: %s, %s:%d\n" -#: utils/error/elog.c:3230 +#: utils/error/elog.c:3263 #, c-format msgid "LOCATION: %s:%d\n" msgstr "მდებარეობა: %s:%d\n" -#: utils/error/elog.c:3237 +#: utils/error/elog.c:3270 msgid "BACKTRACE: " msgstr "სტეკი: " -#: utils/error/elog.c:3249 +#: utils/error/elog.c:3282 msgid "STATEMENT: " msgstr "ოპერატორი: " -#: utils/error/elog.c:3645 +#: utils/error/elog.c:3678 msgid "DEBUG" msgstr "გამართვა" -#: utils/error/elog.c:3649 +#: utils/error/elog.c:3682 msgid "LOG" msgstr "ჟურნალი" -#: utils/error/elog.c:3652 +#: utils/error/elog.c:3685 msgid "INFO" msgstr "ინფორმაცია" -#: utils/error/elog.c:3655 +#: utils/error/elog.c:3688 msgid "NOTICE" msgstr "გაფრთხილება" -#: utils/error/elog.c:3659 +#: utils/error/elog.c:3692 msgid "WARNING" msgstr "გაფრთხილება" -#: utils/error/elog.c:3662 +#: utils/error/elog.c:3695 msgid "ERROR" msgstr "შეცდომა" -#: utils/error/elog.c:3665 +#: utils/error/elog.c:3698 msgid "FATAL" msgstr "ფატალური" -#: utils/error/elog.c:3668 +#: utils/error/elog.c:3701 msgid "PANIC" msgstr "პანიკა" @@ -27291,177 +27184,177 @@ msgid "could not determine row description for function returning record" msgstr "ჩანაწერის დამბრუნებელი ფუნქციისთვის მწკრივის აღწერის დადგენა შეუძლებელია" -#: utils/init/miscinit.c:352 +#: utils/init/miscinit.c:353 #, c-format msgid "data directory \"%s\" does not exist" msgstr "მონაცემების საქაღალდე არ არსებობს: \"%s\"" -#: utils/init/miscinit.c:357 +#: utils/init/miscinit.c:358 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "საქაღალდის წვდომების წაკითხვა შეუძლებელია \"%s\": %m" -#: utils/init/miscinit.c:365 +#: utils/init/miscinit.c:366 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "მონაცემების მითითებული საქაღალდე \"%s\" საქაღალდე არაა" -#: utils/init/miscinit.c:381 +#: utils/init/miscinit.c:382 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "მონაცემების მითითებული საქაღალდის (\"%s\") მფლობელი არასწორია" -#: utils/init/miscinit.c:383 +#: utils/init/miscinit.c:384 #, c-format msgid "The server must be started by the user that owns the data directory." msgstr "სერვერი იმ მომხმარებლით უნდა გაეშვას, რომელიც მონაცემების საქაღალდის მფლობელია." -#: utils/init/miscinit.c:401 +#: utils/init/miscinit.c:402 #, c-format msgid "data directory \"%s\" has invalid permissions" msgstr "მონაცემების საქაღალდის \"%s\" წვდომები არასწორია" -#: utils/init/miscinit.c:403 +#: utils/init/miscinit.c:404 #, 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:461 +#: utils/init/miscinit.c:462 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "საქაღალდის %s-ზე შეცვლის შეცდომა: %m" -#: utils/init/miscinit.c:697 utils/misc/guc.c:3641 +#: utils/init/miscinit.c:720 utils/misc/guc.c:3650 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "" -#: utils/init/miscinit.c:770 +#: utils/init/miscinit.c:807 #, c-format msgid "role with OID %u does not exist" msgstr "როლი OID-ით %u არ არსებობს" -#: utils/init/miscinit.c:800 +#: utils/init/miscinit.c:853 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "როლს შესვლის უფლება არ აქვს: %s" -#: utils/init/miscinit.c:818 +#: utils/init/miscinit.c:874 #, c-format msgid "too many connections for role \"%s\"" msgstr "მეტისმეტად ბევრი კავშირი როლისთვის \"%s\"" -#: utils/init/miscinit.c:991 +#: utils/init/miscinit.c:1045 #, c-format msgid "invalid role OID: %u" msgstr "როლის არასწორი OID: %u" -#: utils/init/miscinit.c:1138 +#: utils/init/miscinit.c:1192 #, c-format msgid "database system is shut down" msgstr "მონაცემთა ბაზის სისტემა გათიშულია" -#: utils/init/miscinit.c:1225 +#: utils/init/miscinit.c:1279 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "ბლოკის ფაილის (%s) შექმნის შეცდომა: %m" -#: utils/init/miscinit.c:1239 +#: utils/init/miscinit.c:1293 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "ბლოკის ფაილის (%s) გახსნის შეცდომა: %m" -#: utils/init/miscinit.c:1246 +#: utils/init/miscinit.c:1300 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "ბლოკის ფაილის (%s) წაკითხვის შეცდომა: %m" -#: utils/init/miscinit.c:1255 +#: utils/init/miscinit.c:1309 #, c-format msgid "lock file \"%s\" is empty" msgstr "ბლოკის ფაილი (\"%s\") ცარიელია" -#: utils/init/miscinit.c:1256 +#: utils/init/miscinit.c:1310 #, 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:1300 +#: utils/init/miscinit.c:1354 #, c-format msgid "lock file \"%s\" already exists" msgstr "ბლოკის ფაილი (\"%s\") უკვე არსებობს" -#: utils/init/miscinit.c:1304 +#: utils/init/miscinit.c:1358 #, c-format msgid "Is another postgres (PID %d) running in data directory \"%s\"?" msgstr "არის სხვა postgres (PID %d) გაშვებული მონაცემების საქაღალდეში \"%s\"?" -#: utils/init/miscinit.c:1306 +#: utils/init/miscinit.c:1360 #, c-format msgid "Is another postmaster (PID %d) running in data directory \"%s\"?" msgstr "არის სხვა postmaster (PID %d) გაშვებული მონაცემების საქაღლდეში \"%s\"?" -#: utils/init/miscinit.c:1309 +#: utils/init/miscinit.c:1363 #, c-format msgid "Is another postgres (PID %d) using socket file \"%s\"?" msgstr "იყენებს სხვა postgres (PID %d) სოკეტის ფაილს \"%s\"?" -#: utils/init/miscinit.c:1311 +#: utils/init/miscinit.c:1365 #, c-format msgid "Is another postmaster (PID %d) using socket file \"%s\"?" msgstr "იყენებს სხვა postmaster (PID %d) სოკეტის ფაილს \"%s\"?" -#: utils/init/miscinit.c:1362 +#: utils/init/miscinit.c:1416 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "ბლოკის ძველი ფაილის წაშლის შეცდომა \"%s\": %m" -#: utils/init/miscinit.c:1364 +#: utils/init/miscinit.c:1418 #, 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:1401 utils/init/miscinit.c:1415 utils/init/miscinit.c:1426 +#: utils/init/miscinit.c:1455 utils/init/miscinit.c:1469 utils/init/miscinit.c:1480 #, c-format msgid "could not write lock file \"%s\": %m" msgstr "ბლოკის ფაილში (%s) ჩაწერის შეცდომა: %m" -#: utils/init/miscinit.c:1537 utils/init/miscinit.c:1679 utils/misc/guc.c:5715 +#: utils/init/miscinit.c:1591 utils/init/miscinit.c:1733 utils/misc/guc.c:5765 #, c-format msgid "could not read from file \"%s\": %m" msgstr "ფაილიდან (\"%s\") წაკითხვის შეცდომა: %m" -#: utils/init/miscinit.c:1667 +#: utils/init/miscinit.c:1721 #, c-format msgid "could not open file \"%s\": %m; continuing anyway" msgstr "შეცდომა ფაილის (\"%s\") გახსნისას: %m; მაინც ვაგრძელებ" -#: utils/init/miscinit.c:1692 +#: utils/init/miscinit.c:1746 #, c-format msgid "lock file \"%s\" contains wrong PID: %ld instead of %ld" msgstr "ბლოკის ფაილი \"%s\" შეიცავს არასწორ PID-ს: %ld-ს %ld-ის მაგიერ" -#: utils/init/miscinit.c:1731 utils/init/miscinit.c:1747 +#: utils/init/miscinit.c:1785 utils/init/miscinit.c:1801 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "%s მონაცემების არასწორი საქაღალდეა" -#: utils/init/miscinit.c:1733 +#: utils/init/miscinit.c:1787 #, c-format msgid "File \"%s\" is missing." msgstr "ფაილი \"%s\" აკლია." -#: utils/init/miscinit.c:1749 +#: utils/init/miscinit.c:1803 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "ფაილი \"%s\" სწორ მონაცემებს არ შეიცავს." -#: utils/init/miscinit.c:1751 +#: utils/init/miscinit.c:1805 #, c-format msgid "You might need to initdb." msgstr "როგორც ჩანს, initdb გჭირდებათ." -#: utils/init/miscinit.c:1759 +#: utils/init/miscinit.c:1813 #, c-format msgid "The data directory was initialized by PostgreSQL version %s, which is not compatible with this version %s." msgstr "მონაცემის საქაღალდე ინიციალიზებული იყო PostgreSQL-ის %s ვერსიით, რომელიც ამ ვერსიასთან, %s, თავსებადი არაა." @@ -27534,97 +27427,97 @@ msgid "User does not have CONNECT privilege." msgstr "მომხმარებელს CONNECT პრივილეგია არ გააჩნია." -#: utils/init/postinit.c:386 +#: utils/init/postinit.c:389 #, c-format msgid "too many connections for database \"%s\"" msgstr "ძალიან ბევრი კავშირი ბაზისთვის \"%s\"" -#: utils/init/postinit.c:410 utils/init/postinit.c:417 +#: utils/init/postinit.c:413 utils/init/postinit.c:420 #, c-format msgid "database locale is incompatible with operating system" msgstr "ბაზის ენა ოპერაციულ სისტემასთან შეუთავსებელია" -#: utils/init/postinit.c:411 +#: utils/init/postinit.c:414 #, 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:413 utils/init/postinit.c:420 +#: utils/init/postinit.c:416 utils/init/postinit.c:423 #, c-format msgid "Recreate the database with another locale or install the missing locale." msgstr "თავიდან შექმენით ბაზა სხვა ლოკალით ან დააყენეთ ლოკალი, რომელიც ვერ ვიპოვე." -#: utils/init/postinit.c:418 +#: utils/init/postinit.c:421 #, 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:491 +#: utils/init/postinit.c:493 #, c-format msgid "database \"%s\" has a collation version mismatch" msgstr "ბაზის \"%s\" კოლაციის ვერსია არ ემთხვევა" -#: utils/init/postinit.c:493 +#: utils/init/postinit.c:495 #, c-format msgid "The database was created using collation version %s, but the operating system provides version %s." msgstr "" -#: utils/init/postinit.c:496 +#: utils/init/postinit.c:498 #, c-format msgid "Rebuild all objects in this database that use the default collation and run ALTER DATABASE %s REFRESH COLLATION VERSION, or build PostgreSQL with the right library version." msgstr "" -#: utils/init/postinit.c:902 +#: utils/init/postinit.c:904 #, c-format msgid "no roles are defined in this database system" msgstr "ამ მონაცემთა ბაზაში როლები აღწერილი არაა" -#: utils/init/postinit.c:903 +#: utils/init/postinit.c:905 #, c-format msgid "You should immediately run CREATE USER \"%s\" SUPERUSER;." msgstr "მაშინვე უნდა გაუშვათ CREATE USER \"%s\" SUPERUSER;." -#: utils/init/postinit.c:940 +#: utils/init/postinit.c:942 #, c-format msgid "must be superuser to connect in binary upgrade mode" msgstr "ორობითი განახლებისას მისაერთებლად ზემომხმარებელი უნდა ბრძანდებოდეთ" -#: utils/init/postinit.c:961 +#: utils/init/postinit.c:962 #, c-format msgid "remaining connection slots are reserved for roles with the %s attribute" msgstr "დარჩენილი მიერთების სლოტები დაცულია %s ატრიბუტის მქონე როლებისთვის" -#: utils/init/postinit.c:967 +#: utils/init/postinit.c:968 #, c-format msgid "remaining connection slots are reserved for roles with privileges of the \"%s\" role" msgstr "დარჩენილი მიერთების სლოტები დაცულია %s როლის პრივილეგიების მქონე როლებისთვის" -#: utils/init/postinit.c:979 +#: utils/init/postinit.c:980 #, c-format msgid "permission denied to start WAL sender" msgstr "'WAL' გამგზავნის გაშვების წვდომა აკრძალულია" -#: utils/init/postinit.c:980 +#: utils/init/postinit.c:981 #, c-format msgid "Only roles with the %s attribute may start a WAL sender process." msgstr "" -#: utils/init/postinit.c:1098 +#: utils/init/postinit.c:1099 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "როგორც ჩანს, ახლახანს წაიშალა ან სახელი გადაერქვა." -#: utils/init/postinit.c:1102 +#: utils/init/postinit.c:1103 #, c-format msgid "database %u does not exist" msgstr "ბაზა არ არსებობს: %u" -#: utils/init/postinit.c:1111 +#: utils/init/postinit.c:1112 #, c-format msgid "cannot connect to invalid database \"%s\"" msgstr "არასწორ მონაცემთა ბაზასთან \"%s\" დაკავშირება ვერ მოხერხდა" -#: utils/init/postinit.c:1172 +#: utils/init/postinit.c:1173 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "ბაზის ქვესაქაღალდე არ არსებობს: %s." @@ -27717,7 +27610,7 @@ msgid "unrecognized configuration parameter \"%s\" in file \"%s\" line %d" msgstr "უცნობი კონფიგურაციის პარამეტრი \"%s\" ფაილში \"%s\" ხაზზე %d" -#: utils/misc/guc.c:470 utils/misc/guc.c:3495 utils/misc/guc.c:3739 utils/misc/guc.c:3837 utils/misc/guc.c:3935 utils/misc/guc.c:4059 utils/misc/guc.c:4162 +#: utils/misc/guc.c:470 utils/misc/guc.c:3504 utils/misc/guc.c:3748 utils/misc/guc.c:3846 utils/misc/guc.c:3944 utils/misc/guc.c:4071 utils/misc/guc.c:4212 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "პარამეტრი \"%s\" -ის შეცვლა სერვერის გადატვირთვის გარეშე შეუძლებელია" @@ -27826,111 +27719,116 @@ msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g%s%s .. %g%s%s)" msgstr "%g%s%s დაშვებულ დიაპაზონს გარეთაა პარამეტრისთვის \"%s\" (%g%s%s .. %g%s%s)" -#: utils/misc/guc.c:3447 utils/misc/guc_funcs.c:54 +#: utils/misc/guc.c:3465 #, c-format -msgid "cannot set parameters during a parallel operation" -msgstr "პარალელური ოპერაციის დროს პარამეტრების დაყენება შეუძლებელია" +msgid "parameter \"%s\" cannot be set during a parallel operation" +msgstr "პარამეტრს \"%s\" ვერ დააყენებთ პარალელური ოპერაციის დროს" -#: utils/misc/guc.c:3472 utils/misc/guc.c:4646 +#: utils/misc/guc.c:3481 utils/misc/guc.c:4696 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "პარამეტრი \"%s\" არ შეიძლება შეიცვალოს" -#: utils/misc/guc.c:3505 +#: utils/misc/guc.c:3514 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "პარამეტრი \"%s\" ახლა არ შეიძლება შეიცვალოს" -#: utils/misc/guc.c:3532 utils/misc/guc.c:3594 utils/misc/guc.c:4621 utils/misc/guc.c:6712 +#: utils/misc/guc.c:3541 utils/misc/guc.c:3603 utils/misc/guc.c:4671 utils/misc/guc.c:6756 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "პარამეტრის (\"%s\") დაყენების წვდომა აკრძალულია" -#: utils/misc/guc.c:3574 +#: utils/misc/guc.c:3583 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "პარამეტრი \"%s\"-ის დაყენება კავშირის დამყარების შემდეგ შეუძლებელია" -#: utils/misc/guc.c:3633 +#: utils/misc/guc.c:3642 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "უსაფრთხოების აღმწერ ფუნქციაში პარამეტრ \"%s\"-ს ვერ გამოიყენებთ" -#: utils/misc/guc.c:3654 +#: utils/misc/guc.c:3663 #, c-format msgid "parameter \"%s\" cannot be reset" msgstr "პარამეტრის საწყის მნიშვნელობაზე დაბრუნების შეცდომა: \"%s\"" -#: utils/misc/guc.c:3661 +#: utils/misc/guc.c:3670 #, c-format msgid "parameter \"%s\" cannot be set locally in functions" msgstr "პარამეტრი \"%s\"-ის ფუნქციებში ლოკალურად დაყენება შეუძლებელია" -#: utils/misc/guc.c:4320 utils/misc/guc.c:4368 utils/misc/guc.c:5400 +#: utils/misc/guc.c:4370 utils/misc/guc.c:4418 utils/misc/guc.c:5450 #, c-format msgid "permission denied to examine \"%s\"" msgstr "\"%s\"-ის მოსინჯვის წვდომა აკრძალულია" -#: utils/misc/guc.c:4321 utils/misc/guc.c:4369 utils/misc/guc.c:5401 +#: utils/misc/guc.c:4371 utils/misc/guc.c:4419 utils/misc/guc.c:5451 #, c-format msgid "Only roles with privileges of the \"%s\" role may examine this parameter." msgstr "ამ პარამეტრის შემოწმება მხოლოდ \"%s\" პრივილეგიის მქონე როლებს შეუძლიათ." -#: utils/misc/guc.c:4579 +#: utils/misc/guc.c:4629 #, c-format msgid "ALTER SYSTEM is not allowed in this environment" msgstr "ამ გარემოში ALTER SYSTEM დაშვებული არაა" -#: utils/misc/guc.c:4611 +#: utils/misc/guc.c:4661 #, c-format msgid "permission denied to perform ALTER SYSTEM RESET ALL" msgstr "\"ALTER SYSTEM RESET ALL\"-ის შესრულების წვდომა აკრძალულია" -#: utils/misc/guc.c:4690 +#: utils/misc/guc.c:4740 #, c-format msgid "parameter value for ALTER SYSTEM must not contain a newline" msgstr "პარამეტრის მნიშვნელობა ALTER SYSTEM-სთვის არ შეიძლება, ახალი ხაზის სიმბოლოს შეიცავდეს" -#: utils/misc/guc.c:4735 +#: utils/misc/guc.c:4785 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "ფაილის დშემცველობის ამუშავების შეცდომა \"%s\"" -#: utils/misc/guc.c:4917 +#: utils/misc/guc.c:4967 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "პარამეტრის თავიდან აღწერის მცდელობა: \"%s\"" -#: utils/misc/guc.c:5256 +#: utils/misc/guc.c:5306 #, c-format msgid "invalid configuration parameter name \"%s\", removing it" msgstr "კონფიგურაციის პარამეტრის არასწორი სახელი: \"%s\". წაიშლება" -#: utils/misc/guc.c:5258 +#: utils/misc/guc.c:5308 #, c-format msgid "\"%s\" is now a reserved prefix." msgstr "\"%s\" ახლა დაცული პრეფიქსია." -#: utils/misc/guc.c:6135 +#: utils/misc/guc.c:6179 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "პარამეტრის \"%s\" \"%s\"-ზე დაყენებისას" -#: utils/misc/guc.c:6304 +#: utils/misc/guc.c:6348 #, c-format msgid "parameter \"%s\" could not be set" msgstr "პარამეტრის დაყენების შეცდომა: \"%s\"" -#: utils/misc/guc.c:6394 +#: utils/misc/guc.c:6438 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "პარამეტრის მნიშვნელობის დამუშავების შეცდომა: %s" -#: utils/misc/guc.c:6844 +#: utils/misc/guc.c:6888 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "არასწორი მნიშვნელობა პარამეტრისთვის \"%s\": %g" +#: utils/misc/guc_funcs.c:54 +#, c-format +msgid "cannot set parameters during a parallel operation" +msgstr "პარალელური ოპერაციის დროს პარამეტრების დაყენება შეუძლებელია" + #: utils/misc/guc_funcs.c:130 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" @@ -27946,2051 +27844,2055 @@ msgid "SET requires parameter name" msgstr "SET მოითხოვს პარამეტრის სახელს" -#: utils/misc/guc_tables.c:675 +#: utils/misc/guc_tables.c:676 msgid "Ungrouped" msgstr "დაჯგუფება მოხსნილია" -#: utils/misc/guc_tables.c:676 +#: utils/misc/guc_tables.c:677 msgid "File Locations" msgstr "ფაილის მდებარეობები" -#: utils/misc/guc_tables.c:677 +#: utils/misc/guc_tables.c:678 msgid "Connections and Authentication / Connection Settings" msgstr "დაკავშირება და ავთენტიკაცია / შეერთების პარამეტრები" -#: utils/misc/guc_tables.c:678 +#: utils/misc/guc_tables.c:679 msgid "Connections and Authentication / TCP Settings" msgstr "დაკავშირება და ავთენტიკაცია / TCP-ის პარამეტრები" -#: utils/misc/guc_tables.c:679 +#: utils/misc/guc_tables.c:680 msgid "Connections and Authentication / Authentication" msgstr "დაკავშირება და ავთენტიკაცია / ავთენტიკაცია" -#: utils/misc/guc_tables.c:680 +#: utils/misc/guc_tables.c:681 msgid "Connections and Authentication / SSL" msgstr "დაკავშირება და ავთენტიკაცია / SSL" -#: utils/misc/guc_tables.c:681 +#: utils/misc/guc_tables.c:682 msgid "Resource Usage / Memory" msgstr "რესურსების გამოყენება / მეხსიერება" -#: utils/misc/guc_tables.c:682 +#: utils/misc/guc_tables.c:683 msgid "Resource Usage / Disk" msgstr "რესურსების გამოყენება / დისკი" -#: utils/misc/guc_tables.c:683 +#: utils/misc/guc_tables.c:684 msgid "Resource Usage / Kernel Resources" msgstr "რესურსების გამოყენება / ბირთვის რესურსები" -#: utils/misc/guc_tables.c:684 +#: utils/misc/guc_tables.c:685 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "რესურსების გამოყენება / ფასზე-დამოკიდებული დამტვერსასრუტების დაყოვნება" -#: utils/misc/guc_tables.c:685 +#: utils/misc/guc_tables.c:686 msgid "Resource Usage / Background Writer" msgstr "რესურსების გამოყენება / ფონური ჩამწერი" -#: utils/misc/guc_tables.c:686 +#: utils/misc/guc_tables.c:687 msgid "Resource Usage / Asynchronous Behavior" msgstr "რესურსების გამოყენება / ასინქრონული ქცევა" -#: utils/misc/guc_tables.c:687 +#: utils/misc/guc_tables.c:688 msgid "Write-Ahead Log / Settings" msgstr "წინასწარ-ჩაწერი ჟურნალი / მორგება" -#: utils/misc/guc_tables.c:688 +#: utils/misc/guc_tables.c:689 msgid "Write-Ahead Log / Checkpoints" msgstr "წინასწარ-ჩაწერი ჟურნალი / საკონტროლო წერტილები" -#: utils/misc/guc_tables.c:689 +#: utils/misc/guc_tables.c:690 msgid "Write-Ahead Log / Archiving" msgstr "წინასწარ-ჩაწერი ჟურნალი / არქივირება" -#: utils/misc/guc_tables.c:690 +#: utils/misc/guc_tables.c:691 msgid "Write-Ahead Log / Recovery" msgstr "წინასწარ-ჩაწერი ჟურნალი / აღდგენა" -#: utils/misc/guc_tables.c:691 +#: utils/misc/guc_tables.c:692 msgid "Write-Ahead Log / Archive Recovery" msgstr "წინასწარ-ჩაწერი ჟურნალი / არქივის აღდგენა" -#: utils/misc/guc_tables.c:692 +#: utils/misc/guc_tables.c:693 msgid "Write-Ahead Log / Recovery Target" msgstr "წინასწარ-ჩაწერი ჟურნალი / სამიზნის აღდგენა" -#: utils/misc/guc_tables.c:693 +#: utils/misc/guc_tables.c:694 msgid "Write-Ahead Log / Summarization" msgstr "წინასწარ-ჩაწერი ჟურნალი / შეჯამება" -#: utils/misc/guc_tables.c:694 +#: utils/misc/guc_tables.c:695 msgid "Replication / Sending Servers" msgstr "რეპლიკაცია / სერვერების გაგზავნა" -#: utils/misc/guc_tables.c:695 +#: utils/misc/guc_tables.c:696 msgid "Replication / Primary Server" msgstr "რეპლიკაცია / ძირითადი სერვერი" -#: utils/misc/guc_tables.c:696 +#: utils/misc/guc_tables.c:697 msgid "Replication / Standby Servers" msgstr "რეპლიკაცია / უქმე სერვერები" -#: utils/misc/guc_tables.c:697 +#: utils/misc/guc_tables.c:698 msgid "Replication / Subscribers" msgstr "რეპლიკაცია / გამომწერები" -#: utils/misc/guc_tables.c:698 +#: utils/misc/guc_tables.c:699 msgid "Query Tuning / Planner Method Configuration" msgstr "მოთხოვნის მორგება / დამგეგმავის მეთოდის კონფიგურაცია" -#: utils/misc/guc_tables.c:699 +#: utils/misc/guc_tables.c:700 msgid "Query Tuning / Planner Cost Constants" msgstr "მოთხოვნის მორგება / დამგეგმავის ფასის შეზღუდვები" -#: utils/misc/guc_tables.c:700 +#: utils/misc/guc_tables.c:701 msgid "Query Tuning / Genetic Query Optimizer" msgstr "მოთხოვნის მორგება / მოთხოვნის ზოგადი ოპტიმიზატორი" -#: utils/misc/guc_tables.c:701 +#: utils/misc/guc_tables.c:702 msgid "Query Tuning / Other Planner Options" msgstr "მოთხოვნის მორგება / დამგეგმავის სხვა პარამეტრები" -#: utils/misc/guc_tables.c:702 +#: utils/misc/guc_tables.c:703 msgid "Reporting and Logging / Where to Log" msgstr "ანგარიშები და ჟურნალი / სად ჩავწერო ჟურნალი" -#: utils/misc/guc_tables.c:703 +#: utils/misc/guc_tables.c:704 msgid "Reporting and Logging / When to Log" msgstr "ანგარიშები და ჟურნალი / როდის ჩავწერო ჟურნალი" -#: utils/misc/guc_tables.c:704 +#: utils/misc/guc_tables.c:705 msgid "Reporting and Logging / What to Log" msgstr "ანგარიშები და ჟურნალი / რა ჩავწერო ჟურნალში" -#: utils/misc/guc_tables.c:705 +#: utils/misc/guc_tables.c:706 msgid "Reporting and Logging / Process Title" msgstr "ანგარიშები და ჟურნალი / პროცესის სათაური" -#: utils/misc/guc_tables.c:706 +#: utils/misc/guc_tables.c:707 msgid "Statistics / Monitoring" msgstr "სტატისტიკა / მონიტორინგი" -#: utils/misc/guc_tables.c:707 +#: utils/misc/guc_tables.c:708 msgid "Statistics / Cumulative Query and Index Statistics" msgstr "სტატისტიკა / კუმულაციური მოთხოვნისა და ინდექსის სტატისტიკა" -#: utils/misc/guc_tables.c:708 +#: utils/misc/guc_tables.c:709 msgid "Autovacuum" msgstr "ავტომომტვერსასრუტება" -#: utils/misc/guc_tables.c:709 +#: utils/misc/guc_tables.c:710 msgid "Client Connection Defaults / Statement Behavior" msgstr "კლიენტის შეერთების ნაგულისხმევი პარამეტრები / ბრძანების ქცევა" -#: utils/misc/guc_tables.c:710 +#: utils/misc/guc_tables.c:711 msgid "Client Connection Defaults / Locale and Formatting" msgstr "კლიენტის შეერთების ნაგულისხმევი პარამეტრები / ენა და ფორმატირება" -#: utils/misc/guc_tables.c:711 +#: utils/misc/guc_tables.c:712 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "კლიენტის შეერთების ნაგულისხმევი პარამეტრები / გაზიარებული ბიბლიოთეკის წინასწარი ჩატვირთვა" -#: utils/misc/guc_tables.c:712 +#: utils/misc/guc_tables.c:713 msgid "Client Connection Defaults / Other Defaults" msgstr "კლიენტის შეერთების ნაგულისხმევი პარამეტრები / სხვა ნაგულისხმევი პარამეტრები" -#: utils/misc/guc_tables.c:713 +#: utils/misc/guc_tables.c:714 msgid "Lock Management" msgstr "ბლოკის მართვა" -#: utils/misc/guc_tables.c:714 +#: utils/misc/guc_tables.c:715 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "ვერსიისა და პლატფორმის თავსებადობა / PostgreSQL-ის წინა ვერსიები" -#: utils/misc/guc_tables.c:715 +#: utils/misc/guc_tables.c:716 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "ვერსიისა და პლატფორმის თავსებადობა / სხვა პლატფორმები და კლიენტები" -#: utils/misc/guc_tables.c:716 +#: utils/misc/guc_tables.c:717 msgid "Error Handling" msgstr "შეცდომების დამუშავება" -#: utils/misc/guc_tables.c:717 +#: utils/misc/guc_tables.c:718 msgid "Preset Options" msgstr "პრესეტის მორგება" -#: utils/misc/guc_tables.c:718 +#: utils/misc/guc_tables.c:719 msgid "Customized Options" msgstr "ხელით მითითებული პარამეტრები" -#: utils/misc/guc_tables.c:719 +#: utils/misc/guc_tables.c:720 msgid "Developer Options" msgstr "პროგრამისტის პარამეტრები" -#: utils/misc/guc_tables.c:774 +#: utils/misc/guc_tables.c:775 msgid "Enables the planner's use of sequential-scan plans." msgstr "დამგეგმავისთვის მიმდევრობითი სკანირების გეგმების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:784 +#: utils/misc/guc_tables.c:785 msgid "Enables the planner's use of index-scan plans." msgstr "დამგეგმავისთვის ინდექსის სკანირების გეგმების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:794 +#: utils/misc/guc_tables.c:795 msgid "Enables the planner's use of index-only-scan plans." msgstr "დამგეგმავისთვის მხოლოდ ინდექსის სკანირების გეგმების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:804 +#: utils/misc/guc_tables.c:805 msgid "Enables the planner's use of bitmap-scan plans." msgstr "დამგეგმავისთვის ბიტური რუკების სკანირების გეგმების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:814 +#: utils/misc/guc_tables.c:815 msgid "Enables the planner's use of TID scan plans." msgstr "დამგეგმავისთვის TID-ის სკანირების გეგმების გამოყენების უფლები მიცემა." -#: utils/misc/guc_tables.c:824 +#: utils/misc/guc_tables.c:825 msgid "Enables the planner's use of explicit sort steps." msgstr "დამგეგმავისთვის აშკარა დალაგების ნაბიჯების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:834 +#: utils/misc/guc_tables.c:835 msgid "Enables the planner's use of incremental sort steps." msgstr "დამგეგმავისთვის ინკრემენტული დალაგების ნაბიჯების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:844 +#: utils/misc/guc_tables.c:845 msgid "Enables the planner's use of hashed aggregation plans." msgstr "დამგეგმავისთვის დაჰეშიილი აგრეგაციის გეგმების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:854 +#: utils/misc/guc_tables.c:855 msgid "Enables the planner's use of materialization." msgstr "დამგეგმავისთვის მატერიალიზაციის გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:864 +#: utils/misc/guc_tables.c:865 msgid "Enables the planner's use of memoization." msgstr "დამგეგმავისთვის მემოიზაციის გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:874 +#: utils/misc/guc_tables.c:875 msgid "Enables the planner's use of nested-loop join plans." msgstr "დამგეგმავისთვის ერთმანეთში ჩალაგებული მარყუჟი შერწყმის გეგმების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:884 +#: utils/misc/guc_tables.c:885 msgid "Enables the planner's use of merge join plans." msgstr "დამგეგმავისთვის შეერთების გეგმების შერწყმის გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:894 +#: utils/misc/guc_tables.c:895 msgid "Enables the planner's use of hash join plans." msgstr "დამგეგმავისთვის ჰეშის შეერთების გეგმების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:904 +#: utils/misc/guc_tables.c:905 msgid "Enables the planner's use of gather merge plans." msgstr "დამგეგმავისთვის შერწყმის გეგმების შეგროვების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:914 +#: utils/misc/guc_tables.c:915 msgid "Enables partitionwise join." msgstr "დანაყოფის გათვალისწინებით შეერთების ჩართვა." -#: utils/misc/guc_tables.c:924 +#: utils/misc/guc_tables.c:925 msgid "Enables partitionwise aggregation and grouping." msgstr "დანაყოფის გათვალისწინებით აგრეგაციისა და დაჯგუფებს ჩართვა." -#: utils/misc/guc_tables.c:934 +#: utils/misc/guc_tables.c:935 msgid "Enables the planner's use of parallel append plans." msgstr "დამგეგმავისთვის პარალელური ბოლოში მიწერის გეგმების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:944 +#: utils/misc/guc_tables.c:945 msgid "Enables the planner's use of parallel hash plans." msgstr "დამგეგმავისთვის პარალელური ჰეშის გეგმების გამოყენების უფლების მიცემა." -#: utils/misc/guc_tables.c:954 +#: utils/misc/guc_tables.c:955 msgid "Enables plan-time and execution-time partition pruning." msgstr "" -#: utils/misc/guc_tables.c:955 +#: utils/misc/guc_tables.c:956 msgid "Allows the query planner and executor to compare partition bounds to conditions in the query to determine which partitions must be scanned." msgstr "" -#: utils/misc/guc_tables.c:966 +#: utils/misc/guc_tables.c:967 msgid "Enables the planner's ability to produce plans that provide presorted input for ORDER BY / DISTINCT aggregate functions." msgstr "" -#: utils/misc/guc_tables.c:969 +#: utils/misc/guc_tables.c:970 msgid "Allows the query planner to build plans that provide presorted input for aggregate functions with an ORDER BY / DISTINCT clause. When disabled, implicit sorts are always performed during execution." msgstr "" -#: utils/misc/guc_tables.c:981 +#: utils/misc/guc_tables.c:982 msgid "Enables the planner's use of async append plans." msgstr "" -#: utils/misc/guc_tables.c:991 +#: utils/misc/guc_tables.c:992 msgid "Enables reordering of GROUP BY keys." msgstr "გასაღების (GROUP BY) გადალაგების ჩართვა." -#: utils/misc/guc_tables.c:1001 +#: utils/misc/guc_tables.c:1002 msgid "Enables genetic query optimization." msgstr "მოთხოვნების ზოგადი ოპტიმიზაციის ჩართვა." -#: utils/misc/guc_tables.c:1002 +#: utils/misc/guc_tables.c:1003 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "" -#: utils/misc/guc_tables.c:1016 +#: utils/misc/guc_tables.c:1017 msgid "Shows whether the current user is a superuser." msgstr "აჩვენებს, არის მიმდინარე მომხმარებელი ზემომხმარებელი, თუ არა." -#: utils/misc/guc_tables.c:1031 +#: utils/misc/guc_tables.c:1032 msgid "Allows running the ALTER SYSTEM command." msgstr "" -#: utils/misc/guc_tables.c:1032 +#: utils/misc/guc_tables.c:1033 msgid "Can be set to off for environments where global configuration changes should be made using a different method." msgstr "" -#: utils/misc/guc_tables.c:1042 +#: utils/misc/guc_tables.c:1043 msgid "Enables advertising the server via Bonjour." msgstr "სერვისის Bonjour-ით გამოქვეყნების ჩართვა." -#: utils/misc/guc_tables.c:1051 +#: utils/misc/guc_tables.c:1052 msgid "Collects transaction commit time." msgstr "აგროვებს ტრანზაქციის გადაცემის დროს." -#: utils/misc/guc_tables.c:1060 +#: utils/misc/guc_tables.c:1061 msgid "Enables SSL connections." msgstr "SSL შეერთებების ჩართვა." -#: utils/misc/guc_tables.c:1069 +#: utils/misc/guc_tables.c:1070 msgid "Controls whether \"ssl_passphrase_command\" is called during server reload." msgstr "" -#: utils/misc/guc_tables.c:1078 +#: utils/misc/guc_tables.c:1079 msgid "Give priority to server ciphersuite order." msgstr "" -#: utils/misc/guc_tables.c:1087 +#: utils/misc/guc_tables.c:1088 msgid "Forces synchronization of updates to disk." msgstr "დისკის განახლებების ნაძალადევი სინქრონიზაცია." -#: utils/misc/guc_tables.c:1088 +#: utils/misc/guc_tables.c:1089 msgid "The server will use the fsync() system call in several places to make sure that updates are physically written to disk. This ensures that a database cluster will recover to a consistent state after an operating system or hardware crash." msgstr "" -#: utils/misc/guc_tables.c:1099 +#: utils/misc/guc_tables.c:1100 msgid "Continues processing after a checksum failure." msgstr "აგრძელებს დამუშავებას საკონტროლო ჯამის ჩავარდნის შემდეგ." -#: utils/misc/guc_tables.c:1100 +#: utils/misc/guc_tables.c:1101 msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." msgstr "" -#: utils/misc/guc_tables.c:1114 +#: utils/misc/guc_tables.c:1115 msgid "Continues processing past damaged page headers." msgstr "აგრძელებს დამუშავებას დაზიანებული გვერდის თავსართების შემდეგ." -#: utils/misc/guc_tables.c:1115 +#: utils/misc/guc_tables.c:1116 msgid "Detection of a damaged page header normally causes PostgreSQL to report an error, aborting the current transaction. Setting \"zero_damaged_pages\" to true causes the system to instead report a warning, zero out the damaged page, and continue processing. This behavior will destroy data, namely all the rows on the damaged page." msgstr "" -#: utils/misc/guc_tables.c:1128 +#: utils/misc/guc_tables.c:1129 msgid "Continues recovery after an invalid pages failure." msgstr "აგრძელებს აღდგენას არასწორი გვერდის ჩავარდნების შემდეგ." -#: utils/misc/guc_tables.c:1129 +#: utils/misc/guc_tables.c:1130 msgid "Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting \"ignore_invalid_pages\" to true causes the system to ignore invalid page references in WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. Only has an effect during recovery or in standby mode." msgstr "" -#: utils/misc/guc_tables.c:1147 +#: utils/misc/guc_tables.c:1148 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "" -#: utils/misc/guc_tables.c:1148 +#: utils/misc/guc_tables.c:1149 msgid "A page write in process during an operating system crash might be only partially written to disk. During recovery, the row changes stored in WAL are not enough to recover. This option writes pages when first modified after a checkpoint to WAL so full recovery is possible." msgstr "" -#: utils/misc/guc_tables.c:1161 +#: utils/misc/guc_tables.c:1162 msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modification." msgstr "" -#: utils/misc/guc_tables.c:1171 +#: utils/misc/guc_tables.c:1172 msgid "Writes zeroes to new WAL files before first use." msgstr "ახალ WAL-ის ფაილებში მათ პირველ გამოყენებამდე ნულიანების ჩაწერა." -#: utils/misc/guc_tables.c:1181 +#: utils/misc/guc_tables.c:1182 msgid "Recycles WAL files by renaming them." msgstr "WAL-ის ფაილების თავიდან გამოყენება მათი სახელის გადარქმევით." -#: utils/misc/guc_tables.c:1191 +#: utils/misc/guc_tables.c:1192 msgid "Logs each checkpoint." msgstr "საკონტროლო წერტილების ჟურნალში ჩაწერა." -#: utils/misc/guc_tables.c:1200 +#: utils/misc/guc_tables.c:1201 msgid "Logs each successful connection." msgstr "ყოველი წარმატებული შესვლის ჟურნალში ჩაწერა." -#: utils/misc/guc_tables.c:1209 +#: utils/misc/guc_tables.c:1210 msgid "Logs details of pre-authentication connection handshake." msgstr "ჩაიწერს ავთენტიკაციამდე მიერთების ხელის ჩამორთმევის დეტალებს." -#: utils/misc/guc_tables.c:1219 +#: utils/misc/guc_tables.c:1220 msgid "Logs end of a session, including duration." msgstr "სესიის დასრულების ჟურნალში ჩაწერა, ხანგრძლივობის ჩართვლით." -#: utils/misc/guc_tables.c:1228 +#: utils/misc/guc_tables.c:1229 msgid "Logs each replication command." msgstr "რეპლიკაციის ყოველი ბრძანების ჟურნალში ჩაწერა." -#: utils/misc/guc_tables.c:1237 +#: utils/misc/guc_tables.c:1238 msgid "Shows whether the running server has assertion checks enabled." msgstr "" -#: utils/misc/guc_tables.c:1248 +#: utils/misc/guc_tables.c:1249 msgid "Terminate session on any error." msgstr "სესიის დასრულება ნებისმიერი შეცდომის შემთხვევაში." -#: utils/misc/guc_tables.c:1257 +#: utils/misc/guc_tables.c:1258 msgid "Reinitialize server after backend crash." msgstr "უკანაბოლოს ავარიის შემდეგ სერვერის თავიდან ინიციალიზაცია." -#: utils/misc/guc_tables.c:1266 +#: utils/misc/guc_tables.c:1267 msgid "Remove temporary files after backend crash." msgstr "უკანაბოლოს ავარიის შემდეგ დროებითი ფაილების წაშლა." -#: utils/misc/guc_tables.c:1276 +#: utils/misc/guc_tables.c:1277 msgid "Send SIGABRT not SIGQUIT to child processes after backend crash." msgstr "უკანაბოლოს ავარიის შემდეგ შვილი პროცესებისთვის SIGQUIT-ის მაგიერ SIGABRT-ის გაგზავნა." -#: utils/misc/guc_tables.c:1286 +#: utils/misc/guc_tables.c:1287 msgid "Send SIGABRT not SIGKILL to stuck child processes." msgstr "გაჭედილი შვილი პროცესებისთვის SIGKILL-ის მაგიერ SIGABRT-ის გაგზავნა." -#: utils/misc/guc_tables.c:1297 +#: utils/misc/guc_tables.c:1298 msgid "Logs the duration of each completed SQL statement." msgstr "თითოეული დასრულებული SQL გამოსახულების ხანგრძლივობის ჟურნალში ჩაწერა." -#: utils/misc/guc_tables.c:1306 +#: utils/misc/guc_tables.c:1307 msgid "Logs each query's parse tree." msgstr "ჟურნალში თითოეული მოთხოვნის დამუშავების ხის ჩაწერა." -#: utils/misc/guc_tables.c:1315 +#: utils/misc/guc_tables.c:1316 msgid "Logs each query's rewritten parse tree." msgstr "ჟურნალში თითოეული მოთხოვნის გადაწერილი დამუშავების ხის ჩაწერა." -#: utils/misc/guc_tables.c:1324 +#: utils/misc/guc_tables.c:1325 msgid "Logs each query's execution plan." msgstr "ჟურნალში თითოეული მოთხოვნის შესრულების გეგმის ჩაწერა." -#: utils/misc/guc_tables.c:1333 +#: utils/misc/guc_tables.c:1334 msgid "Indents parse and plan tree displays." msgstr "" -#: utils/misc/guc_tables.c:1342 +#: utils/misc/guc_tables.c:1343 msgid "Writes parser performance statistics to the server log." msgstr "დამმუშავებლის წარმადობის სტატისტიკას სერვერის ჟურნალში ჩაწერს." -#: utils/misc/guc_tables.c:1351 +#: utils/misc/guc_tables.c:1352 msgid "Writes planner performance statistics to the server log." msgstr "დამგეგმავის წარმადობის სტატისტიკას სერვერის ჟურნალში ჩაწერს." -#: utils/misc/guc_tables.c:1360 +#: utils/misc/guc_tables.c:1361 msgid "Writes executor performance statistics to the server log." msgstr "შემსრულებლის წარმადობის სტატისტიკას სერვერის ჟურნალში ჩაწერს." -#: utils/misc/guc_tables.c:1369 +#: utils/misc/guc_tables.c:1370 msgid "Writes cumulative performance statistics to the server log." msgstr "საერთო წარმადობის სტატისტიკას სერვერის ჟურნალში ჩაწერს." -#: utils/misc/guc_tables.c:1379 +#: utils/misc/guc_tables.c:1380 msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." msgstr "" -#: utils/misc/guc_tables.c:1391 +#: utils/misc/guc_tables.c:1392 msgid "Collects information about executing commands." msgstr "აგროვებს ინფორმაციას ბრძანებების შესრულების შესახებ." -#: utils/misc/guc_tables.c:1392 +#: utils/misc/guc_tables.c:1393 msgid "Enables the collection of information on the currently executing command of each session, along with the time at which that command began execution." msgstr "" -#: utils/misc/guc_tables.c:1402 +#: utils/misc/guc_tables.c:1403 msgid "Collects statistics on database activity." msgstr "აგროვებს სტატისტიკას ბაზის აქტივობების შესახებ." -#: utils/misc/guc_tables.c:1411 +#: utils/misc/guc_tables.c:1412 msgid "Collects timing statistics for database I/O activity." msgstr "აგროვებს ბაზის შეყვანა/გამოტანის აქტივობების დროით სტატისტიკას." -#: utils/misc/guc_tables.c:1420 +#: utils/misc/guc_tables.c:1421 msgid "Collects timing statistics for WAL I/O activity." msgstr "აგროვებს WAL-ის შეყვანა/გამოტანის აქტივობების დროით სტატისტიკას." -#: utils/misc/guc_tables.c:1430 +#: utils/misc/guc_tables.c:1431 msgid "Updates the process title to show the active SQL command." msgstr "განახლებს პროცესის სათაურს, რათა მან აქტიური SQL ბრძანება აჩვენოს." -#: utils/misc/guc_tables.c:1431 +#: utils/misc/guc_tables.c:1432 msgid "Enables updating of the process title every time a new SQL command is received by the server." msgstr "" -#: utils/misc/guc_tables.c:1440 +#: utils/misc/guc_tables.c:1441 msgid "Starts the autovacuum subprocess." msgstr "ავტომომტვერსასრუტების ქვეპროცესის გაშვება." -#: utils/misc/guc_tables.c:1450 +#: utils/misc/guc_tables.c:1451 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "LISTEN-ის და NOTIFY-ის გამართვის შეტყობინებების გენერაცია." -#: utils/misc/guc_tables.c:1462 +#: utils/misc/guc_tables.c:1463 msgid "Emits information about lock usage." msgstr "ბლოკის გამოყენების შესახებ ინფორმაციის გამოტანა." -#: utils/misc/guc_tables.c:1472 +#: utils/misc/guc_tables.c:1473 msgid "Emits information about user lock usage." msgstr "მომხმარებლის ბლოკის გამოყენების შესახებ ინფორმაციის გამოტანა." -#: utils/misc/guc_tables.c:1482 +#: utils/misc/guc_tables.c:1483 msgid "Emits information about lightweight lock usage." msgstr "მსუბუქი ბლოკის გამოყენების შესახებ ინფორმაციის გამოტანა." -#: utils/misc/guc_tables.c:1492 +#: utils/misc/guc_tables.c:1493 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "" -#: utils/misc/guc_tables.c:1504 +#: utils/misc/guc_tables.c:1505 msgid "Logs long lock waits." msgstr "ბლოკირების დიდხნიანია ლოდინის ჟურნალში ჩაწერა." -#: utils/misc/guc_tables.c:1513 +#: utils/misc/guc_tables.c:1514 msgid "Logs standby recovery conflict waits." msgstr "მომლოდინის აღდგენის კონფლიქტის ლოდინების ჟურნალში ჩაწერა." -#: utils/misc/guc_tables.c:1522 +#: utils/misc/guc_tables.c:1523 msgid "Logs the host name in the connection logs." msgstr "ჟურნალში ჰოსტის სახელის ჩაწერა." -#: utils/misc/guc_tables.c:1523 +#: utils/misc/guc_tables.c:1524 msgid "By default, connection logs only show the IP address of the connecting host. If you want them to show the host name you can turn this on, but depending on your host name resolution setup it might impose a non-negligible performance penalty." msgstr "" -#: utils/misc/guc_tables.c:1534 +#: utils/misc/guc_tables.c:1535 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "\"expr=NULL\" მიღებული იქნება, როგორც \"expr IS NULL\"." -#: utils/misc/guc_tables.c:1535 +#: utils/misc/guc_tables.c:1536 msgid "When turned on, expressions of the form expr = NULL (or NULL = expr) are treated as expr IS NULL, that is, they return true if expr evaluates to the null value, and false otherwise. The correct behavior of expr = NULL is to always return null (unknown)." msgstr "" -#: utils/misc/guc_tables.c:1547 +#: utils/misc/guc_tables.c:1548 msgid "Sets the default read-only status of new transactions." msgstr "ახალი ტრანზაქციების მხოლოდ კითხვადობის სტატუსის ნაგულისხმევად დაყენება." -#: utils/misc/guc_tables.c:1557 +#: utils/misc/guc_tables.c:1558 msgid "Sets the current transaction's read-only status." msgstr "მიმდინარე ტრანზაქციის მხოლოდ-კითხვადობის სტატუსის დაყენება." -#: utils/misc/guc_tables.c:1567 +#: utils/misc/guc_tables.c:1568 msgid "Sets the default deferrable status of new transactions." msgstr "" -#: utils/misc/guc_tables.c:1576 +#: utils/misc/guc_tables.c:1577 msgid "Whether to defer a read-only serializable transaction until it can be executed with no possible serialization failures." msgstr "" -#: utils/misc/guc_tables.c:1586 +#: utils/misc/guc_tables.c:1587 msgid "Enable row security." msgstr "მწკრივების უსაფრთხოების ჩართვა." -#: utils/misc/guc_tables.c:1587 +#: utils/misc/guc_tables.c:1588 msgid "When enabled, row security will be applied to all users." msgstr "თუ ჩართავთ, მწკრივის უსაფრთხოება ყველა მომხმარებელზე გადატარდება." -#: utils/misc/guc_tables.c:1595 +#: utils/misc/guc_tables.c:1596 msgid "Check routine bodies during CREATE FUNCTION and CREATE PROCEDURE." msgstr "ქვეპროგრამის სხეულების შემოწმება CREATE FUNCTION-ის და CREATE PROCEDURE-ის დროს." -#: utils/misc/guc_tables.c:1604 +#: utils/misc/guc_tables.c:1605 msgid "Enable input of NULL elements in arrays." msgstr "მასივებში NULL ტიპის ელემენტების შეყვანის ჩართვა." -#: utils/misc/guc_tables.c:1605 +#: utils/misc/guc_tables.c:1606 msgid "When turned on, unquoted NULL in an array input value means a null value; otherwise it is taken literally." msgstr "" -#: utils/misc/guc_tables.c:1621 +#: utils/misc/guc_tables.c:1622 msgid "WITH OIDS is no longer supported; this can only be false." msgstr "WITH OIDS მხარდაჭერილი აღარაა. ის ყოველთვის ნულის ტოლია." -#: utils/misc/guc_tables.c:1631 -msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." +#: utils/misc/guc_tables.c:1632 +msgid "Start a subprocess to capture stderr, csvlog and/or jsonlog into log files." msgstr "" -#: utils/misc/guc_tables.c:1640 +#: utils/misc/guc_tables.c:1641 msgid "Truncate existing log files of same name during log rotation." msgstr "" -#: utils/misc/guc_tables.c:1651 +#: utils/misc/guc_tables.c:1652 msgid "Emit information about resource usage in sorting." msgstr "ინფორმაციის გამოტანა დალაგების მიერ რესურსების გამოყენების შესახებ." -#: utils/misc/guc_tables.c:1665 +#: utils/misc/guc_tables.c:1666 msgid "Generate debugging output for synchronized scanning." msgstr "სინქრონიზებული სკანირების შესახებ გამართვის ინფორმაციის გამოტანა." -#: utils/misc/guc_tables.c:1680 +#: utils/misc/guc_tables.c:1681 msgid "Enable bounded sorting using heap sort." msgstr "" -#: utils/misc/guc_tables.c:1693 +#: utils/misc/guc_tables.c:1694 msgid "Emit WAL-related debugging output." msgstr "'WAL'-თან დაკავშირებული გამართვის ინფორმაციის გამოტანა." -#: utils/misc/guc_tables.c:1705 +#: utils/misc/guc_tables.c:1706 msgid "Shows whether datetimes are integer based." msgstr "აჩვენებს, არის თუ არა თარიღი და დრო მთელი რიცხვი." -#: utils/misc/guc_tables.c:1716 +#: utils/misc/guc_tables.c:1717 msgid "Sets whether Kerberos and GSSAPI user names should be treated as case-insensitive." msgstr "იქნება Kerberos-ის და GSSAPI-ის მომხმარებლის სახელები რეგისტრზე-დამოკიდებული, თუ არა." -#: utils/misc/guc_tables.c:1726 +#: utils/misc/guc_tables.c:1727 msgid "Sets whether GSSAPI delegation should be accepted from the client." msgstr "მივიღებთ კლიენტიდან GSSAPI-ის დელეგაციას, თუ არა." -#: utils/misc/guc_tables.c:1736 +#: utils/misc/guc_tables.c:1737 msgid "Warn about backslash escapes in ordinary string literals." msgstr "" -#: utils/misc/guc_tables.c:1746 +#: utils/misc/guc_tables.c:1747 msgid "Causes '...' strings to treat backslashes literally." msgstr "" -#: utils/misc/guc_tables.c:1757 +#: utils/misc/guc_tables.c:1758 msgid "Enable synchronized sequential scans." msgstr "სინქრონული მიმდევრობითი სკანირებების ჩართვა." -#: utils/misc/guc_tables.c:1767 +#: utils/misc/guc_tables.c:1768 msgid "Sets whether to include or exclude transaction with recovery target." msgstr "აყენებს იქნება ჩასმული ტრანზაქცია აღდგენის სამიზნესთან ერთად, თუ არა." -#: utils/misc/guc_tables.c:1777 +#: utils/misc/guc_tables.c:1778 msgid "Starts the WAL summarizer process to enable incremental backup." msgstr "" -#: utils/misc/guc_tables.c:1787 +#: utils/misc/guc_tables.c:1788 msgid "Allows connections and queries during recovery." msgstr "აღდგენისას მიერთებების და მოთხოვნების დაშვება." -#: utils/misc/guc_tables.c:1797 +#: utils/misc/guc_tables.c:1798 msgid "Allows feedback from a hot standby to the primary that will avoid query conflicts." msgstr "" -#: utils/misc/guc_tables.c:1807 +#: utils/misc/guc_tables.c:1808 msgid "Shows whether hot standby is currently active." msgstr "აჩვენებს, ამჟამად ცხელი მომლოდინე აქტიურია, თუ არა." -#: utils/misc/guc_tables.c:1818 +#: utils/misc/guc_tables.c:1819 msgid "Allows modifications of the structure of system tables." msgstr "სისტემური ცხრილების სტრუქტურის ცვლილების დაშვება." -#: utils/misc/guc_tables.c:1829 +#: utils/misc/guc_tables.c:1830 msgid "Disables reading from system indexes." msgstr "სისტემური ინდექსებიდან კითხვის გამორთვა." -#: utils/misc/guc_tables.c:1830 +#: utils/misc/guc_tables.c:1831 msgid "It does not prevent updating the indexes, so it is safe to use. The worst consequence is slowness." msgstr "ის ინდექსების განახლებას ხელს არ უშლის, ასე რომ, გამოსაყენებლად უსაფრთხოა. ყველაზე ცუდი, რაც სჭირს, ნელია." -#: utils/misc/guc_tables.c:1841 +#: utils/misc/guc_tables.c:1842 msgid "Allows tablespaces directly inside pg_tblspc, for testing." msgstr "გამოსაცდელად ცხრილის სივრცეების პირდაპირ ph_tblspc-ში დაშვება." -#: utils/misc/guc_tables.c:1852 +#: utils/misc/guc_tables.c:1853 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "დიდი ობიექტების პრივილეგიების შემოწმების წინა ვერსიებთან თავსებადი რეჟიმის ჩართვა." -#: utils/misc/guc_tables.c:1853 +#: utils/misc/guc_tables.c:1854 msgid "Skips privilege checks when reading or modifying large objects, for compatibility with PostgreSQL releases prior to 9.0." msgstr "PostgreSQL-ის 9.0 და უფრო ძველ ვერსიებთან თავსებადობისთვის პრივილეგიების შემოწმების გამოტოვება, დიდი ობიექტების კითხვისა და შეცვლისას." -#: utils/misc/guc_tables.c:1863 +#: utils/misc/guc_tables.c:1864 msgid "When generating SQL fragments, quote all identifiers." msgstr "SQL ფრაგმენტების გენერაციისას ყველა იდენტიფიკატორის ბრჭყალებში ჩასმა." -#: utils/misc/guc_tables.c:1873 +#: utils/misc/guc_tables.c:1874 msgid "Shows whether data checksums are turned on for this cluster." msgstr "აჩვენებს, ამ კლასტერზე მონაცემების საკონტროლო ჯამები ჩართულია, თუ არა." -#: utils/misc/guc_tables.c:1884 +#: utils/misc/guc_tables.c:1885 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "დუბლირებული შეტყობინებების შეკვეცის თავიდან ასაცილებლად ჟურნალში გაგზავნილი შეტყობინებებისთვის მიმდევრობის ნომრის დამატება." -#: utils/misc/guc_tables.c:1894 +#: utils/misc/guc_tables.c:1895 msgid "Split messages sent to syslog by lines and to fit into 1024 bytes." msgstr "Syslog-ისთვის გაგზავნილი შეტყობინებების დაჭრა და 1024 ბაიტში ჩატევა." -#: utils/misc/guc_tables.c:1904 +#: utils/misc/guc_tables.c:1905 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "" -#: utils/misc/guc_tables.c:1905 +#: utils/misc/guc_tables.c:1906 msgid "Should gather nodes also run subplans or just gather tuples?" msgstr "" -#: utils/misc/guc_tables.c:1915 +#: utils/misc/guc_tables.c:1916 msgid "Allow JIT compilation." msgstr "JIT კომპილაციის ჩართვა." -#: utils/misc/guc_tables.c:1926 +#: utils/misc/guc_tables.c:1927 msgid "Register JIT-compiled functions with debugger." msgstr "JIT-ით კომპილირებული ფუნქციების გამმართველთან რეგისტრაცია." -#: utils/misc/guc_tables.c:1943 +#: utils/misc/guc_tables.c:1944 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "" -#: utils/misc/guc_tables.c:1954 +#: utils/misc/guc_tables.c:1955 msgid "Allow JIT compilation of expressions." msgstr "გამოსახულებების JIT კომპილაციის დაშვება." -#: utils/misc/guc_tables.c:1965 +#: utils/misc/guc_tables.c:1966 msgid "Register JIT-compiled functions with perf profiler." msgstr "" -#: utils/misc/guc_tables.c:1982 +#: utils/misc/guc_tables.c:1983 msgid "Allow JIT compilation of tuple deforming." msgstr "კორტეჟის დეფორმაციის JIT კომპილაციის დაშვება." -#: utils/misc/guc_tables.c:1993 +#: utils/misc/guc_tables.c:1994 msgid "Whether to continue running after a failure to sync data files." msgstr "გაგრძელდება მუშაობა მონაცემის ფაილების სინქრონიზაციის ჩავარდნის შემდეგ, თუ არა." -#: utils/misc/guc_tables.c:2002 +#: utils/misc/guc_tables.c:2003 msgid "Sets whether a WAL receiver should create a temporary replication slot if no permanent slot is configured." msgstr "" -#: utils/misc/guc_tables.c:2011 +#: utils/misc/guc_tables.c:2012 msgid "Enables event triggers." msgstr "ჩართავს მოვლენის ტრიგერებს." -#: utils/misc/guc_tables.c:2012 +#: utils/misc/guc_tables.c:2013 msgid "When enabled, event triggers will fire for all applicable statements." msgstr "" -#: utils/misc/guc_tables.c:2021 -msgid "Enables a physical standby to synchronize logical failover slots from the primary server." -msgstr "" +#: utils/misc/guc_tables.c:2022 +msgid "Enables a physical standby to synchronize logical failover replication slots from the primary server." +msgstr "საშუალებას აძლევს ფიზიკურ უქმეს სინქრონიზაციას ლოგიკური წარუმატებლობის რეპლიკაციის სლოტები პირველადი სერვერიდან." -#: utils/misc/guc_tables.c:2039 +#: utils/misc/guc_tables.c:2040 msgid "Sets the amount of time to wait before forcing a switch to the next WAL file." msgstr "" -#: utils/misc/guc_tables.c:2050 +#: utils/misc/guc_tables.c:2051 msgid "Sets the amount of time to wait after authentication on connection startup." msgstr "" -#: utils/misc/guc_tables.c:2052 utils/misc/guc_tables.c:2774 +#: utils/misc/guc_tables.c:2053 utils/misc/guc_tables.c:2780 msgid "This allows attaching a debugger to the process." msgstr "პროცესისთვის გამმართველის მიბმის უფლების მიცემა." -#: utils/misc/guc_tables.c:2061 +#: utils/misc/guc_tables.c:2062 msgid "Sets the default statistics target." msgstr "სტატისტიკის ნაგულისხმევი სამიზნის დაყენება." -#: utils/misc/guc_tables.c:2062 +#: utils/misc/guc_tables.c:2063 msgid "This applies to table columns that have not had a column-specific target set via ALTER TABLE SET STATISTICS." msgstr "" -#: utils/misc/guc_tables.c:2071 +#: utils/misc/guc_tables.c:2072 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "" -#: utils/misc/guc_tables.c:2073 +#: utils/misc/guc_tables.c:2074 msgid "The planner will merge subqueries into upper queries if the resulting FROM list would have no more than this many items." msgstr "" -#: utils/misc/guc_tables.c:2084 +#: utils/misc/guc_tables.c:2085 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "" -#: utils/misc/guc_tables.c:2086 +#: utils/misc/guc_tables.c:2087 msgid "The planner will flatten explicit JOIN constructs into lists of FROM items whenever a list of no more than this many items would result." msgstr "" -#: utils/misc/guc_tables.c:2097 +#: utils/misc/guc_tables.c:2098 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "" -#: utils/misc/guc_tables.c:2107 +#: utils/misc/guc_tables.c:2108 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "" -#: utils/misc/guc_tables.c:2117 +#: utils/misc/guc_tables.c:2118 msgid "GEQO: number of individuals in the population." msgstr "GEQO: ინდივიდების რაოდენობა პოპულაციაში." -#: utils/misc/guc_tables.c:2118 utils/misc/guc_tables.c:2128 +#: utils/misc/guc_tables.c:2119 utils/misc/guc_tables.c:2129 msgid "Zero selects a suitable default value." msgstr "ნული შესაბამის ნაგულისხმევ მნიშვნელობას აირჩევს." -#: utils/misc/guc_tables.c:2127 +#: utils/misc/guc_tables.c:2128 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: ალგორითმის იტერაციების რაოდენობა." -#: utils/misc/guc_tables.c:2139 +#: utils/misc/guc_tables.c:2140 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "" -#: utils/misc/guc_tables.c:2150 +#: utils/misc/guc_tables.c:2151 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing archived WAL data." msgstr "" -#: utils/misc/guc_tables.c:2161 +#: utils/misc/guc_tables.c:2162 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing streamed WAL data." msgstr "" -#: utils/misc/guc_tables.c:2172 +#: utils/misc/guc_tables.c:2173 msgid "Sets the minimum delay for applying changes during recovery." msgstr "აღდგენისას ცვლილებების გადატარების მინიმალური დაყოვნების დაყენება." -#: utils/misc/guc_tables.c:2183 +#: utils/misc/guc_tables.c:2184 msgid "Sets the maximum interval between WAL receiver status reports to the sending server." msgstr "" -#: utils/misc/guc_tables.c:2194 +#: utils/misc/guc_tables.c:2195 msgid "Sets the maximum wait time to receive data from the sending server." msgstr "" -#: utils/misc/guc_tables.c:2205 +#: utils/misc/guc_tables.c:2206 msgid "Sets the maximum number of concurrent connections." msgstr "აყენებს ერთდროული შეერთებების მაქსიმალურ რაოდენობას." -#: utils/misc/guc_tables.c:2216 +#: utils/misc/guc_tables.c:2217 msgid "Sets the number of connection slots reserved for superusers." msgstr "აყენებს ზემომხმარებლებისთვის რეზერვირებული შეერთების სლოტებს." -#: utils/misc/guc_tables.c:2226 +#: utils/misc/guc_tables.c:2227 msgid "Sets the number of connection slots reserved for roles with privileges of pg_use_reserved_connections." msgstr "" -#: utils/misc/guc_tables.c:2237 +#: utils/misc/guc_tables.c:2238 msgid "Amount of dynamic shared memory reserved at startup." msgstr "გაშვებისას დარეზერვებული დინამიური გაზიარებული მეხსიერების რაოდენობა." -#: utils/misc/guc_tables.c:2252 +#: utils/misc/guc_tables.c:2253 msgid "Sets the number of shared memory buffers used by the server." msgstr "სერვერის მიერ გამოყენებული გაზიარებული მეხსიერების ბაფერების რაოდენობის დაყენება." -#: utils/misc/guc_tables.c:2263 +#: utils/misc/guc_tables.c:2264 msgid "Sets the buffer pool size for VACUUM, ANALYZE, and autovacuum." msgstr "ბუფერი პულის ზომა VACUUM, ANALYZE და ავტომომტვერსასრუტებისთვის." -#: utils/misc/guc_tables.c:2274 +#: utils/misc/guc_tables.c:2275 msgid "Shows the size of the server's main shared memory area (rounded up to the nearest MB)." msgstr "" -#: utils/misc/guc_tables.c:2285 +#: utils/misc/guc_tables.c:2286 msgid "Shows the number of huge pages needed for the main shared memory area." msgstr "" -#: utils/misc/guc_tables.c:2286 +#: utils/misc/guc_tables.c:2287 msgid "-1 indicates that the value could not be determined." msgstr "-1 ნიშნავს, რომ მნიშვნელობა ვერ განისაზღვრა." -#: utils/misc/guc_tables.c:2296 +#: utils/misc/guc_tables.c:2297 msgid "Sets the size of the dedicated buffer pool used for the commit timestamp cache." msgstr "" -#: utils/misc/guc_tables.c:2297 utils/misc/guc_tables.c:2352 utils/misc/guc_tables.c:2363 +#: utils/misc/guc_tables.c:2298 utils/misc/guc_tables.c:2353 utils/misc/guc_tables.c:2364 msgid "Specify 0 to have this value determined as a fraction of shared_buffers." msgstr "" -#: utils/misc/guc_tables.c:2307 +#: utils/misc/guc_tables.c:2308 msgid "Sets the size of the dedicated buffer pool used for the MultiXact member cache." msgstr "" -#: utils/misc/guc_tables.c:2318 +#: utils/misc/guc_tables.c:2319 msgid "Sets the size of the dedicated buffer pool used for the MultiXact offset cache." msgstr "" -#: utils/misc/guc_tables.c:2329 +#: utils/misc/guc_tables.c:2330 msgid "Sets the size of the dedicated buffer pool used for the LISTEN/NOTIFY message cache." msgstr "" -#: utils/misc/guc_tables.c:2340 +#: utils/misc/guc_tables.c:2341 msgid "Sets the size of the dedicated buffer pool used for the serializable transaction cache." msgstr "" -#: utils/misc/guc_tables.c:2351 -msgid "Sets the size of the dedicated buffer pool used for the sub-transaction cache." +#: utils/misc/guc_tables.c:2352 +msgid "Sets the size of the dedicated buffer pool used for the subtransaction cache." msgstr "" -#: utils/misc/guc_tables.c:2362 +#: utils/misc/guc_tables.c:2363 msgid "Sets the size of the dedicated buffer pool used for the transaction status cache." msgstr "" -#: utils/misc/guc_tables.c:2373 +#: utils/misc/guc_tables.c:2374 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "" -#: utils/misc/guc_tables.c:2384 +#: utils/misc/guc_tables.c:2385 msgid "Sets the TCP port the server listens on." msgstr "TCP პორტის მითითება, რომელზეც სერვერი უსმენს." -#: utils/misc/guc_tables.c:2394 +#: utils/misc/guc_tables.c:2395 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Unix-დომენის სოკეტზე წვდომის უფლებების დაყენება." -#: utils/misc/guc_tables.c:2395 +#: utils/misc/guc_tables.c:2396 msgid "Unix-domain sockets use the usual Unix file system permission set. The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "" -#: utils/misc/guc_tables.c:2409 +#: utils/misc/guc_tables.c:2410 msgid "Sets the file permissions for log files." msgstr "ჟურნალის ფაილების წვდომების დაყენება." -#: utils/misc/guc_tables.c:2410 +#: utils/misc/guc_tables.c:2411 msgid "The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "" -#: utils/misc/guc_tables.c:2424 +#: utils/misc/guc_tables.c:2425 msgid "Shows the mode of the data directory." msgstr "მონაცემების საქაღალდის წვდომის ჩვენება." -#: utils/misc/guc_tables.c:2425 +#: utils/misc/guc_tables.c:2426 msgid "The parameter value is a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "" -#: utils/misc/guc_tables.c:2438 +#: utils/misc/guc_tables.c:2439 msgid "Sets the maximum memory to be used for query workspaces." msgstr "მოთხოვნის სამუშაო სივრცის მიერ გამოყენებული მეხსიერების მაქსიმალური რაოდენობის დაყენება." -#: utils/misc/guc_tables.c:2439 +#: utils/misc/guc_tables.c:2440 msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." msgstr "" -#: utils/misc/guc_tables.c:2451 +#: utils/misc/guc_tables.c:2457 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "ტექნიკური ოპერაციებისთვის გამოყენებული მეხსიერების მაქსიმალური რაოდენობის დაყენება." -#: utils/misc/guc_tables.c:2452 +#: utils/misc/guc_tables.c:2458 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "მოიცავს ისეთ ოპერაციებს, როგორებიცაა VACUUM და CREATE INDEX." -#: utils/misc/guc_tables.c:2462 +#: utils/misc/guc_tables.c:2468 msgid "Sets the maximum memory to be used for logical decoding." msgstr "ლოგიკური გაშიფვრისთვის გამოყენებული მეხსიერების მაქსიმალური რაოდენობის დაყენება." -#: utils/misc/guc_tables.c:2463 +#: utils/misc/guc_tables.c:2469 msgid "This much memory can be used by each internal reorder buffer before spilling to disk." msgstr "" -#: utils/misc/guc_tables.c:2479 +#: utils/misc/guc_tables.c:2485 msgid "Sets the maximum stack depth, in kilobytes." msgstr "სტეკის მაქსიმალური სიღრმე კილობაიტებში." -#: utils/misc/guc_tables.c:2490 +#: utils/misc/guc_tables.c:2496 msgid "Limits the total size of all temporary files used by each process." msgstr "" -#: utils/misc/guc_tables.c:2491 +#: utils/misc/guc_tables.c:2497 msgid "-1 means no limit." msgstr "-1 ნიშნავს ლიმიტის გარეშე." -#: utils/misc/guc_tables.c:2501 +#: utils/misc/guc_tables.c:2507 msgid "Vacuum cost for a page found in the buffer cache." msgstr "ბაფერის ქეშში ნაპოვნი გვერდის მომტვერსასრუტების ფასი." -#: utils/misc/guc_tables.c:2511 +#: utils/misc/guc_tables.c:2517 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "ბაფერის ქეშში გვერდის მომტვერსასრუტების ფასი ნაპოვნი არაა." -#: utils/misc/guc_tables.c:2521 +#: utils/misc/guc_tables.c:2527 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "" -#: utils/misc/guc_tables.c:2531 +#: utils/misc/guc_tables.c:2537 msgid "Vacuum cost amount available before napping." msgstr "" -#: utils/misc/guc_tables.c:2541 +#: utils/misc/guc_tables.c:2547 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "" -#: utils/misc/guc_tables.c:2551 +#: utils/misc/guc_tables.c:2557 msgid "Sets the maximum number of simultaneously open files for each server process." msgstr "" -#: utils/misc/guc_tables.c:2564 +#: utils/misc/guc_tables.c:2570 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "" -#: utils/misc/guc_tables.c:2575 +#: utils/misc/guc_tables.c:2581 msgid "Sets the minimum OID of tables for tracking locks." msgstr "" -#: utils/misc/guc_tables.c:2576 +#: utils/misc/guc_tables.c:2582 msgid "Is used to avoid output on system tables." msgstr "გამოიყენება სისტემურ ცხრილებზე გამოტანის თავიდან ასაცილებლად." -#: utils/misc/guc_tables.c:2585 +#: utils/misc/guc_tables.c:2591 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "" -#: utils/misc/guc_tables.c:2597 +#: utils/misc/guc_tables.c:2603 msgid "Sets the maximum allowed duration of any statement." msgstr "აყენებს ნებისმიერი გამოსახულების დაშვებულ მაქსიმალურ ხანგრძლივობას." -#: utils/misc/guc_tables.c:2598 utils/misc/guc_tables.c:2609 utils/misc/guc_tables.c:2620 utils/misc/guc_tables.c:2631 utils/misc/guc_tables.c:2642 +#: utils/misc/guc_tables.c:2604 utils/misc/guc_tables.c:2615 utils/misc/guc_tables.c:2626 utils/misc/guc_tables.c:2637 utils/misc/guc_tables.c:2648 msgid "A value of 0 turns off the timeout." msgstr "0 მოლოდინის ვადას გამორთავს." -#: utils/misc/guc_tables.c:2608 +#: utils/misc/guc_tables.c:2614 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "აყენებს ბლოკირების ნებისმიერი მოლოდინისთვის დაშვებულ მაქსიმალურ ხანგრძლივობას." -#: utils/misc/guc_tables.c:2619 +#: utils/misc/guc_tables.c:2625 msgid "Sets the maximum allowed idle time between queries, when in a transaction." msgstr "აყენებს მაქსიმალურ დაყოვნებას მოთხოვნებს შორის, როცა ის ტრანზაქციაშია." -#: utils/misc/guc_tables.c:2630 +#: utils/misc/guc_tables.c:2636 msgid "Sets the maximum allowed duration of any transaction within a session (not a prepared transaction)." msgstr "აყენებს მაქსიმალურ დაშვებულ ხანგრძლივობას ნებისმიერი ტრანზაქციისთვის სესიის შიგნით (მომზადებული ტრანზაქცია არაა)." -#: utils/misc/guc_tables.c:2641 +#: utils/misc/guc_tables.c:2647 msgid "Sets the maximum allowed idle time between queries, when not in a transaction." msgstr "აყენებს მაქსიმალურ დაყოვნებას მოთხოვნებს შორის, როცა ის ტრანზაქციაში არაა." -#: utils/misc/guc_tables.c:2652 +#: utils/misc/guc_tables.c:2658 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "" -#: utils/misc/guc_tables.c:2662 +#: utils/misc/guc_tables.c:2668 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "" -#: utils/misc/guc_tables.c:2672 +#: utils/misc/guc_tables.c:2678 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "" -#: utils/misc/guc_tables.c:2682 +#: utils/misc/guc_tables.c:2688 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "" -#: utils/misc/guc_tables.c:2692 +#: utils/misc/guc_tables.c:2698 msgid "Age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "" -#: utils/misc/guc_tables.c:2701 +#: utils/misc/guc_tables.c:2707 msgid "Multixact age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "" -#: utils/misc/guc_tables.c:2714 +#: utils/misc/guc_tables.c:2720 msgid "Sets the maximum number of locks per transaction." msgstr "ტრანზაქციაში ბლოკების მაქსიმალური რაოდენობის დაყენება." -#: utils/misc/guc_tables.c:2715 +#: utils/misc/guc_tables.c:2721 msgid "The shared lock table is sized on the assumption that at most \"max_locks_per_transaction\" objects per server process or prepared transaction will need to be locked at any one time." msgstr "" -#: utils/misc/guc_tables.c:2726 +#: utils/misc/guc_tables.c:2732 msgid "Sets the maximum number of predicate locks per transaction." msgstr "" -#: utils/misc/guc_tables.c:2727 +#: utils/misc/guc_tables.c:2733 msgid "The shared predicate lock table is sized on the assumption that at most \"max_pred_locks_per_transaction\" objects per server process or prepared transaction will need to be locked at any one time." msgstr "" -#: utils/misc/guc_tables.c:2738 +#: utils/misc/guc_tables.c:2744 msgid "Sets the maximum number of predicate-locked pages and tuples per relation." msgstr "" -#: utils/misc/guc_tables.c:2739 +#: utils/misc/guc_tables.c:2745 msgid "If more than this total of pages and tuples in the same relation are locked by a connection, those locks are replaced by a relation-level lock." msgstr "" -#: utils/misc/guc_tables.c:2749 +#: utils/misc/guc_tables.c:2755 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "" -#: utils/misc/guc_tables.c:2750 +#: utils/misc/guc_tables.c:2756 msgid "If more than this number of tuples on the same page are locked by a connection, those locks are replaced by a page-level lock." msgstr "" -#: utils/misc/guc_tables.c:2760 +#: utils/misc/guc_tables.c:2766 msgid "Sets the maximum allowed time to complete client authentication." msgstr "კლიენტის ავთენტიკაციის დასრულებისთვის დაშვებული მაქსიმალური დროის დაყენება." -#: utils/misc/guc_tables.c:2772 +#: utils/misc/guc_tables.c:2778 msgid "Sets the amount of time to wait before authentication on connection startup." msgstr "" -#: utils/misc/guc_tables.c:2784 +#: utils/misc/guc_tables.c:2790 msgid "Sets the maximum number of allocated pages for NOTIFY / LISTEN queue." msgstr "აყენებს გამოყოფილი გვერდების მაქსიმალურ რაოდენობას NOTIFY / LISTEN რიგისთვის." -#: utils/misc/guc_tables.c:2794 +#: utils/misc/guc_tables.c:2800 msgid "Buffer size for reading ahead in the WAL during recovery." msgstr "აღდგენისას WAL-ში წინასწარ-კითხვის ბაფერის ზომა." -#: utils/misc/guc_tables.c:2795 +#: utils/misc/guc_tables.c:2801 msgid "Maximum distance to read ahead in the WAL to prefetch referenced data blocks." msgstr "" -#: utils/misc/guc_tables.c:2805 +#: utils/misc/guc_tables.c:2811 msgid "Sets the size of WAL files held for standby servers." msgstr "მომლოდინე სერვერებისთვის WAL ფაილებისთვის შენახული ზომის დაყენება." -#: utils/misc/guc_tables.c:2816 +#: utils/misc/guc_tables.c:2822 msgid "Sets the minimum size to shrink the WAL to." msgstr "WAL-ის შემცირების მინიმალური ზომის დაყენება." -#: utils/misc/guc_tables.c:2828 +#: utils/misc/guc_tables.c:2834 msgid "Sets the WAL size that triggers a checkpoint." msgstr "აყენებს WAL-ის ზომას, რომელიც საკონტროლო წერტილს ატრიგერებს." -#: utils/misc/guc_tables.c:2840 +#: utils/misc/guc_tables.c:2846 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "ავტომატური WAL საკონტროლო წერტილებს შორის მაქსიმალური დროის დაყენება." -#: utils/misc/guc_tables.c:2851 +#: utils/misc/guc_tables.c:2857 msgid "Sets the maximum time before warning if checkpoints triggered by WAL volume happen too frequently." msgstr "" -#: utils/misc/guc_tables.c:2853 +#: utils/misc/guc_tables.c:2859 msgid "Write a message to the server log if checkpoints caused by the filling of WAL segment files happen more frequently than this amount of time. Zero turns off the warning." msgstr "" -#: utils/misc/guc_tables.c:2866 utils/misc/guc_tables.c:3084 utils/misc/guc_tables.c:3138 +#: utils/misc/guc_tables.c:2872 utils/misc/guc_tables.c:3090 utils/misc/guc_tables.c:3144 msgid "Number of pages after which previously performed writes are flushed to disk." msgstr "" -#: utils/misc/guc_tables.c:2877 +#: utils/misc/guc_tables.c:2883 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "" -#: utils/misc/guc_tables.c:2878 +#: utils/misc/guc_tables.c:2884 msgid "Specify -1 to have this value determined as a fraction of shared_buffers." msgstr "" -#: utils/misc/guc_tables.c:2888 +#: utils/misc/guc_tables.c:2894 msgid "Time between WAL flushes performed in the WAL writer." msgstr "" -#: utils/misc/guc_tables.c:2899 +#: utils/misc/guc_tables.c:2905 msgid "Amount of WAL written out by WAL writer that triggers a flush." msgstr "" -#: utils/misc/guc_tables.c:2910 +#: utils/misc/guc_tables.c:2916 msgid "Minimum size of new file to fsync instead of writing WAL." msgstr "" -#: utils/misc/guc_tables.c:2921 +#: utils/misc/guc_tables.c:2927 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "" -#: utils/misc/guc_tables.c:2932 +#: utils/misc/guc_tables.c:2938 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "" -#: utils/misc/guc_tables.c:2942 +#: utils/misc/guc_tables.c:2948 msgid "Sets the maximum WAL size that can be reserved by replication slots." msgstr "" -#: utils/misc/guc_tables.c:2943 +#: utils/misc/guc_tables.c:2949 msgid "Replication slots will be marked as failed, and segments released for deletion or recycling, if this much space is occupied by WAL on disk." msgstr "" -#: utils/misc/guc_tables.c:2955 +#: utils/misc/guc_tables.c:2961 msgid "Sets the maximum time to wait for WAL replication." msgstr "WAL რეპლიკაციის მოლოდინის მაქსიმალური ვადის დაყენება." -#: utils/misc/guc_tables.c:2966 +#: utils/misc/guc_tables.c:2972 msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." msgstr "" -#: utils/misc/guc_tables.c:2978 +#: utils/misc/guc_tables.c:2984 msgid "Sets the minimum number of concurrent open transactions required before performing \"commit_delay\"." msgstr "დააყენებს \"commit_delay\"-ის შესრულებამდე საჭირო ერთდროული ღია ტრანზაქციების მინიმალურ რაოდენობას." -#: utils/misc/guc_tables.c:2989 +#: utils/misc/guc_tables.c:2995 msgid "Sets the number of digits displayed for floating-point values." msgstr "" -#: utils/misc/guc_tables.c:2990 +#: utils/misc/guc_tables.c:2996 msgid "This affects real, double precision, and geometric data types. A zero or negative parameter value is added to the standard number of digits (FLT_DIG or DBL_DIG as appropriate). Any value greater than zero selects precise output mode." msgstr "" -#: utils/misc/guc_tables.c:3002 +#: utils/misc/guc_tables.c:3008 msgid "Sets the minimum execution time above which a sample of statements will be logged. Sampling is determined by log_statement_sample_rate." msgstr "" -#: utils/misc/guc_tables.c:3005 +#: utils/misc/guc_tables.c:3011 msgid "Zero logs a sample of all queries. -1 turns this feature off." msgstr "" -#: utils/misc/guc_tables.c:3015 +#: utils/misc/guc_tables.c:3021 msgid "Sets the minimum execution time above which all statements will be logged." msgstr "" -#: utils/misc/guc_tables.c:3017 +#: utils/misc/guc_tables.c:3023 msgid "Zero prints all queries. -1 turns this feature off." msgstr "0-ს ყველა მოთხოვნა გამოაქვს, -1 გამორთავს ამ ფუნქციას." -#: utils/misc/guc_tables.c:3027 +#: utils/misc/guc_tables.c:3033 msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgstr "" -#: utils/misc/guc_tables.c:3029 +#: utils/misc/guc_tables.c:3035 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "0-ს ყველა ქმედება გამოაქვს. -1 გამორთავს ავტომომტვერსასრუტებას." -#: utils/misc/guc_tables.c:3039 +#: utils/misc/guc_tables.c:3045 msgid "Sets the maximum length in bytes of data logged for bind parameter values when logging statements." msgstr "" -#: utils/misc/guc_tables.c:3041 utils/misc/guc_tables.c:3053 +#: utils/misc/guc_tables.c:3047 utils/misc/guc_tables.c:3059 msgid "-1 to print values in full." msgstr "-1 მნიშვნელობების სრულად გამოსატანად." -#: utils/misc/guc_tables.c:3051 +#: utils/misc/guc_tables.c:3057 msgid "Sets the maximum length in bytes of data logged for bind parameter values when logging statements, on error." msgstr "" -#: utils/misc/guc_tables.c:3063 +#: utils/misc/guc_tables.c:3069 msgid "Background writer sleep time between rounds." msgstr "" -#: utils/misc/guc_tables.c:3074 +#: utils/misc/guc_tables.c:3080 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "" -#: utils/misc/guc_tables.c:3097 +#: utils/misc/guc_tables.c:3103 msgid "Number of simultaneous requests that can be handled efficiently by the disk subsystem." msgstr "" -#: utils/misc/guc_tables.c:3111 +#: utils/misc/guc_tables.c:3117 msgid "A variant of \"effective_io_concurrency\" that is used for maintenance work." msgstr "" -#: utils/misc/guc_tables.c:3126 +#: utils/misc/guc_tables.c:3132 msgid "Limit on the size of data reads and writes." msgstr "" -#: utils/misc/guc_tables.c:3151 +#: utils/misc/guc_tables.c:3157 msgid "Maximum number of concurrent worker processes." msgstr "ერთდროულად გაშვებული დამხმარე პროცესების მაქსიმალური რაოდენობა." -#: utils/misc/guc_tables.c:3163 +#: utils/misc/guc_tables.c:3169 msgid "Maximum number of logical replication worker processes." msgstr "ლოგიკური რეპლიკაციის დამხმარე პროცესების მაქსიმალური რაოდენობა." -#: utils/misc/guc_tables.c:3175 +#: utils/misc/guc_tables.c:3181 msgid "Maximum number of table synchronization workers per subscription." msgstr "თითოეული გამოწერის ცხრილის სინქრონიზაციის დამხმარე პროცესების მაქსიმალური რაოდენობა." -#: utils/misc/guc_tables.c:3187 +#: utils/misc/guc_tables.c:3193 msgid "Maximum number of parallel apply workers per subscription." msgstr "თითოეული გამოწერის პარალელური გადატარების დამხმარე პროცესების მაქსიმალური რაოდენობა." -#: utils/misc/guc_tables.c:3197 +#: utils/misc/guc_tables.c:3203 msgid "Sets the amount of time to wait before forcing log file rotation." msgstr "" -#: utils/misc/guc_tables.c:3209 +#: utils/misc/guc_tables.c:3215 msgid "Sets the maximum size a log file can reach before being rotated." msgstr "" -#: utils/misc/guc_tables.c:3221 +#: utils/misc/guc_tables.c:3227 msgid "Shows the maximum number of function arguments." msgstr "ფუნქციის არგუმენტების მაქსიმალური რაოდენობის ჩვენება." -#: utils/misc/guc_tables.c:3232 +#: utils/misc/guc_tables.c:3238 msgid "Shows the maximum number of index keys." msgstr "ინდექსის გასაღებების მაქსიმალური რაოდენობის ჩვენება." -#: utils/misc/guc_tables.c:3243 +#: utils/misc/guc_tables.c:3249 msgid "Shows the maximum identifier length." msgstr "იდენტიფიკატორის მაქსიმალური სიგრძის ჩვენება." -#: utils/misc/guc_tables.c:3254 +#: utils/misc/guc_tables.c:3260 msgid "Shows the size of a disk block." msgstr "დისკის ბლოკის ზომის ჩვენება." -#: utils/misc/guc_tables.c:3265 +#: utils/misc/guc_tables.c:3271 msgid "Shows the number of pages per disk file." msgstr "ფაილში არსებული გვერდების რაოდენობის ჩვენება." -#: utils/misc/guc_tables.c:3276 +#: utils/misc/guc_tables.c:3282 msgid "Shows the block size in the write ahead log." msgstr "წინასწარ-ჩაწერადი ჟურნალის ბლოკის ზომის ჩვენება." -#: utils/misc/guc_tables.c:3287 +#: utils/misc/guc_tables.c:3293 msgid "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "" -#: utils/misc/guc_tables.c:3299 +#: utils/misc/guc_tables.c:3305 msgid "Shows the size of write ahead log segments." msgstr "წინასწარ-ჩაწერადი ჟურნალის სეგმენტების ზომის ჩვენება." -#: utils/misc/guc_tables.c:3312 +#: utils/misc/guc_tables.c:3318 msgid "Time for which WAL summary files should be kept." msgstr "" -#: utils/misc/guc_tables.c:3325 +#: utils/misc/guc_tables.c:3331 msgid "Time to sleep between autovacuum runs." msgstr "ძილის დრო ავტომომტვერსასრუტებების გაშვებებს შორის." -#: utils/misc/guc_tables.c:3335 +#: utils/misc/guc_tables.c:3341 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "" -#: utils/misc/guc_tables.c:3344 +#: utils/misc/guc_tables.c:3350 msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums." msgstr "" -#: utils/misc/guc_tables.c:3353 +#: utils/misc/guc_tables.c:3359 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "" -#: utils/misc/guc_tables.c:3363 +#: utils/misc/guc_tables.c:3369 msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "" -#: utils/misc/guc_tables.c:3375 +#: utils/misc/guc_tables.c:3381 msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "" -#: utils/misc/guc_tables.c:3385 +#: utils/misc/guc_tables.c:3391 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "ერთდროულად გაშვებული ავტომომტვერსასრუტების დამხმარე პროცესების რაოდენობის დაყენება." -#: utils/misc/guc_tables.c:3395 +#: utils/misc/guc_tables.c:3401 msgid "Sets the maximum number of parallel processes per maintenance operation." msgstr "თითოეული რემონტის ოპერაციისთვის პარალელური პროცესების მაქსიმალური რაოდენობის დაყენება." -#: utils/misc/guc_tables.c:3405 +#: utils/misc/guc_tables.c:3411 msgid "Sets the maximum number of parallel processes per executor node." msgstr "თითოეული შემსრულებელი კვანძისთვის პარალელურად გაშვებული პროცესების მაქსიმალური რაოდენობის დაყენება." -#: utils/misc/guc_tables.c:3416 +#: utils/misc/guc_tables.c:3422 msgid "Sets the maximum number of parallel workers that can be active at one time." msgstr "ერთდროულად აქტიური პარალელური დამხმარე პროცესების მაქსიმალური რაოდენობის დაყენება." -#: utils/misc/guc_tables.c:3427 +#: utils/misc/guc_tables.c:3433 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "თითოეული ავტომომტვერსასრუტების დამხმარე პროცესის მიერ გამოყენებული მაქსიმალური მეხსიერების რაოდენობის დაყენება." -#: utils/misc/guc_tables.c:3438 +#: utils/misc/guc_tables.c:3444 msgid "Time between issuing TCP keepalives." msgstr "დაყოვნება TCP keepalive პაკეტებს შორის." -#: utils/misc/guc_tables.c:3439 utils/misc/guc_tables.c:3450 utils/misc/guc_tables.c:3574 +#: utils/misc/guc_tables.c:3445 utils/misc/guc_tables.c:3456 utils/misc/guc_tables.c:3580 msgid "A value of 0 uses the system default." msgstr "სისტემური ნაგულისხმევი მნიშვნელობის გამოსაყენებლად მიუთითეთ 0." -#: utils/misc/guc_tables.c:3449 +#: utils/misc/guc_tables.c:3455 msgid "Time between TCP keepalive retransmits." msgstr "დაყოვნება TCP keepalive პაკეტების გადაგზავნებს შორის." -#: utils/misc/guc_tables.c:3460 +#: utils/misc/guc_tables.c:3466 msgid "SSL renegotiation is no longer supported; this can only be 0." msgstr "SSL-ის თავიდან დაყენება უკვე მხარდაუჭერელია. შეგიძლიათ დააყენოთ მხოლოდ 0." -#: utils/misc/guc_tables.c:3471 +#: utils/misc/guc_tables.c:3477 msgid "Maximum number of TCP keepalive retransmits." msgstr "TCP Keepalive-ების გადაგზავნის მაქსიმალური რაოდენობა." -#: utils/misc/guc_tables.c:3472 +#: utils/misc/guc_tables.c:3478 msgid "Number of consecutive keepalive retransmits that can be lost before a connection is considered dead. A value of 0 uses the system default." msgstr "" -#: utils/misc/guc_tables.c:3483 +#: utils/misc/guc_tables.c:3489 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "" -#: utils/misc/guc_tables.c:3494 +#: utils/misc/guc_tables.c:3500 msgid "Sets the planner's assumption about the total size of the data caches." msgstr "" -#: utils/misc/guc_tables.c:3495 +#: utils/misc/guc_tables.c:3501 msgid "That is, the total size of the caches (kernel cache and shared buffers) used for PostgreSQL data files. This is measured in disk pages, which are normally 8 kB each." msgstr "" -#: utils/misc/guc_tables.c:3506 +#: utils/misc/guc_tables.c:3512 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "ცხრილის მონაცემების მინიმალური რაოდენობა პარალელური სკანირებისთვის." -#: utils/misc/guc_tables.c:3507 +#: utils/misc/guc_tables.c:3513 msgid "If the planner estimates that it will read a number of table pages too small to reach this limit, a parallel scan will not be considered." msgstr "" -#: utils/misc/guc_tables.c:3517 +#: utils/misc/guc_tables.c:3523 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "" -#: utils/misc/guc_tables.c:3518 +#: utils/misc/guc_tables.c:3524 msgid "If the planner estimates that it will read a number of index pages too small to reach this limit, a parallel scan will not be considered." msgstr "" -#: utils/misc/guc_tables.c:3529 +#: utils/misc/guc_tables.c:3535 msgid "Shows the server version as an integer." msgstr "სერვერის ვერსიას, როგორც მთელ რიცხვს, ისე აჩვენებს." -#: utils/misc/guc_tables.c:3540 +#: utils/misc/guc_tables.c:3546 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "მითითებული რაოდენობა კილობაიტზე უფრო დიდი დროებითი ფაილების გამოყენების ჟურნალში ჩაწერა." -#: utils/misc/guc_tables.c:3541 +#: utils/misc/guc_tables.c:3547 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "" -#: utils/misc/guc_tables.c:3551 +#: utils/misc/guc_tables.c:3557 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "'pg_stat_activity.query'-სთვის დაცული მეხსიერების ზომის დაყნება, ბაიტებში." -#: utils/misc/guc_tables.c:3562 +#: utils/misc/guc_tables.c:3568 msgid "Sets the maximum size of the pending list for GIN index." msgstr "" -#: utils/misc/guc_tables.c:3573 +#: utils/misc/guc_tables.c:3579 msgid "TCP user timeout." msgstr "TCP მომხმარებლის ლოდინის ვადა." -#: utils/misc/guc_tables.c:3584 +#: utils/misc/guc_tables.c:3590 msgid "The size of huge page that should be requested." msgstr "მოსათხოვი უზარმაზარი გვერდების (hugepages) ზომა." -#: utils/misc/guc_tables.c:3595 +#: utils/misc/guc_tables.c:3601 msgid "Aggressively flush system caches for debugging purposes." msgstr "" -#: utils/misc/guc_tables.c:3618 +#: utils/misc/guc_tables.c:3624 msgid "Sets the time interval between checks for disconnection while running queries." msgstr "" -#: utils/misc/guc_tables.c:3629 +#: utils/misc/guc_tables.c:3635 msgid "Time between progress updates for long-running startup operations." msgstr "" -#: utils/misc/guc_tables.c:3631 +#: utils/misc/guc_tables.c:3637 msgid "0 turns this feature off." msgstr "0 გამორთავს ამ ფუნქციას." -#: utils/misc/guc_tables.c:3641 +#: utils/misc/guc_tables.c:3647 msgid "Sets the iteration count for SCRAM secret generation." msgstr "აყენებს იტერაციების რიცხვს SCRAM-ის პაროლის გენერაციისთვის." -#: utils/misc/guc_tables.c:3661 +#: utils/misc/guc_tables.c:3667 msgid "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "" -#: utils/misc/guc_tables.c:3672 +#: utils/misc/guc_tables.c:3678 msgid "Sets the planner's estimate of the cost of a nonsequentially fetched disk page." msgstr "" -#: utils/misc/guc_tables.c:3683 +#: utils/misc/guc_tables.c:3689 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "" -#: utils/misc/guc_tables.c:3694 +#: utils/misc/guc_tables.c:3700 msgid "Sets the planner's estimate of the cost of processing each index entry during an index scan." msgstr "" -#: utils/misc/guc_tables.c:3705 +#: utils/misc/guc_tables.c:3711 msgid "Sets the planner's estimate of the cost of processing each operator or function call." msgstr "" -#: utils/misc/guc_tables.c:3716 +#: utils/misc/guc_tables.c:3722 msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to leader backend." msgstr "" -#: utils/misc/guc_tables.c:3727 +#: utils/misc/guc_tables.c:3733 msgid "Sets the planner's estimate of the cost of starting up worker processes for parallel query." msgstr "" -#: utils/misc/guc_tables.c:3739 +#: utils/misc/guc_tables.c:3745 msgid "Perform JIT compilation if query is more expensive." msgstr "თუ მოთხოვნა უფრო ძვირია, JIT კომპილაციის შესრულება." -#: utils/misc/guc_tables.c:3740 +#: utils/misc/guc_tables.c:3746 msgid "-1 disables JIT compilation." msgstr "-1 JIT კომპილაციას გამორთავს." -#: utils/misc/guc_tables.c:3750 +#: utils/misc/guc_tables.c:3756 msgid "Optimize JIT-compiled functions if query is more expensive." msgstr "" -#: utils/misc/guc_tables.c:3751 +#: utils/misc/guc_tables.c:3757 msgid "-1 disables optimization." msgstr "-1 ოპტიმიზაციას გამორთავს." -#: utils/misc/guc_tables.c:3761 +#: utils/misc/guc_tables.c:3767 msgid "Perform JIT inlining if query is more expensive." msgstr "" -#: utils/misc/guc_tables.c:3762 +#: utils/misc/guc_tables.c:3768 msgid "-1 disables inlining." msgstr "-1 გამორთავს კოდის ჩადგმას." -#: utils/misc/guc_tables.c:3772 +#: utils/misc/guc_tables.c:3778 msgid "Sets the planner's estimate of the fraction of a cursor's rows that will be retrieved." msgstr "" -#: utils/misc/guc_tables.c:3784 +#: utils/misc/guc_tables.c:3790 msgid "Sets the planner's estimate of the average size of a recursive query's working table." msgstr "" -#: utils/misc/guc_tables.c:3796 +#: utils/misc/guc_tables.c:3802 msgid "GEQO: selective pressure within the population." msgstr "GEQO: შერჩევითი ზეწოლა პოპულაციაში." -#: utils/misc/guc_tables.c:3807 +#: utils/misc/guc_tables.c:3813 msgid "GEQO: seed for random path selection." msgstr "" -#: utils/misc/guc_tables.c:3818 +#: utils/misc/guc_tables.c:3824 msgid "Multiple of \"work_mem\" to use for hash tables." msgstr "" -#: utils/misc/guc_tables.c:3829 +#: utils/misc/guc_tables.c:3835 msgid "Multiple of the average buffer usage to free per round." msgstr "" -#: utils/misc/guc_tables.c:3839 +#: utils/misc/guc_tables.c:3845 msgid "Sets the seed for random-number generation." msgstr "" -#: utils/misc/guc_tables.c:3850 +#: utils/misc/guc_tables.c:3856 msgid "Vacuum cost delay in milliseconds." msgstr "დამტვერსასრუტების დაყოვნება მილიწამებში." -#: utils/misc/guc_tables.c:3861 +#: utils/misc/guc_tables.c:3867 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "დამტვერსასრუტების დაყოვნება მილიწამებში, ავტოდამტვერსასრუტებისთვის." -#: utils/misc/guc_tables.c:3872 +#: utils/misc/guc_tables.c:3878 msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." msgstr "" -#: utils/misc/guc_tables.c:3882 +#: utils/misc/guc_tables.c:3888 msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." msgstr "" -#: utils/misc/guc_tables.c:3892 +#: utils/misc/guc_tables.c:3898 msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." msgstr "" -#: utils/misc/guc_tables.c:3902 +#: utils/misc/guc_tables.c:3908 msgid "Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval." msgstr "" -#: utils/misc/guc_tables.c:3912 +#: utils/misc/guc_tables.c:3918 msgid "Fraction of statements exceeding \"log_min_duration_sample\" to be logged." msgstr "" -#: utils/misc/guc_tables.c:3913 +#: utils/misc/guc_tables.c:3919 msgid "Use a value between 0.0 (never log) and 1.0 (always log)." msgstr "გამოიყენეთ მნიშვნელობები 0.0-დან (არასოდეს ჩაწერო ჟურნალში) და 1.0-ს (ჟურნალში ყოველთვის ჩაწერა) შუა." -#: utils/misc/guc_tables.c:3922 +#: utils/misc/guc_tables.c:3928 msgid "Sets the fraction of transactions from which to log all statements." msgstr "ადგენს ტრანზაქციის ნაწილს, რომლის შემდეგაც ყველა ოპერატორი ჟურნალში ჩაიწერება." -#: utils/misc/guc_tables.c:3923 +#: utils/misc/guc_tables.c:3929 msgid "Use a value between 0.0 (never log) and 1.0 (log all statements for all transactions)." msgstr "" -#: utils/misc/guc_tables.c:3942 +#: utils/misc/guc_tables.c:3948 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "" -#: utils/misc/guc_tables.c:3943 +#: utils/misc/guc_tables.c:3949 msgid "This is used only if \"archive_library\" is not set." msgstr "" -#: utils/misc/guc_tables.c:3952 +#: utils/misc/guc_tables.c:3958 msgid "Sets the library that will be called to archive a WAL file." msgstr "" -#: utils/misc/guc_tables.c:3953 +#: utils/misc/guc_tables.c:3959 msgid "An empty string indicates that \"archive_command\" should be used." msgstr "" -#: utils/misc/guc_tables.c:3962 +#: utils/misc/guc_tables.c:3968 msgid "Sets the shell command that will be called to retrieve an archived WAL file." msgstr "არქივირებული WAL ფაილის მისაღებად გამოსაძახებელი გარსის ბრძანების დაყენება." -#: utils/misc/guc_tables.c:3972 +#: utils/misc/guc_tables.c:3978 msgid "Sets the shell command that will be executed at every restart point." msgstr "ყოველ გადატვირთვის წერტილზე გასაშვები გარსის ბრძანების დაყენება." -#: utils/misc/guc_tables.c:3982 +#: utils/misc/guc_tables.c:3988 msgid "Sets the shell command that will be executed once at the end of recovery." msgstr "" -#: utils/misc/guc_tables.c:3992 +#: utils/misc/guc_tables.c:3998 msgid "Specifies the timeline to recover into." msgstr "აღდგენისთვის დროის მითითება." -#: utils/misc/guc_tables.c:4002 +#: utils/misc/guc_tables.c:4008 msgid "Set to \"immediate\" to end recovery as soon as a consistent state is reached." msgstr "" -#: utils/misc/guc_tables.c:4011 +#: utils/misc/guc_tables.c:4017 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "ტრანზაქციის ID, რომლამდეც აღდგენა მოხდება." -#: utils/misc/guc_tables.c:4020 +#: utils/misc/guc_tables.c:4026 msgid "Sets the time stamp up to which recovery will proceed." msgstr "" -#: utils/misc/guc_tables.c:4029 +#: utils/misc/guc_tables.c:4035 msgid "Sets the named restore point up to which recovery will proceed." msgstr "" -#: utils/misc/guc_tables.c:4038 +#: utils/misc/guc_tables.c:4044 msgid "Sets the LSN of the write-ahead log location up to which recovery will proceed." msgstr "" -#: utils/misc/guc_tables.c:4048 +#: utils/misc/guc_tables.c:4054 msgid "Sets the connection string to be used to connect to the sending server." msgstr "" -#: utils/misc/guc_tables.c:4059 +#: utils/misc/guc_tables.c:4065 msgid "Sets the name of the replication slot to use on the sending server." msgstr "" -#: utils/misc/guc_tables.c:4069 +#: utils/misc/guc_tables.c:4075 msgid "Sets the client's character set encoding." msgstr "კლიენტის სიმბოლოების კოდირების დაყენება." -#: utils/misc/guc_tables.c:4080 +#: utils/misc/guc_tables.c:4086 msgid "Controls information prefixed to each log line." msgstr "ჟურნალის თითოეული ჩანაწერის პრეფიქსის კონტროლი." -#: utils/misc/guc_tables.c:4081 +#: utils/misc/guc_tables.c:4087 msgid "If blank, no prefix is used." msgstr "თუ ცარიელია, პრეფიქსი არ გამოიყენება." -#: utils/misc/guc_tables.c:4090 +#: utils/misc/guc_tables.c:4096 msgid "Sets the time zone to use in log messages." msgstr "ჟურნალის შეტყობინებების დასამახსოვრებლად გამოყენებული დროის სარტყლის დაყენება." -#: utils/misc/guc_tables.c:4100 +#: utils/misc/guc_tables.c:4106 msgid "Sets the display format for date and time values." msgstr "თარიღისა და დროის მნიშვნელობების ფორმატის დაყენება." -#: utils/misc/guc_tables.c:4101 +#: utils/misc/guc_tables.c:4107 msgid "Also controls interpretation of ambiguous date inputs." msgstr "" -#: utils/misc/guc_tables.c:4112 +#: utils/misc/guc_tables.c:4118 msgid "Sets the default table access method for new tables." msgstr "ახალი ცხრილების ნაგულისხმევი წვდომის უფლებების მითითება." -#: utils/misc/guc_tables.c:4123 +#: utils/misc/guc_tables.c:4129 msgid "Sets the default tablespace to create tables and indexes in." msgstr "" -#: utils/misc/guc_tables.c:4124 +#: utils/misc/guc_tables.c:4130 msgid "An empty string selects the database's default tablespace." msgstr "ცარიელი სტრიქონი ბაზის ნაგულისხმევ ცხრილების სივრცეს აირჩევს." -#: utils/misc/guc_tables.c:4134 +#: utils/misc/guc_tables.c:4140 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "" -#: utils/misc/guc_tables.c:4145 +#: utils/misc/guc_tables.c:4151 msgid "Sets whether a CREATEROLE user automatically grants the role to themselves, and with which options." msgstr "" -#: utils/misc/guc_tables.c:4157 +#: utils/misc/guc_tables.c:4163 msgid "Sets the path for dynamically loadable modules." msgstr "დინამიურად ჩატვირთული მოდულების ბილიკის დაყენება." -#: utils/misc/guc_tables.c:4158 +#: utils/misc/guc_tables.c:4164 msgid "If a dynamically loadable module needs to be opened and the specified name does not have a directory component (i.e., the name does not contain a slash), the system will search this path for the specified file." msgstr "თუ საჭიროა დინამიურად ჩატვირთვადი მოდულის გახსნა და მითითებულ სახელს არ გააჩნია საქაღალდის კომპონენტი (ანუ სახელი არ შეიცავს დახრილ ხაზს), სისტემა მითითებულ ფაილს ამ ბილიკებში მოძებნის." -#: utils/misc/guc_tables.c:4171 +#: utils/misc/guc_tables.c:4177 msgid "Sets the location of the Kerberos server key file." msgstr "Kerberos-ის სერვერის გასაღების ფაილის მდებარეობის მითითება." -#: utils/misc/guc_tables.c:4182 +#: utils/misc/guc_tables.c:4188 msgid "Sets the Bonjour service name." msgstr "Bonjour-ის სერვისის სახელის დაყენება." -#: utils/misc/guc_tables.c:4192 +#: utils/misc/guc_tables.c:4198 msgid "Sets the language in which messages are displayed." msgstr "შეტყობინებების საჩვენებელი ენის მითითება." -#: utils/misc/guc_tables.c:4202 +#: utils/misc/guc_tables.c:4208 msgid "Sets the locale for formatting monetary amounts." msgstr "თანხის რიცხვების ფორმატირების სტანდარტის დაყენება." -#: utils/misc/guc_tables.c:4212 +#: utils/misc/guc_tables.c:4218 msgid "Sets the locale for formatting numbers." msgstr "რიცხვების ფორმატირების ენის დაყენება." -#: utils/misc/guc_tables.c:4222 +#: utils/misc/guc_tables.c:4228 msgid "Sets the locale for formatting date and time values." msgstr "თარიღისა და დროის ფორმატირების ენის დაყენება." -#: utils/misc/guc_tables.c:4232 +#: utils/misc/guc_tables.c:4238 msgid "Lists shared libraries to preload into each backend." msgstr "თითოეული უკანაბოლოსთვის გაშვებამდე ჩასატვირთი გაზიარებული ბიბლიოთეკების სია." -#: utils/misc/guc_tables.c:4243 +#: utils/misc/guc_tables.c:4249 msgid "Lists shared libraries to preload into server." msgstr "სერვერის გაშვებამდე ჩასატვირთი გაზიარებული ბიბლიოთეკების სია." -#: utils/misc/guc_tables.c:4254 +#: utils/misc/guc_tables.c:4260 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "თითოეული უკანაბოლოსთვის გაშვებამდე ჩასატვირთი არაპრივილეგირებული გაზიარებული ბიბლიოთეკების სია." -#: utils/misc/guc_tables.c:4265 +#: utils/misc/guc_tables.c:4271 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "" -#: utils/misc/guc_tables.c:4277 +#: utils/misc/guc_tables.c:4283 msgid "Shows the server (database) character set encoding." msgstr "სერვერის (ბაზის) სიმბოლოების კოდირების ჩვენება." -#: utils/misc/guc_tables.c:4289 +#: utils/misc/guc_tables.c:4295 msgid "Shows the server version." msgstr "სერვერის ვერსიის ჩვენება." -#: utils/misc/guc_tables.c:4301 +#: utils/misc/guc_tables.c:4307 msgid "Sets the current role." msgstr "მიმდინარე როლის დაყენება." -#: utils/misc/guc_tables.c:4313 +#: utils/misc/guc_tables.c:4319 msgid "Sets the session user name." msgstr "სესიის მომხმარებლი სახელის დაყენება." -#: utils/misc/guc_tables.c:4324 +#: utils/misc/guc_tables.c:4330 msgid "Sets the destination for server log output." msgstr "სერვერის ჟურნალის გამოტანის სამიზნის დაყენება." -#: utils/misc/guc_tables.c:4325 +#: utils/misc/guc_tables.c:4331 msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", \"jsonlog\", and \"eventlog\", depending on the platform." msgstr "" -#: utils/misc/guc_tables.c:4336 +#: utils/misc/guc_tables.c:4342 msgid "Sets the destination directory for log files." msgstr "ჟურნალის ფაილების საქაღალდის დაყენება." -#: utils/misc/guc_tables.c:4337 +#: utils/misc/guc_tables.c:4343 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "" -#: utils/misc/guc_tables.c:4347 +#: utils/misc/guc_tables.c:4353 msgid "Sets the file name pattern for log files." msgstr "ჟურნალის ფაილების სახელის შაბლონის დაყენება." -#: utils/misc/guc_tables.c:4358 +#: utils/misc/guc_tables.c:4364 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "Syslog-ში PostgreSQL-ის შეტყობინებების იდენტიფიკატორი პროგრამის სახელის დაყენება." -#: utils/misc/guc_tables.c:4369 +#: utils/misc/guc_tables.c:4375 msgid "Sets the application name used to identify PostgreSQL messages in the event log." msgstr "მოვლენების ჟურნალში PostgreSQL-ის შეტყობინებების იდენტიფიკატორი აპლიკაციის სახელის დაყენება." -#: utils/misc/guc_tables.c:4380 +#: utils/misc/guc_tables.c:4386 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "" -#: utils/misc/guc_tables.c:4390 +#: utils/misc/guc_tables.c:4396 msgid "Selects a file of time zone abbreviations." msgstr "დროის სარტყლების აბრევიატურების ფაილის მითითება." -#: utils/misc/guc_tables.c:4400 +#: utils/misc/guc_tables.c:4406 msgid "Sets the owning group of the Unix-domain socket." msgstr "Unix-დომენის სოკეტის მფლობლის ჯგუფის დაყენება." -#: utils/misc/guc_tables.c:4401 +#: utils/misc/guc_tables.c:4407 msgid "The owning user of the socket is always the user that starts the server." msgstr "სოკეტის მფლობელი მომხმარებელი ყოველთვის იგივე მომხმარებელია, ვინც სერვერი გაუშვა." -#: utils/misc/guc_tables.c:4411 +#: utils/misc/guc_tables.c:4417 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "აყენებს საქაღალდეებს, სადაც Unix-ის სოკეტები შეიქმნება." -#: utils/misc/guc_tables.c:4422 +#: utils/misc/guc_tables.c:4428 msgid "Sets the host name or IP address(es) to listen to." msgstr "მოსასმენი IP მისამართი ან ჰოსტის სახელი." -#: utils/misc/guc_tables.c:4437 +#: utils/misc/guc_tables.c:4443 msgid "Sets the server's data directory." msgstr "სერვერის მონაცმების საქაღალდის დაყენება." -#: utils/misc/guc_tables.c:4448 +#: utils/misc/guc_tables.c:4454 msgid "Sets the server's main configuration file." msgstr "სერვერის კონფიგურაციის მთავარი ფაილის დაყენება." -#: utils/misc/guc_tables.c:4459 +#: utils/misc/guc_tables.c:4465 msgid "Sets the server's \"hba\" configuration file." msgstr "სერვერის hba კონფიგურაციის ფაილის დაყენება." -#: utils/misc/guc_tables.c:4470 +#: utils/misc/guc_tables.c:4476 msgid "Sets the server's \"ident\" configuration file." msgstr "სერვერის ident კონფიგურაციის ფაილის დაყენება." -#: utils/misc/guc_tables.c:4481 +#: utils/misc/guc_tables.c:4487 msgid "Writes the postmaster PID to the specified file." msgstr "Postmaster-ის PID-ის მითითებულ ფაილში ჩაწერა." -#: utils/misc/guc_tables.c:4492 +#: utils/misc/guc_tables.c:4498 msgid "Shows the name of the SSL library." msgstr "SSL ბიბლიოთეკის სახელის ჩვენება." -#: utils/misc/guc_tables.c:4507 +#: utils/misc/guc_tables.c:4513 msgid "Location of the SSL server certificate file." msgstr "SSL სერვერის სერტიფიკატის ფაილის მდებარეობა." -#: utils/misc/guc_tables.c:4517 +#: utils/misc/guc_tables.c:4523 msgid "Location of the SSL server private key file." msgstr "SSL სერვერის პირადი გასაღების ფაილის მდებარეობა." -#: utils/misc/guc_tables.c:4527 +#: utils/misc/guc_tables.c:4533 msgid "Location of the SSL certificate authority file." msgstr "SSL სერვერის CA ფაილის მდებარეობა." -#: utils/misc/guc_tables.c:4537 +#: utils/misc/guc_tables.c:4543 msgid "Location of the SSL certificate revocation list file." msgstr "SSL სერვერის გაუქმებული სერტიფიკატების სიის ფაილის მდებარეობა." -#: utils/misc/guc_tables.c:4547 +#: utils/misc/guc_tables.c:4553 msgid "Location of the SSL certificate revocation list directory." msgstr "SSL სერვერის გაუქმებული სერტიფიკატების სიის საქაღალდის მდებარეობა." -#: utils/misc/guc_tables.c:4557 +#: utils/misc/guc_tables.c:4563 msgid "Number of synchronous standbys and list of names of potential synchronous ones." msgstr "" -#: utils/misc/guc_tables.c:4568 +#: utils/misc/guc_tables.c:4574 msgid "Sets default text search configuration." msgstr "ტექსტის ძებნის ნაგულისხმევი კონფიგურაციის დაყენება." -#: utils/misc/guc_tables.c:4578 +#: utils/misc/guc_tables.c:4584 msgid "Sets the list of allowed SSL ciphers." msgstr "ჩართული SSL შიფრაციების სიის დაყენება." -#: utils/misc/guc_tables.c:4593 +#: utils/misc/guc_tables.c:4599 msgid "Sets the curve to use for ECDH." msgstr "ECDH-სთვის გამოყენებული მრუდის დაყენება." -#: utils/misc/guc_tables.c:4608 +#: utils/misc/guc_tables.c:4614 msgid "Location of the SSL DH parameters file." msgstr "SSH DH პარამეტრების ფაილის მდებარეობა." -#: utils/misc/guc_tables.c:4619 +#: utils/misc/guc_tables.c:4625 msgid "Command to obtain passphrases for SSL." msgstr "SSL-ის საკვანძო ფრაზების მისაღები ბრძანება." -#: utils/misc/guc_tables.c:4630 +#: utils/misc/guc_tables.c:4636 msgid "Sets the application name to be reported in statistics and logs." msgstr "" -#: utils/misc/guc_tables.c:4641 +#: utils/misc/guc_tables.c:4647 msgid "Sets the name of the cluster, which is included in the process title." msgstr "" -#: utils/misc/guc_tables.c:4652 +#: utils/misc/guc_tables.c:4658 msgid "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "" -#: utils/misc/guc_tables.c:4653 +#: utils/misc/guc_tables.c:4659 msgid "Full-page images will be logged for all data blocks and cross-checked against the results of WAL replay." msgstr "" -#: utils/misc/guc_tables.c:4663 +#: utils/misc/guc_tables.c:4669 msgid "JIT provider to use." msgstr "JIT სერვისის მომწოდებელი." -#: utils/misc/guc_tables.c:4674 +#: utils/misc/guc_tables.c:4680 msgid "Log backtrace for errors in these functions." msgstr "მითითებულ ფუნქციებში შეცდომის შემთხვევაში სტეკის ჟურნალში ჩაწერა." -#: utils/misc/guc_tables.c:4685 +#: utils/misc/guc_tables.c:4691 msgid "Use direct I/O for file access." msgstr "ფაილებთან წვდომისთვის პირდაპირი შეტანა/გამოტანის გამოყენება." -#: utils/misc/guc_tables.c:4696 -msgid "Lists streaming replication standby server slot names that logical WAL sender processes will wait for." +#: utils/misc/guc_tables.c:4702 +msgid "Lists streaming replication standby server replication slot names that logical WAL sender processes will wait for." +msgstr "" + +#: utils/misc/guc_tables.c:4704 +msgid "Logical WAL sender processes will send decoded changes to output plugins only after the specified replication slots have confirmed receiving WAL." msgstr "" -#: utils/misc/guc_tables.c:4698 -msgid "Logical WAL sender processes will send decoded changes to plugins only after the specified replication slots confirm receiving WAL." +#: utils/misc/guc_tables.c:4716 +msgid "Prohibits access to non-system relations of specified kinds." msgstr "" -#: utils/misc/guc_tables.c:4719 +#: utils/misc/guc_tables.c:4736 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "შეიძლება თუ არა ტექსტურ სტრიქონებში \"\\\" სიმბოლოს გამოყენება." -#: utils/misc/guc_tables.c:4729 +#: utils/misc/guc_tables.c:4746 msgid "Sets the output format for bytea." msgstr "\"bytea\"-ის გამოსატანი ფორმატის დაყენება." -#: utils/misc/guc_tables.c:4739 +#: utils/misc/guc_tables.c:4756 msgid "Sets the message levels that are sent to the client." msgstr "კლიენტთან გაგზავნილი შეტყობინების დონეების დაყენება." -#: utils/misc/guc_tables.c:4740 utils/misc/guc_tables.c:4836 utils/misc/guc_tables.c:4847 +#: utils/misc/guc_tables.c:4757 utils/misc/guc_tables.c:4853 utils/misc/guc_tables.c:4864 msgid "Each level includes all the levels that follow it. The later the level, the fewer messages are sent." msgstr "" -#: utils/misc/guc_tables.c:4750 +#: utils/misc/guc_tables.c:4767 msgid "Enables in-core computation of query identifiers." msgstr "მოთხოვნის იდენტიფიკატორის ბირთვის-შიდა გამოთვლის ჩართვა." -#: utils/misc/guc_tables.c:4760 +#: utils/misc/guc_tables.c:4777 msgid "Enables the planner to use constraints to optimize queries." msgstr "მგეგმავისთვის შეზღუდვების ჩართვა, მოთხოვნების ოპტიმიზაციისთვის." -#: utils/misc/guc_tables.c:4761 +#: utils/misc/guc_tables.c:4778 msgid "Table scans will be skipped if their constraints guarantee that no rows match the query." msgstr "" -#: utils/misc/guc_tables.c:4772 +#: utils/misc/guc_tables.c:4789 msgid "Sets the default compression method for compressible values." msgstr "შეკუმშვადი მნიშვნელობების ნაგულისხმევი შეკუმშვის მეთოდის დაყენება." -#: utils/misc/guc_tables.c:4783 +#: utils/misc/guc_tables.c:4800 msgid "Sets the transaction isolation level of each new transaction." msgstr "ახალი ტრანზაქციების იზოლაციის დონის დაყენება." -#: utils/misc/guc_tables.c:4793 +#: utils/misc/guc_tables.c:4810 msgid "Sets the current transaction's isolation level." msgstr "მიმდინარე ტრანზაქციის იზოლაციის დონის დაყენება." -#: utils/misc/guc_tables.c:4804 +#: utils/misc/guc_tables.c:4821 msgid "Sets the display format for interval values." msgstr "ინტერვალის მნიშვნელობების საჩვენებელი ფორმატის დაყენება." -#: utils/misc/guc_tables.c:4815 +#: utils/misc/guc_tables.c:4832 msgid "Log level for reporting invalid ICU locale strings." msgstr "ჟურნალის დონე არასწორი ICU ლოკალის სტრიქონების ანგარიშისთვის." -#: utils/misc/guc_tables.c:4825 +#: utils/misc/guc_tables.c:4842 msgid "Sets the verbosity of logged messages." msgstr "ჟურნალში ჩაწერილი შეტყობინებების დეტალურობის დაყენება." -#: utils/misc/guc_tables.c:4835 +#: utils/misc/guc_tables.c:4852 msgid "Sets the message levels that are logged." msgstr "ჟურნალში ჩასაწერი შეტყობინების დონეების დაყენება." -#: utils/misc/guc_tables.c:4846 +#: utils/misc/guc_tables.c:4863 msgid "Causes all statements generating error at or above this level to be logged." msgstr "შეცდომის მითითებული ან უფრო ზედა კოდების ჟურნალში ჩაწერის მითითება." -#: utils/misc/guc_tables.c:4857 +#: utils/misc/guc_tables.c:4874 msgid "Sets the type of statements logged." msgstr "ჟურნალში ჩასაწერი ოპერატორის ტიპების დაყენება." -#: utils/misc/guc_tables.c:4867 +#: utils/misc/guc_tables.c:4884 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "თუ სისტემურ ჟურნალში ჩაწერა ჩართულია, მიუთითებს syslog-ის \"facility\"-ის." -#: utils/misc/guc_tables.c:4878 +#: utils/misc/guc_tables.c:4895 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "სესიის ქცევის დაყენება ტრიგერებისა და გადაწერის წესებისთვის." -#: utils/misc/guc_tables.c:4888 +#: utils/misc/guc_tables.c:4905 msgid "Sets the current transaction's synchronization level." msgstr "მიმდინარე ტრანზაქციის სინქრონიზაციის დონის დაყენება." -#: utils/misc/guc_tables.c:4898 +#: utils/misc/guc_tables.c:4915 msgid "Allows archiving of WAL files using \"archive_command\"." msgstr "'WAL' ფაილების დაარქივების დაშვება 'archive_command'-ის გამოყენებით." -#: utils/misc/guc_tables.c:4908 +#: utils/misc/guc_tables.c:4925 msgid "Sets the action to perform upon reaching the recovery target." msgstr "" -#: utils/misc/guc_tables.c:4918 +#: utils/misc/guc_tables.c:4935 msgid "Collects function-level statistics on database activity." msgstr "აგროვებს ფუნქციის დონის სტატისტიკას ბაზის აქტივობების შესახებ." -#: utils/misc/guc_tables.c:4929 +#: utils/misc/guc_tables.c:4946 msgid "Sets the consistency of accesses to statistics data." msgstr "სტატისტიკის მონაცემებთან წვდომის მიმდევრობის დაყენება." -#: utils/misc/guc_tables.c:4939 +#: utils/misc/guc_tables.c:4956 msgid "Compresses full-page writes written in WAL file with specified method." msgstr "'WAL' ფაილში მითითებული მეთოდით ჩაწერილი სრული გვერდის ჩაწერების შეკუმშვა." -#: utils/misc/guc_tables.c:4949 +#: utils/misc/guc_tables.c:4966 msgid "Sets the level of information written to the WAL." msgstr "WAL-ში ჩაწერილი ინფორმაციის დონის დაყენება." -#: utils/misc/guc_tables.c:4959 +#: utils/misc/guc_tables.c:4976 msgid "Selects the dynamic shared memory implementation used." msgstr "გამოყენებული გაზიარებული მეხსიერების განხორციელების არჩევა." -#: utils/misc/guc_tables.c:4969 +#: utils/misc/guc_tables.c:4986 msgid "Selects the shared memory implementation used for the main shared memory region." msgstr "" -#: utils/misc/guc_tables.c:4979 +#: utils/misc/guc_tables.c:4996 msgid "Selects the method used for forcing WAL updates to disk." msgstr "WAL-ისთვის დისკზე განახლებების ნაძალადევად ჩაწერის მეთოდის დაყენება." -#: utils/misc/guc_tables.c:4989 +#: utils/misc/guc_tables.c:5006 msgid "Sets how binary values are to be encoded in XML." msgstr "XML-ში ბინარული მნიშვნელობების კოდირების ტიპის დაყენება." -#: utils/misc/guc_tables.c:4999 +#: utils/misc/guc_tables.c:5016 msgid "Sets whether XML data in implicit parsing and serialization operations is to be considered as documents or content fragments." msgstr "" -#: utils/misc/guc_tables.c:5010 +#: utils/misc/guc_tables.c:5027 msgid "Use of huge pages on Linux or Windows." msgstr "Linux-ზე და Windows-ზე უზარმაზარი გვერდების გამოყენება." -#: utils/misc/guc_tables.c:5020 +#: utils/misc/guc_tables.c:5037 msgid "Indicates the status of huge pages." msgstr "" -#: utils/misc/guc_tables.c:5031 +#: utils/misc/guc_tables.c:5048 msgid "Prefetch referenced blocks during recovery." msgstr "აღდგენისას მიბმული ბლოკების წინასწარ გამოთხოვა." -#: utils/misc/guc_tables.c:5032 +#: utils/misc/guc_tables.c:5049 msgid "Look ahead in the WAL to find references to uncached data." msgstr "" -#: utils/misc/guc_tables.c:5041 +#: utils/misc/guc_tables.c:5058 msgid "Forces the planner's use parallel query nodes." msgstr "დამგეგმავის მიერ პარალელური მოთხოვნის კვანძების ნაძალადევი გამოყენების ჩართვა." -#: utils/misc/guc_tables.c:5042 +#: utils/misc/guc_tables.c:5059 msgid "This can be useful for testing the parallel query infrastructure by forcing the planner to generate plans that contain nodes that perform tuple communication between workers and the main process." msgstr "" -#: utils/misc/guc_tables.c:5054 +#: utils/misc/guc_tables.c:5071 msgid "Chooses the algorithm for encrypting passwords." msgstr "აირჩიეთ პაროლების დასაშიფრად გამოყენებული ალგორითმი." -#: utils/misc/guc_tables.c:5064 +#: utils/misc/guc_tables.c:5081 msgid "Controls the planner's selection of custom or generic plan." msgstr "" -#: utils/misc/guc_tables.c:5065 +#: utils/misc/guc_tables.c:5082 msgid "Prepared statements can have custom and generic plans, and the planner will attempt to choose which is better. This can be set to override the default behavior." msgstr "" -#: utils/misc/guc_tables.c:5077 +#: utils/misc/guc_tables.c:5094 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "SSL/TLS-ის პროტოკოლის მინიმალური ვერსიის დაყენება." -#: utils/misc/guc_tables.c:5089 +#: utils/misc/guc_tables.c:5106 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "SSL/TLS-ის პროტოკოლის მაქსიმალური ვერსიის დაყენება." -#: utils/misc/guc_tables.c:5101 +#: utils/misc/guc_tables.c:5118 msgid "Sets the method for synchronizing the data directory before crash recovery." msgstr "" -#: utils/misc/guc_tables.c:5110 +#: utils/misc/guc_tables.c:5127 msgid "Forces immediate streaming or serialization of changes in large transactions." msgstr "" -#: utils/misc/guc_tables.c:5111 +#: utils/misc/guc_tables.c:5128 msgid "On the publisher, it allows streaming or serializing each change in logical decoding. On the subscriber, it allows serialization of all changes to files and notifies the parallel apply workers to read and apply them at the end of the transaction." msgstr "" @@ -30139,7 +30041,7 @@ msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" msgstr "" -#: utils/mmgr/portalmem.c:1229 +#: utils/mmgr/portalmem.c:1232 #, c-format msgid "cannot perform transaction commands inside a cursor loop that is not read-only" msgstr "" @@ -30239,6 +30141,10 @@ #~ msgstr " GSS (ავთენტიფიცირებული=%s, დაშიფრული=%s)" #, c-format +#~ msgid "\"%s\" is not a partition" +#~ msgstr "\"%s\" დანაყოფი არაა" + +#, c-format #~ msgid "-X requires a power of two value between 1 MB and 1 GB" #~ msgstr "-X მოითხოვს მნიშვნელობას, რომელიც ორის ხარისხია და არის 1 მბ-სა და 1გბ-ს შორის" @@ -30246,6 +30152,54 @@ #~ msgstr "მნიშვნელობა -1 გამორთავს ამ ფუნქციას." #, c-format +#~ msgid "COPY DEFAULT only available using COPY FROM" +#~ msgstr "COPY DEFAULT მხოლოდ COPY FROM-ის გამოყენების დროსაა ხელმისაწვდომი" + +#, c-format +#~ msgid "COPY ESCAPE requires CSV mode" +#~ msgstr "COPY ESCAPE-ს CSV რეჟიმი სჭირდება" + +#, c-format +#~ msgid "COPY FORCE_NOT_NULL cannot be used with COPY TO" +#~ msgstr "COPY FORCE_NOT_NULL-ს COPY TO-სთან ერთად ვერ გამოიყენებთ" + +#, c-format +#~ msgid "COPY FORCE_NOT_NULL requires CSV mode" +#~ msgstr "COPY FORCE_NOT_NULL-ს CSV რეჟიმი სჭირდება" + +#, c-format +#~ msgid "COPY FORCE_NULL cannot be used with COPY TO" +#~ msgstr "COPY FORCE_NULL-ს COPY TO-სთან ერთად ვერ გამოიყენებთ" + +#, c-format +#~ msgid "COPY FORCE_NULL requires CSV mode" +#~ msgstr "COPY FORCE_NULL-ს CSV რეჟიმი სჭირდება" + +#, c-format +#~ msgid "COPY FORCE_QUOTE cannot be used with COPY FROM" +#~ msgstr "COPY FORCE_QUOTE-ს COPY FROM-სთან ერთად ვერ გამოიყენებთ" + +#, c-format +#~ msgid "COPY FORCE_QUOTE requires CSV mode" +#~ msgstr "COPY FORCE_QUOTE-ს CSV რეჟიმი სჭირდება" + +#, c-format +#~ msgid "COPY LOG_VERBOSITY \"%s\" not recognized" +#~ msgstr "COPY LOG_VERBOSITY \"%s\" უცნობია" + +#, c-format +#~ msgid "COPY ON_ERROR \"%s\" not recognized" +#~ msgstr "COPY ON_ERROR \"%s\" უცნობია" + +#, c-format +#~ msgid "COPY ON_ERROR cannot be used with COPY TO" +#~ msgstr "COPY ON_ERROR-ს COPY TO-სთან ერთად ვერ გამოიყენებთ" + +#, c-format +#~ msgid "COPY delimiter must not appear in the DEFAULT specification" +#~ msgstr "COPY-ის გამყოფი DEFAULT-ის სპეციფიკაციაში არ უნდა გამოჩნდეს" + +#, c-format #~ msgid "COPY escape available only in CSV mode" #~ msgstr "COPY-ის სპეცსიმბოლო მხოლოდ CSV -ის რეჟიმშია ხელმისაწვდომი" @@ -30277,6 +30231,18 @@ #~ msgid "COPY quote available only in CSV mode" #~ msgstr "COPY-ის ბრჭყალი მხოლოდ CSV -ის რეჟიმშია ხელმისაწვდომი" +#, c-format +#~ msgid "CSV quote character must not appear in the DEFAULT specification" +#~ msgstr "CSV-ის ბრჭყალის სიმბოლო DEFAULT-ის სპეციფიკაციაში არ უნდა გამოჩნდეს" + +#, c-format +#~ msgid "Consider creating the slot \"%s\" or amend parameter %s." +#~ msgstr "განიხილეთ, შექმნათ სლოტი \"%s\", ან მიაწერეთ პარამეტრი %s." + +#, c-format +#~ msgid "Consider increasing the configuration parameter \"max_worker_processes\"." +#~ msgstr "გაითვალისწინეთ, რომ შეიძლება კონფიგურაციის პარამეტრის \"max_worker_processes\" გაზრდა გჭირდებათ." + #~ msgid "Controls when to replicate or apply each change." #~ msgstr "აკონტროლებს, როდის მოხდება თითოეული ცვლილების რეპლიკაცია ან გადატარება." @@ -30295,6 +30261,14 @@ #~ msgstr "არსებული შეზღუდვა \"%s\" დანიშნულია, როგორც NO INHERIT." #, c-format +#~ msgid "FORCE_NOT_NULL column \"%s\" not referenced by COPY" +#~ msgstr "FORCE_NOT_NULL სვეტი \"%s\" COPY-ის მიერ მითითებული არაა" + +#, c-format +#~ msgid "FORCE_QUOTE column \"%s\" not referenced by COPY" +#~ msgstr "FORCE_QUOTE სვეტი \"%s\" COPY-ის მიერ მითითებული არაა" + +#, c-format #~ msgid "For example, FROM (SELECT ...) [AS] foo." #~ msgstr "მაგალითად, FROM (SELECT ...) [AS] foo." @@ -30336,6 +30310,18 @@ #~ msgstr "\"MERGE\"-ი \"WITH\" მოთხოვნაში მხარდაუჭერელია" #, c-format +#~ msgid "MaxFragments should be >= 0" +#~ msgstr "MaxFragments >= 0 უნდა იყოს" + +#, c-format +#~ msgid "MinWords should be less than MaxWords" +#~ msgstr "MinWords MaxWords-ზე ნაკლები უნდა იყოს" + +#, c-format +#~ msgid "MinWords should be positive" +#~ msgstr "MinWords დადებით უნდა იყოს" + +#, c-format #~ msgid "Object keys should be text." #~ msgstr "ობიექტის გასაღებები ტექსტი უნდა იყოს." @@ -30343,6 +30329,10 @@ #~ msgid "Only range and multirange are supported." #~ msgstr "მხარდაჭერილია, მხოლოდ, შუალედი და მრავალი შუალედი." +#, c-format +#~ msgid "Please report this to <%s>." +#~ msgstr "გთხოვთ, შეატყობინოთ <%s>." + #~ msgid "Recursive descent parser cannot use incremental lexer" #~ msgstr "რეკურსიულ დაღმავალ დამმუშავებელს ინკრემენტული lexer-ის გამოყენება არ შეუძლია" @@ -30350,6 +30340,10 @@ #~ msgid "SQL/JSON item cannot be cast to target type" #~ msgstr "SQL/JSON ჩანაწერი მითითებულ ტიპში ვერ გადავა" +#, c-format +#~ msgid "ShortWord should be >= 0" +#~ msgstr "ShortWord >= 0 უნდა იყოს" + #~ msgid "Shows the character classification and case conversion locale." #~ msgstr "სიმბოლოების ზომის გადაყვანისა და სიმბოლოების კლასიფიკაციის ენის ჩვენება." @@ -30371,6 +30365,10 @@ #~ msgstr "ვერ ვიპოვე შესაბამისი ოპერატორი ოპერატორების ოჯახში \"%s\" წვდომის მეთოდისთვის \"%s\"." #, c-format +#~ msgid "This slot is being synced from the primary server." +#~ msgstr "მიმდინარეობს ამ სლოტის სინქრონიზაცია ძირითადი სერვერიდან." + +#, c-format #~ msgid "Unmatched \"%c\" character." #~ msgstr "სიმბოლო \"%c\" არ ემთხვევა." @@ -30424,6 +30422,10 @@ #~ msgstr "საეჭვო შეყვანა" #, c-format +#~ msgid "can not find partition for split partition row" +#~ msgstr "დაყოფილი დანაყოფის მწკრივისთვის დანაყოფი ვერ ვიპოვე" + +#, c-format #~ msgid "cannot add NOT NULL constraint to column \"%s\" of relation \"%s\" with inheritance children" #~ msgstr "ვერ დავამატე NOT NULL შეზღუდვა სვეტს \"%s\" ურთიერთობაზე \"%s\" რომელსაც მემკვიდრეობითი შვილები გააჩნია" @@ -30444,6 +30446,14 @@ #~ msgstr "პარალელური ოპერაციის დროს ქვეტრანსაქციების გადაგზავნა შეუძლებელია" #, c-format +#~ msgid "cannot create a permanent relation as partition of temporary relation \"%s\"" +#~ msgstr "მუდმივ ურთიერთობას დროებითი ურთიერთობის \"%s\" დანაყოფის სახით ვერ შექმნით" + +#, c-format +#~ msgid "cannot create as partition of temporary relation of another session" +#~ msgstr "სხვა სესის დროებითი ურთიერთობის დანაყოფის სახით ვერ შექმნით" + +#, c-format #~ msgid "cannot create exclusion constraints on partitioned table \"%s\"" #~ msgstr "დაყოფილ ცხრილზე (\"%s\") ექსკლუზიური შეზღუდვების შექმნა შეუძლებელია" @@ -30460,6 +30470,18 @@ #~ msgstr "არასწორი ინდექსის \"%s.%s\" პარალელური რეინდექსი შეუძლებელია. გამოტოვება" #, c-format +#~ msgid "cannot specify DEFAULT in BINARY mode" +#~ msgstr "'BINARY' რეჟიმში DEFAULT-ს ვერ მიუთითებთ" + +#, c-format +#~ msgid "cannot specify DELIMITER in BINARY mode" +#~ msgstr "რეჟიმში BINARY \"DELIMITER\"-ს ვერ მიუთითებთ" + +#, c-format +#~ msgid "cannot specify HEADER in BINARY mode" +#~ msgstr "რეჟიმში BINARY \"HEADER\"-ს ვერ მიუთითებთ" + +#, c-format #~ msgid "cannot start subtransactions during a parallel operation" #~ msgstr "პარალელური ოპერაციის დროს ქვეტრანსაქციების დაწყება შეუძლებელია" @@ -30468,6 +30490,14 @@ #~ msgstr "უსასრულო დროის შტამპების გამოკლება შეუძლებელია" #, c-format +#~ msgid "cannot use RETURNING type %s in %s" +#~ msgstr "'RETURNING'-ის ტიპს '%s' %s-ში ვერ გამოიყენებთ" + +#, c-format +#~ msgid "cannot use more than one FOR ORDINALITY column" +#~ msgstr "ერთზე მეტ FOR ORDINALITY სვეტს ვერ გამოიყენებთ" + +#, c-format #~ msgid "collation provider LIBC is not supported on this platform" #~ msgstr "კოლაციის მომწოდებელი LIBC ამ პლატფორმაზე მხარდაჭერილი არაა" @@ -30576,6 +30606,10 @@ #~ msgstr "წახალისების ტრიგერის ფაილი (\"%s\") არ არსებობს: %m" #, c-format +#~ msgid "could not sync slot \"%s\"" +#~ msgstr "სლოტის \"%s\" სინქრონიზაცია შეუძლებელია" + +#, c-format #~ msgid "could not unlink file \"%s\": %m" #~ msgstr "ფაილის (%s) ბმულის მოხსნის შეცდომა: %m" @@ -30616,6 +30650,10 @@ #~ msgstr "int2vector -ს მეტისმეტად ბევრი ელემენტი აქვს" #, c-format +#~ msgid "interval out of range." +#~ msgstr "ინტერვალი დაშვებული შუალედის გარეთაა." + +#, c-format #~ msgid "invalid JSON_TABLE expression" #~ msgstr "\"JSON_TABLE\"-ის არასწორი გამოსახულება" @@ -30624,6 +30662,14 @@ #~ msgstr "\"JSON_TABLE\"-ის არასწორი გეგმა" #, c-format +#~ msgid "invalid ON ERROR behavior" +#~ msgstr "\"ON UPDATE\"-ის არასწორი ქცევა" + +#, c-format +#~ msgid "invalid ON ERROR behavior for column \"%s\"" +#~ msgstr "\"ON ERROR\"-ის არასწორი ქცევა სვეტისთვის \"%s\"" + +#, c-format #~ msgid "invalid checkpoint link in backup_label file" #~ msgstr "backup_label ფაილში არსებული საკონტროლო წერტილი არასწორია" @@ -30669,6 +30715,21 @@ #~ msgstr "ლოგიკური რეპლიკაციის ცხრილის სინქრონიზაციის დამხმარე პროცესი" #, c-format +#~ msgid "lower bound of partition \"%s\" conflicts with upper bound of previous partition \"%s\"" +#~ msgstr "დანაყოფის \"%s\" ქვედა ზღვარი კონფლიქტშია ზედა ზღვართან წინა დანაყოფისთვის \"%s\"" + +#, c-format +#~ msgid "lower bound of partition \"%s\" is less than lower bound of split partition" +#~ msgstr "ქვედა ზღვარი დანაყოფისთვის \"%s\" დაყოფილი დანაყოფის ქვედა საზღვარზე ნაკლებია" + +#, c-format +#~ msgid "lower bound of partition \"%s\" is not equal to lower bound of split partition" +#~ msgstr "ქვედა ზღვარი დანაყოფისთვის \"%s\" არ უდრის დაყოფილი დანაყოფის ქვედა საზღვარს" + +#~ msgid "manifest system identifier not an integer" +#~ msgstr "მანიფესტის სისტემის იდენფიტიკატორი მთელი რიცხვი არაა" + +#, c-format #~ msgid "missing contrecord at %X/%X" #~ msgstr "მისამართზე %X/%X contrecord ალამი არ არსებობს" @@ -30725,6 +30786,22 @@ #~ msgstr "გამოწერების შესაქმნელად pg_create_subscription-ის პრივილეგიები გჭიდებათ" #, c-format +#~ msgid "name \"%s\" is already used" +#~ msgstr "სახელი \"%s\" უკვე გამოყენებულია" + +#, c-format +#~ msgid "new partition \"%s\" would overlap with another (not split) partition \"%s\"" +#~ msgstr "ახალი დანაყოფი \"%s\" გადაფარავდა სხვა (არა დაყოფილ) დანაყოფს \"%s\"" + +#, c-format +#~ msgid "new partition \"%s\" would overlap with another new partition \"%s\"" +#~ msgstr "ახალი დანაყოფი \"%s\" გადაფარავდა სხვა ახალ დანაყოფს \"%s\"" + +#, c-format +#~ msgid "new partitions do not have value %s but split partition does" +#~ msgstr "ახალ დანაყოფს არ აქვს მნიშვნელობა %s, მაგრამ გაყოფილ დანაყოფს აქვს" + +#, c-format #~ msgid "no SQL/JSON item" #~ msgstr "\"SQL/JSON\" ჩანაწერების გარეშე" @@ -30765,10 +30842,30 @@ #~ msgstr "უნდა იყოს მითითებული პარამეტრი \"lc_ctype\"" #, c-format +#~ msgid "partition of hash-partitioned table cannot be merged" +#~ msgstr "ჰეშით დაყოფილი ცხრილის დანაყოფების შერწყმა შეუძლებელია" + +#, c-format +#~ msgid "partition of hash-partitioned table cannot be split" +#~ msgstr "ჰეშით დაყოფილი ცხრილის დანაყოფების დაყოფა შეუძლებელია" + +#, c-format +#~ msgid "partition with name \"%s\" is already used" +#~ msgstr "დანაყოფი სახელით \"%s\" უკვე გამოყენებულია" + +#, c-format #~ msgid "promote trigger file found: %s" #~ msgstr "ნაპოვნია წახალისების ტრიგერის ფაილი: %s" #, c-format +#~ msgid "proto_version option missing" +#~ msgstr "პარამეტრი proto_version მითითებული არაა" + +#, c-format +#~ msgid "publication_names option missing" +#~ msgstr "აკლა პარამეტრი publication_names" + +#, c-format #~ msgid "record length %u at %X/%X too long" #~ msgstr "ჩანაწერის სიგრძე %u მისამართზე %X/%X ძალიან გრძელია" @@ -30784,6 +30881,25 @@ #~ msgid "statistics object with OID %u does not exist" #~ msgstr "სტატისტიკის ობიექტი OID-ით %u არ არსებობს" +#, fuzzy, c-format +#~| msgid "array size exceeds the maximum allowed (%d)" +#~ msgid "string buffer exceeds maximum allowed length (%zu bytes)" +#~ msgstr "მასივის ზომა მაქსიმალურ დასაშვებს(%d) აჭარბებს" + +#, fuzzy, c-format +#~| msgid "" +#~| "out of memory\n" +#~| "\n" +#~| "Cannot enlarge string buffer containing %d bytes by %d more bytes.\n" +#~ msgid "" +#~ "string buffer exceeds maximum allowed length (%zu bytes)\n" +#~ "\n" +#~ "Cannot enlarge string buffer containing %d bytes by %d more bytes.\n" +#~ msgstr "" +#~ "არასაკმარისი მეხსიერების\n" +#~ "\n" +#~ "შეუძლებელია სტრიქონის ბუფერის (%d ბაიტიგ) აფართოება %d ბაიტით.\n" + #, c-format #~ msgid "subquery in FROM must have an alias" #~ msgstr "ქვემოთხოვნას \"FROM\"-ში მეტსახელი უნდა ჰქონდეს" @@ -30817,6 +30933,10 @@ #~ msgstr "timestamp_tz-ის ფორმატი უცნობია: \"%s\"" #, c-format +#~ msgid "too many wait events for extensions" +#~ msgstr "მეტისმეტად ბევრი მოცდის მოვლენა გაფართოებებისთვის" + +#, c-format #~ msgid "unable to map dynamic shared memory segment" #~ msgstr "დინამიური გაზიარებული მეხსიერების სეგმენტის მიბმის შეცდომა" @@ -30842,3 +30962,11 @@ #, c-format #~ msgid "unsupported %s action for foreign key constraint using PERIOD" #~ msgstr "მხარდაუჭერელი %s ქმედება გარე გასაღების შეზღუდვისთვის, რომელიც PERIOD-ს იყენებს" + +#, c-format +#~ msgid "upper bound of partition \"%s\" is greater than upper bound of split partition" +#~ msgstr "ზედა ზღვარი დანაყოფისთვის \"%s\" დაყოფილი დანაყოფის ზედა საზღვარზე მეტია" + +#, c-format +#~ msgid "upper bound of partition \"%s\" is not equal to upper bound of split partition" +#~ msgstr "ზედა ზღვარი დანაყოფისთვის \"%s\" არ უდრის დაყოფილი დანაყოფის ზედა საზღვარს" diff -Nru postgresql-17-17.9/src/backend/po/ru.po postgresql-17-17.10/src/backend/po/ru.po --- postgresql-17-17.9/src/backend/po/ru.po 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/po/ru.po 2026-05-11 19:46:41.000000000 +0000 @@ -10,8 +10,8 @@ msgstr "" "Project-Id-Version: postgres (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2026-02-21 05:20+0200\n" -"PO-Revision-Date: 2026-02-21 05:29+0200\n" +"POT-Creation-Date: 2026-05-10 08:01+0300\n" +"PO-Revision-Date: 2026-05-10 08:36+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -96,7 +96,7 @@ #: ../common/controldata_utils.c:108 ../common/controldata_utils.c:110 #: access/transam/timeline.c:143 access/transam/timeline.c:362 -#: access/transam/twophase.c:1353 access/transam/xlog.c:3458 +#: access/transam/twophase.c:1354 access/transam/xlog.c:3458 #: access/transam/xlog.c:4322 access/transam/xlogrecovery.c:1248 #: access/transam/xlogrecovery.c:1346 access/transam/xlogrecovery.c:1383 #: access/transam/xlogrecovery.c:1450 backup/basebackup.c:2123 @@ -125,8 +125,8 @@ #: ../common/controldata_utils.c:277 ../common/controldata_utils.c:280 #: access/heap/rewriteheap.c:1141 access/heap/rewriteheap.c:1246 #: access/transam/timeline.c:392 access/transam/timeline.c:438 -#: access/transam/timeline.c:512 access/transam/twophase.c:1365 -#: access/transam/twophase.c:1784 access/transam/xlog.c:3304 +#: access/transam/timeline.c:512 access/transam/twophase.c:1366 +#: access/transam/twophase.c:1785 access/transam/xlog.c:3304 #: access/transam/xlog.c:3498 access/transam/xlog.c:3503 #: access/transam/xlog.c:3639 access/transam/xlog.c:4292 #: access/transam/xlog.c:5227 commands/copyfrom.c:1799 commands/copyto.c:325 @@ -165,7 +165,7 @@ #: ../common/file_utils.c:406 ../common/file_utils.c:480 #: access/heap/rewriteheap.c:1229 access/transam/timeline.c:111 #: access/transam/timeline.c:251 access/transam/timeline.c:348 -#: access/transam/twophase.c:1309 access/transam/xlog.c:3211 +#: access/transam/twophase.c:1310 access/transam/xlog.c:3211 #: access/transam/xlog.c:3374 access/transam/xlog.c:3413 #: access/transam/xlog.c:3606 access/transam/xlog.c:4312 #: access/transam/xlogrecovery.c:4285 access/transam/xlogrecovery.c:4388 @@ -177,7 +177,7 @@ #: replication/logical/reorderbuffer.c:5223 #: replication/logical/snapbuild.c:1821 replication/logical/snapbuild.c:1931 #: replication/slot.c:2253 replication/walsender.c:646 -#: replication/walsender.c:3099 storage/file/copydir.c:151 +#: replication/walsender.c:3108 storage/file/copydir.c:151 #: storage/file/fd.c:803 storage/file/fd.c:3510 storage/file/fd.c:3740 #: storage/file/fd.c:3830 storage/smgr/md.c:672 utils/cache/relmapper.c:818 #: utils/cache/relmapper.c:935 utils/error/elog.c:2124 @@ -188,10 +188,10 @@ msgstr "не удалось открыть файл \"%s\": %m" #: ../common/controldata_utils.c:246 ../common/controldata_utils.c:249 -#: access/transam/twophase.c:1757 access/transam/twophase.c:1766 +#: access/transam/twophase.c:1758 access/transam/twophase.c:1767 #: access/transam/xlog.c:9346 access/transam/xlogfuncs.c:698 #: backup/basebackup_server.c:173 backup/basebackup_server.c:266 -#: backup/walsummary.c:304 postmaster/postmaster.c:4129 +#: backup/walsummary.c:304 postmaster/postmaster.c:4115 #: postmaster/syslogger.c:1522 postmaster/syslogger.c:1535 #: postmaster/syslogger.c:1548 utils/cache/relmapper.c:947 #, c-format @@ -202,7 +202,7 @@ #: ../common/file_utils.c:418 ../common/file_utils.c:488 #: access/heap/rewriteheap.c:925 access/heap/rewriteheap.c:1135 #: access/heap/rewriteheap.c:1240 access/transam/timeline.c:432 -#: access/transam/timeline.c:506 access/transam/twophase.c:1778 +#: access/transam/timeline.c:506 access/transam/twophase.c:1779 #: access/transam/xlog.c:3297 access/transam/xlog.c:3492 #: access/transam/xlog.c:4285 access/transam/xlog.c:8721 #: access/transam/xlog.c:8766 backup/basebackup_server.c:207 @@ -221,21 +221,21 @@ #: ../common/md5_common.c:156 ../common/parse_manifest.c:157 #: ../common/parse_manifest.c:852 ../common/psprintf.c:143 #: ../common/scram-common.c:268 ../common/stringinfo.c:314 ../port/path.c:828 -#: ../port/path.c:865 ../port/path.c:882 access/transam/twophase.c:1418 +#: ../port/path.c:865 ../port/path.c:882 access/transam/twophase.c:1419 #: access/transam/xlogrecovery.c:564 lib/dshash.c:253 libpq/auth.c:1360 #: libpq/auth.c:1404 libpq/auth.c:1961 libpq/be-secure-gssapi.c:534 #: libpq/be-secure-gssapi.c:714 postmaster/bgworker.c:355 -#: postmaster/bgworker.c:945 postmaster/postmaster.c:3562 -#: postmaster/postmaster.c:4023 postmaster/postmaster.c:4385 -#: postmaster/walsummarizer.c:935 +#: postmaster/bgworker.c:945 postmaster/postmaster.c:3548 +#: postmaster/postmaster.c:4009 postmaster/postmaster.c:4371 +#: postmaster/walsummarizer.c:936 #: replication/libpqwalreceiver/libpqwalreceiver.c:400 #: replication/logical/logical.c:212 replication/walsender.c:853 #: storage/buffer/localbuf.c:606 storage/file/fd.c:912 storage/file/fd.c:1443 #: storage/file/fd.c:1604 storage/file/fd.c:2531 storage/ipc/procarray.c:1465 #: storage/ipc/procarray.c:2219 storage/ipc/procarray.c:2226 #: storage/ipc/procarray.c:2731 storage/ipc/procarray.c:3435 -#: utils/activity/pgstat_shmem.c:508 utils/adt/formatting.c:1725 -#: utils/adt/formatting.c:1873 utils/adt/formatting.c:2075 +#: utils/activity/pgstat_shmem.c:508 utils/adt/formatting.c:1727 +#: utils/adt/formatting.c:1875 utils/adt/formatting.c:2077 #: utils/adt/pg_locale.c:533 utils/adt/pg_locale.c:697 utils/fmgr/dfmgr.c:229 #: utils/hash/dynahash.c:517 utils/hash/dynahash.c:617 #: utils/hash/dynahash.c:1100 utils/mb/mbutils.c:410 utils/mb/mbutils.c:438 @@ -327,7 +327,7 @@ msgstr "не удалось синхронизировать с ФС файл \"%s\": %m" #: ../common/file_utils.c:120 ../common/file_utils.c:566 -#: ../common/file_utils.c:570 access/transam/twophase.c:1321 +#: ../common/file_utils.c:570 access/transam/twophase.c:1322 #: access/transam/xlogarchive.c:111 access/transam/xlogarchive.c:235 #: backup/basebackup.c:355 backup/basebackup.c:553 backup/basebackup.c:624 #: backup/walsummary.c:247 commands/copyfrom.c:1749 commands/copyto.c:700 @@ -348,7 +348,7 @@ #: ../common/file_utils.c:151 ../common/file_utils.c:281 #: ../common/pgfnames.c:48 ../common/rmtree.c:63 commands/tablespace.c:728 -#: commands/tablespace.c:738 postmaster/postmaster.c:1472 +#: commands/tablespace.c:738 postmaster/postmaster.c:1473 #: storage/file/fd.c:2933 storage/file/reinit.c:126 utils/adt/misc.c:256 #: utils/misc/tzparser.c:339 #, c-format @@ -374,92 +374,92 @@ msgid "internal error" msgstr "внутренняя ошибка" -#: ../common/jsonapi.c:2124 +#: ../common/jsonapi.c:2175 msgid "Recursive descent parser cannot use incremental lexer." msgstr "" "Инкрементальный лексический анализатор не подходит для нисходящего " "рекурсивного разбора." -#: ../common/jsonapi.c:2126 +#: ../common/jsonapi.c:2177 msgid "Incremental parser requires incremental lexer." msgstr "" "Для инкрементального разбора требуется инкрементальный лексический " "анализатор." -#: ../common/jsonapi.c:2128 +#: ../common/jsonapi.c:2179 msgid "JSON nested too deep, maximum permitted depth is 6400." msgstr "" "Слишком большая вложенность JSON, максимальная допустимая глубина: 6400." -#: ../common/jsonapi.c:2130 +#: ../common/jsonapi.c:2181 #, c-format msgid "Escape sequence \"\\%.*s\" is invalid." msgstr "Неверная спецпоследовательность: \"\\%.*s\"." -#: ../common/jsonapi.c:2134 +#: ../common/jsonapi.c:2185 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Символ с кодом 0x%02x необходимо экранировать." -#: ../common/jsonapi.c:2138 +#: ../common/jsonapi.c:2189 #, c-format msgid "Expected end of input, but found \"%.*s\"." msgstr "Ожидался конец текста, но обнаружено продолжение \"%.*s\"." -#: ../common/jsonapi.c:2141 +#: ../common/jsonapi.c:2192 #, c-format msgid "Expected array element or \"]\", but found \"%.*s\"." msgstr "Ожидался элемент массива или \"]\", но обнаружено \"%.*s\"." -#: ../common/jsonapi.c:2144 +#: ../common/jsonapi.c:2195 #, c-format msgid "Expected \",\" or \"]\", but found \"%.*s\"." msgstr "Ожидалась \",\" или \"]\", но обнаружено \"%.*s\"." -#: ../common/jsonapi.c:2147 +#: ../common/jsonapi.c:2198 #, c-format msgid "Expected \":\", but found \"%.*s\"." msgstr "Ожидалось \":\", но обнаружено \"%.*s\"." -#: ../common/jsonapi.c:2150 +#: ../common/jsonapi.c:2201 #, c-format msgid "Expected JSON value, but found \"%.*s\"." msgstr "Ожидалось значение JSON, но обнаружено \"%.*s\"." -#: ../common/jsonapi.c:2153 +#: ../common/jsonapi.c:2204 msgid "The input string ended unexpectedly." msgstr "Неожиданный конец входной строки." -#: ../common/jsonapi.c:2155 +#: ../common/jsonapi.c:2206 #, c-format msgid "Expected string or \"}\", but found \"%.*s\"." msgstr "Ожидалась строка или \"}\", но обнаружено \"%.*s\"." -#: ../common/jsonapi.c:2158 +#: ../common/jsonapi.c:2209 #, c-format msgid "Expected \",\" or \"}\", but found \"%.*s\"." msgstr "Ожидалась \",\" или \"}\", но обнаружено \"%.*s\"." -#: ../common/jsonapi.c:2161 +#: ../common/jsonapi.c:2212 #, c-format msgid "Expected string, but found \"%.*s\"." msgstr "Ожидалась строка, но обнаружено \"%.*s\"." -#: ../common/jsonapi.c:2164 +#: ../common/jsonapi.c:2215 #, c-format msgid "Token \"%.*s\" is invalid." msgstr "Ошибочный элемент \"%.*s\"." -#: ../common/jsonapi.c:2167 jsonpath_scan.l:608 +#: ../common/jsonapi.c:2218 jsonpath_scan.l:608 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 нельзя преобразовать в текст." -#: ../common/jsonapi.c:2169 +#: ../common/jsonapi.c:2220 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "За \"\\u\" должны следовать четыре шестнадцатеричные цифры." -#: ../common/jsonapi.c:2172 +#: ../common/jsonapi.c:2223 msgid "" "Unicode escape values cannot be used for code point values above 007F when " "the encoding is not UTF8." @@ -467,19 +467,19 @@ "Спецкоды Unicode для значений выше 007F можно использовать только с " "кодировкой UTF8." -#: ../common/jsonapi.c:2181 +#: ../common/jsonapi.c:2232 #, c-format msgid "" "Unicode escape value could not be translated to the server's encoding %s." msgstr "Спецкод Unicode нельзя преобразовать в серверную кодировку %s." -#: ../common/jsonapi.c:2188 jsonpath_scan.l:641 +#: ../common/jsonapi.c:2239 jsonpath_scan.l:641 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "" "Старшее слово суррогата Unicode не может следовать за другим старшим словом." -#: ../common/jsonapi.c:2190 jsonpath_scan.l:652 jsonpath_scan.l:662 +#: ../common/jsonapi.c:2241 jsonpath_scan.l:652 jsonpath_scan.l:662 #: jsonpath_scan.l:713 #, c-format msgid "Unicode low surrogate must follow a high surrogate." @@ -728,9 +728,9 @@ msgstr "не удалось получить код выхода от подпроцесса (код ошибки: %lu)" #: ../common/rmtree.c:97 access/heap/rewriteheap.c:1214 -#: access/transam/twophase.c:1717 access/transam/xlogarchive.c:119 +#: access/transam/twophase.c:1718 access/transam/xlogarchive.c:119 #: access/transam/xlogarchive.c:399 backup/walsummary.c:254 -#: postmaster/postmaster.c:1050 postmaster/syslogger.c:1488 +#: postmaster/postmaster.c:1051 postmaster/syslogger.c:1488 #: replication/logical/origin.c:591 replication/logical/reorderbuffer.c:4719 #: replication/logical/snapbuild.c:1759 replication/logical/snapbuild.c:2193 #: replication/slot.c:2237 storage/file/fd.c:878 storage/file/fd.c:3378 @@ -956,7 +956,7 @@ msgstr "не удалось открыть родительскую таблицу индекса \"%s\"" #: access/brin/brin.c:1463 access/brin/brin.c:1559 access/gin/ginfast.c:1085 -#: parser/parse_utilcmd.c:2277 +#: parser/parse_utilcmd.c:2281 #, c-format msgid "index \"%s\" is not valid" msgstr "индекс \"%s\" - нерабочий" @@ -1123,7 +1123,7 @@ msgstr "строка индекса требует байт: %zu, при максимуме: %zu" #: access/common/printtup.c:292 commands/explain.c:5376 tcop/fastpath.c:107 -#: tcop/fastpath.c:454 tcop/postgres.c:1956 +#: tcop/fastpath.c:454 tcop/postgres.c:1957 #, c-format msgid "unsupported format code: %d" msgstr "неподдерживаемый код формата: %d" @@ -1379,11 +1379,11 @@ "не удалось определить, какое правило сортировки использовать для хеширования " "строк" -#: access/hash/hashfunc.c:281 access/hash/hashfunc.c:337 catalog/heap.c:673 -#: catalog/heap.c:679 commands/createas.c:201 commands/createas.c:508 +#: access/hash/hashfunc.c:281 access/hash/hashfunc.c:337 catalog/heap.c:687 +#: catalog/heap.c:693 commands/createas.c:201 commands/createas.c:508 #: commands/indexcmds.c:2021 commands/tablecmds.c:18252 commands/view.c:81 -#: regex/regc_pg_locale.c:245 utils/adt/formatting.c:1653 -#: utils/adt/formatting.c:1801 utils/adt/formatting.c:1991 utils/adt/like.c:189 +#: regex/regc_pg_locale.c:245 utils/adt/formatting.c:1655 +#: utils/adt/formatting.c:1803 utils/adt/formatting.c:1993 utils/adt/like.c:189 #: utils/adt/like_support.c:1024 utils/adt/varchar.c:738 #: utils/adt/varchar.c:1009 utils/adt/varchar.c:1066 utils/adt/varlena.c:1566 #, c-format @@ -1508,8 +1508,8 @@ #: access/transam/xlog.c:4264 access/transam/xlog.c:9335 #: access/transam/xlogfuncs.c:692 backup/basebackup_server.c:149 #: backup/basebackup_server.c:242 commands/dbcommands.c:494 -#: postmaster/launch_backend.c:340 postmaster/postmaster.c:4116 -#: postmaster/walsummarizer.c:1212 replication/logical/origin.c:603 +#: postmaster/launch_backend.c:340 postmaster/postmaster.c:4102 +#: postmaster/walsummarizer.c:1213 replication/logical/origin.c:603 #: replication/slot.c:2097 storage/file/copydir.c:157 storage/smgr/md.c:230 #: utils/time/snapmgr.c:1234 #, c-format @@ -1857,7 +1857,7 @@ msgstr "Возможно, это вызвано переменной природой индексного выражения." #: access/nbtree/nbtpage.c:157 access/nbtree/nbtpage.c:611 -#: parser/parse_utilcmd.c:2323 +#: parser/parse_utilcmd.c:2327 #, c-format msgid "index \"%s\" is not a btree" msgstr "индекс \"%s\" не является b-деревом" @@ -2007,7 +2007,7 @@ msgid "Make sure the configuration parameter \"%s\" is set." msgstr "Убедитесь, что в конфигурации установлен параметр \"%s\"." -#: access/transam/multixact.c:1173 +#: access/transam/multixact.c:1260 #, c-format msgid "" "database is not accepting commands that assign new MultiXactIds to avoid " @@ -2016,8 +2016,8 @@ "база данных не принимает команды, назначающие новые MultiXactId, во " "избежание потери данных из-за зацикливания в базе данных \"%s\"" -#: access/transam/multixact.c:1175 access/transam/multixact.c:1182 -#: access/transam/multixact.c:1206 access/transam/multixact.c:1215 +#: access/transam/multixact.c:1262 access/transam/multixact.c:1269 +#: access/transam/multixact.c:1293 access/transam/multixact.c:1302 #: access/transam/varsup.c:158 access/transam/varsup.c:165 #, c-format msgid "" @@ -2029,7 +2029,7 @@ "Возможно, вам также придётся зафиксировать или откатить старые " "подготовленные транзакции и удалить неиспользуемые слоты репликации." -#: access/transam/multixact.c:1180 +#: access/transam/multixact.c:1267 #, c-format msgid "" "database is not accepting commands that assign new MultiXactIds to avoid " @@ -2038,7 +2038,7 @@ "база данных не принимает команды, назначающие новые MultiXactId, во " "избежание потери данных из-за зацикливания в базе данных с OID %u" -#: access/transam/multixact.c:1201 access/transam/multixact.c:2546 +#: access/transam/multixact.c:1288 access/transam/multixact.c:2644 #, c-format msgid "database \"%s\" must be vacuumed before %u more MultiXactId is used" msgid_plural "" @@ -2053,7 +2053,7 @@ "база данных \"%s\" должна быть очищена, прежде чем будут использованы " "оставшиеся MultiXactId (%u)" -#: access/transam/multixact.c:1210 access/transam/multixact.c:2555 +#: access/transam/multixact.c:1297 access/transam/multixact.c:2653 #, c-format msgid "" "database with OID %u must be vacuumed before %u more MultiXactId is used" @@ -2069,12 +2069,12 @@ "база данных с OID %u должна быть очищена, прежде чем будут использованы " "оставшиеся MultiXactId (%u)" -#: access/transam/multixact.c:1274 +#: access/transam/multixact.c:1361 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "слишком много членов мультитранзакции" -#: access/transam/multixact.c:1275 +#: access/transam/multixact.c:1362 #, c-format msgid "" "This command would create a multixact with %u members, but the remaining " @@ -2092,7 +2092,7 @@ "Мультитранзакция, создаваемая этой командой, должна включать членов: %u, но " "оставшегося места хватает только для %u." -#: access/transam/multixact.c:1280 +#: access/transam/multixact.c:1367 #, c-format msgid "" "Execute a database-wide VACUUM in database with OID %u with reduced " @@ -2102,7 +2102,7 @@ "Выполните очистку (VACUUM) всей базы данных с OID %u, уменьшив значения " "\"vacuum_multixact_freeze_min_age\" и \"vacuum_multixact_freeze_table_age\"." -#: access/transam/multixact.c:1311 +#: access/transam/multixact.c:1398 #, c-format msgid "" "database with OID %u must be vacuumed before %d more multixact member is used" @@ -2119,7 +2119,7 @@ "база данных с OID %u должна быть очищена, пока не использованы оставшиеся " "члены мультитранзакций (%d)" -#: access/transam/multixact.c:1316 +#: access/transam/multixact.c:1403 #, c-format msgid "" "Execute a database-wide VACUUM in that database with reduced " @@ -2129,22 +2129,22 @@ "Выполните очистку (VACUUM) всей этой базы данных, уменьшив значения " "\"vacuum_multixact_freeze_min_age\" и \"vacuum_multixact_freeze_table_age\"." -#: access/transam/multixact.c:1455 +#: access/transam/multixact.c:1542 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "MultiXactId %u прекратил существование: видимо, произошло зацикливание" -#: access/transam/multixact.c:1461 +#: access/transam/multixact.c:1548 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "MultiXactId %u ещё не был создан: видимо, произошло зацикливание" -#: access/transam/multixact.c:1554 +#: access/transam/multixact.c:1641 #, c-format msgid "MultiXact %u has invalid next offset" msgstr "для мультитранзакции %u получено некорректное следующее смещение" -#: access/transam/multixact.c:2551 access/transam/multixact.c:2560 +#: access/transam/multixact.c:2649 access/transam/multixact.c:2658 #, c-format msgid "" "To avoid MultiXactId assignment failures, execute a database-wide VACUUM in " @@ -2157,7 +2157,7 @@ "Возможно, вам также придётся зафиксировать или откатить старые " "подготовленные транзакции и удалить неиспользуемые слоты репликации." -#: access/transam/multixact.c:2839 +#: access/transam/multixact.c:2941 #, c-format msgid "" "MultiXact member wraparound protections are disabled because oldest " @@ -2166,12 +2166,12 @@ "Защита от зацикливания членов мультитранзакций отключена, так как старейшая " "отмеченная мультитранзакция %u не найдена на диске" -#: access/transam/multixact.c:2861 +#: access/transam/multixact.c:2963 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "Защита от зацикливания мультитранзакций сейчас включена" -#: access/transam/multixact.c:3252 +#: access/transam/multixact.c:3354 #, c-format msgid "" "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" @@ -2179,7 +2179,7 @@ "старейшая мультитранзакция %u не найдена, новейшая мультитранзакция: %u, " "усечение пропускается" -#: access/transam/multixact.c:3270 +#: access/transam/multixact.c:3372 #, c-format msgid "" "cannot truncate up to MultiXact %u because it does not exist on disk, " @@ -2188,7 +2188,7 @@ "выполнить усечение до мультитранзакции %u нельзя ввиду её отсутствия на " "диске, усечение пропускается" -#: access/transam/multixact.c:3287 +#: access/transam/multixact.c:3389 #, c-format msgid "" "cannot truncate up to MultiXact %u because it has invalid offset, skipping " @@ -2197,7 +2197,7 @@ "выполнить усечение до мультитранзакции %u нельзя из-за некорректного " "смещения, усечение пропускается" -#: access/transam/multixact.c:3622 +#: access/transam/multixact.c:3726 #, c-format msgid "invalid MultiXactId: %u" msgstr "неверный MultiXactId: %u" @@ -2226,12 +2226,12 @@ msgid "parallel worker" msgstr "параллельный исполнитель" -#: access/transam/parallel.c:1351 replication/logical/applyparallelworker.c:897 +#: access/transam/parallel.c:1351 replication/logical/applyparallelworker.c:906 #, c-format msgid "could not map dynamic shared memory segment" msgstr "не удалось отобразить динамический сегмент разделяемой памяти" -#: access/transam/parallel.c:1356 replication/logical/applyparallelworker.c:903 +#: access/transam/parallel.c:1356 replication/logical/applyparallelworker.c:912 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "неверное магическое число в динамическом сегменте разделяемой памяти" @@ -2428,12 +2428,12 @@ msgid "transaction identifier \"%s\" is already in use" msgstr "идентификатор транзакции \"%s\" уже используется" -#: access/transam/twophase.c:404 access/transam/twophase.c:2531 +#: access/transam/twophase.c:404 access/transam/twophase.c:2532 #, c-format msgid "maximum number of prepared transactions reached" msgstr "достигнут предел числа подготовленных транзакций" -#: access/transam/twophase.c:405 access/transam/twophase.c:2532 +#: access/transam/twophase.c:405 access/transam/twophase.c:2533 #, c-format msgid "Increase \"max_prepared_transactions\" (currently %d)." msgstr "" @@ -2475,12 +2475,12 @@ msgid "prepared transaction with identifier \"%s\" does not exist" msgstr "подготовленной транзакции с идентификатором \"%s\" нет" -#: access/transam/twophase.c:1174 +#: access/transam/twophase.c:1175 #, c-format msgid "two-phase state file maximum length exceeded" msgstr "превышен предельный размер файла состояния 2PC" -#: access/transam/twophase.c:1329 +#: access/transam/twophase.c:1330 #, c-format msgid "incorrect size of file \"%s\": %lld byte" msgid_plural "incorrect size of file \"%s\": %lld bytes" @@ -2488,63 +2488,63 @@ msgstr[1] "некорректный размер файла \"%s\": %lld Б" msgstr[2] "некорректный размер файла \"%s\": %lld Б" -#: access/transam/twophase.c:1338 +#: access/transam/twophase.c:1339 #, c-format msgid "incorrect alignment of CRC offset for file \"%s\"" msgstr "некорректное выравнивание смещения CRC для файла \"%s\"" -#: access/transam/twophase.c:1356 +#: access/transam/twophase.c:1357 #, c-format msgid "could not read file \"%s\": read %d of %lld" msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %d из %lld)" -#: access/transam/twophase.c:1371 +#: access/transam/twophase.c:1372 #, c-format msgid "invalid magic number stored in file \"%s\"" msgstr "в файле \"%s\" содержится неверная сигнатура" -#: access/transam/twophase.c:1377 +#: access/transam/twophase.c:1378 #, c-format msgid "invalid size stored in file \"%s\"" msgstr "в файле \"%s\" содержится неверный размер" -#: access/transam/twophase.c:1389 +#: access/transam/twophase.c:1390 #, c-format msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "" "вычисленная контрольная сумма (CRC) не соответствует значению, сохранённому " "в файле \"%s\"" -#: access/transam/twophase.c:1419 access/transam/xlogrecovery.c:565 -#: postmaster/walsummarizer.c:936 replication/logical/logical.c:213 +#: access/transam/twophase.c:1420 access/transam/xlogrecovery.c:565 +#: postmaster/walsummarizer.c:937 replication/logical/logical.c:213 #: replication/walsender.c:854 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Не удалось разместить обработчик журнала транзакций." -#: access/transam/twophase.c:1429 +#: access/transam/twophase.c:1430 #, c-format msgid "could not read two-phase state from WAL at %X/%X: %s" msgstr "не удалось прочитать состояние 2PC из WAL в позиции %X/%X: %s" -#: access/transam/twophase.c:1434 +#: access/transam/twophase.c:1435 #, c-format msgid "could not read two-phase state from WAL at %X/%X" msgstr "не удалось прочитать состояние 2PC из WAL в позиции %X/%X" -#: access/transam/twophase.c:1442 +#: access/transam/twophase.c:1443 #, c-format msgid "expected two-phase state data is not present in WAL at %X/%X" msgstr "" "ожидаемые данные состояния двухфазной фиксации отсутствуют в WAL в позиции " "%X/%X" -#: access/transam/twophase.c:1745 +#: access/transam/twophase.c:1746 #, c-format msgid "could not recreate file \"%s\": %m" msgstr "пересоздать файл \"%s\" не удалось: %m" -#: access/transam/twophase.c:1872 +#: access/transam/twophase.c:1873 #, c-format msgid "" "%u two-phase state file was written for a long-running prepared transaction" @@ -2557,47 +2557,47 @@ msgstr[2] "" "для длительных подготовленных транзакций записано файлов состояния 2PC: %u" -#: access/transam/twophase.c:2107 +#: access/transam/twophase.c:2108 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "восстановление подготовленной транзакции %u из разделяемой памяти" -#: access/transam/twophase.c:2200 +#: access/transam/twophase.c:2201 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "удаление устаревшего файла состояния 2PC для транзакции %u" -#: access/transam/twophase.c:2207 +#: access/transam/twophase.c:2208 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "удаление из памяти устаревшего состояния 2PC для транзакции %u" -#: access/transam/twophase.c:2220 +#: access/transam/twophase.c:2221 #, c-format msgid "removing future two-phase state file for transaction %u" msgstr "удаление файла будущего состояния 2PC для транзакции %u" -#: access/transam/twophase.c:2227 +#: access/transam/twophase.c:2228 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "удаление из памяти будущего состояния 2PC для транзакции %u" -#: access/transam/twophase.c:2252 +#: access/transam/twophase.c:2253 #, c-format msgid "corrupted two-phase state file for transaction %u" msgstr "испорчен файл состояния 2PC для транзакции %u" -#: access/transam/twophase.c:2257 +#: access/transam/twophase.c:2258 #, c-format msgid "corrupted two-phase state in memory for transaction %u" msgstr "испорчено состояние 2PC в памяти для транзакции %u" -#: access/transam/twophase.c:2514 +#: access/transam/twophase.c:2515 #, c-format msgid "could not recover two-phase state file for transaction %u" msgstr "не удалось восстановить файл состояния 2PC для транзакции %u" -#: access/transam/twophase.c:2516 +#: access/transam/twophase.c:2517 #, c-format msgid "" "Two-phase state file has been found in WAL record %X/%X, but this " @@ -2606,7 +2606,7 @@ "Для WAL-записи %X/%X найден файл состояния двухфазной фиксации, но эта " "транзакция уже была восстановлена с диска." -#: access/transam/twophase.c:2524 storage/file/fd.c:514 utils/fmgr/dfmgr.c:209 +#: access/transam/twophase.c:2525 storage/file/fd.c:514 utils/fmgr/dfmgr.c:209 #, c-format msgid "could not access file \"%s\": %m" msgstr "ошибка при обращении к файлу \"%s\": %m" @@ -2824,7 +2824,7 @@ "не удалось записать в файл журнала \"%s\" (смещение: %u, длина: %zu): %m" #: access/transam/xlog.c:3720 access/transam/xlogutils.c:831 -#: replication/walsender.c:3093 +#: replication/walsender.c:3102 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "запрошенный сегмент WAL %s уже удалён" @@ -3043,13 +3043,13 @@ #: access/transam/xlog.c:4643 catalog/namespace.c:4699 #: commands/tablespace.c:1210 commands/user.c:2529 commands/variable.c:72 -#: replication/slot.c:2487 tcop/postgres.c:3715 utils/error/elog.c:2247 +#: replication/slot.c:2487 tcop/postgres.c:3719 utils/error/elog.c:2247 #, c-format msgid "List syntax is invalid." msgstr "Ошибка синтаксиса в списке." #: access/transam/xlog.c:4689 commands/user.c:2545 commands/variable.c:173 -#: tcop/postgres.c:3731 utils/error/elog.c:2273 +#: tcop/postgres.c:3735 utils/error/elog.c:2273 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "нераспознанное ключевое слово: \"%s\"." @@ -4316,9 +4316,9 @@ #: catalog/dependency.c:1153 catalog/dependency.c:1160 #: catalog/dependency.c:1171 commands/tablecmds.c:1459 #: commands/tablecmds.c:15152 commands/tablespace.c:460 commands/user.c:1302 -#: commands/vacuum.c:213 commands/view.c:441 executor/execExprInterp.c:4655 -#: executor/execExprInterp.c:4663 libpq/auth.c:332 -#: replication/logical/applyparallelworker.c:1048 replication/slot.c:261 +#: commands/vacuum.c:213 commands/view.c:441 executor/execExprInterp.c:4726 +#: executor/execExprInterp.c:4734 libpq/auth.c:332 +#: replication/logical/applyparallelworker.c:1057 replication/slot.c:261 #: replication/slot.c:2502 replication/slot.c:2504 replication/syncrep.c:1078 #: storage/lmgr/deadlock.c:1134 storage/lmgr/proc.c:1432 utils/misc/guc.c:3169 #: utils/misc/guc.c:3210 utils/misc/guc.c:3285 utils/misc/guc.c:6836 @@ -4388,7 +4388,7 @@ msgid "archive command was terminated by exception 0x%X" msgstr "команда архивации была прервана исключением 0x%X" -#: archive/shell_archive.c:109 postmaster/postmaster.c:3097 +#: archive/shell_archive.c:109 postmaster/postmaster.c:3083 #, c-format msgid "" "See C include file \"ntstatus.h\" for a description of the hexadecimal value." @@ -4781,18 +4781,18 @@ msgid "invalid timeline %lld" msgstr "неверная линия времени %lld" -#: bootstrap/bootstrap.c:239 postmaster/postmaster.c:623 tcop/postgres.c:3946 +#: bootstrap/bootstrap.c:239 postmaster/postmaster.c:624 tcop/postgres.c:3950 #, c-format msgid "--%s requires a value" msgstr "для --%s требуется значение" -#: bootstrap/bootstrap.c:244 postmaster/postmaster.c:628 tcop/postgres.c:3951 +#: bootstrap/bootstrap.c:244 postmaster/postmaster.c:629 tcop/postgres.c:3955 #, c-format msgid "-c %s requires a value" msgstr "для -c %s требуется значение" -#: bootstrap/bootstrap.c:282 postmaster/postmaster.c:746 -#: postmaster/postmaster.c:759 +#: bootstrap/bootstrap.c:282 postmaster/postmaster.c:747 +#: postmaster/postmaster.c:760 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" @@ -4956,7 +4956,7 @@ msgstr "предложение IN SCHEMA нельзя использовать в GRANT/REVOKE ON SCHEMAS" #: catalog/aclchk.c:1617 catalog/catalog.c:659 catalog/objectaddress.c:1523 -#: catalog/pg_publication.c:528 commands/analyze.c:380 commands/copy.c:988 +#: catalog/pg_publication.c:528 commands/analyze.c:380 commands/copy.c:989 #: commands/sequence.c:1655 commands/tablecmds.c:7574 commands/tablecmds.c:7728 #: commands/tablecmds.c:7778 commands/tablecmds.c:7852 #: commands/tablecmds.c:7922 commands/tablecmds.c:8052 @@ -4968,8 +4968,8 @@ #: commands/tablecmds.c:13030 commands/tablecmds.c:13191 #: commands/tablecmds.c:14403 commands/tablecmds.c:17030 commands/trigger.c:943 #: parser/analyze.c:2530 parser/parse_relation.c:737 parser/parse_target.c:1067 -#: parser/parse_type.c:144 parser/parse_utilcmd.c:3409 -#: parser/parse_utilcmd.c:3449 parser/parse_utilcmd.c:3491 utils/adt/acl.c:2940 +#: parser/parse_type.c:144 parser/parse_utilcmd.c:3413 +#: parser/parse_utilcmd.c:3453 parser/parse_utilcmd.c:3495 utils/adt/acl.c:2940 #: utils/adt/ruleutils.c:2812 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" @@ -5469,7 +5469,7 @@ msgid "pg_nextoid() can only be used on system catalogs" msgstr "pg_nextoid() можно использовать только для системных каталогов" -#: catalog/catalog.c:651 parser/parse_utilcmd.c:2270 +#: catalog/catalog.c:651 parser/parse_utilcmd.c:2274 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "индекс \"%s\" не принадлежит таблице \"%s\"" @@ -5589,23 +5589,23 @@ msgstr "имя столбца \"%s\" указано неоднократно" #. translator: first %s is an integer not a name -#: catalog/heap.c:580 +#: catalog/heap.c:584 #, c-format msgid "partition key column %s has pseudo-type %s" msgstr "столбец \"%s\" ключа разбиения имеет псевдотип %s" -#: catalog/heap.c:585 +#: catalog/heap.c:589 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "столбец \"%s\" имеет псевдотип %s" -#: catalog/heap.c:616 +#: catalog/heap.c:620 #, c-format msgid "composite type %s cannot be made a member of itself" msgstr "составной тип %s не может содержать себя же" #. translator: first %s is an integer not a name -#: catalog/heap.c:671 +#: catalog/heap.c:685 #, c-format msgid "" "no collation was derived for partition key column %s with collatable type %s" @@ -5613,20 +5613,20 @@ "для входящего в ключ разбиения столбца \"%s\" с сортируемым типом %s не " "удалось получить правило сортировки" -#: catalog/heap.c:677 commands/createas.c:198 commands/createas.c:505 +#: catalog/heap.c:691 commands/createas.c:198 commands/createas.c:505 #, c-format msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "" "для столбца \"%s\" с сортируемым типом %s не удалось получить правило " "сортировки" -#: catalog/heap.c:1162 catalog/index.c:899 commands/createas.c:401 +#: catalog/heap.c:1176 catalog/index.c:899 commands/createas.c:401 #: commands/tablecmds.c:4171 #, c-format msgid "relation \"%s\" already exists" msgstr "отношение \"%s\" уже существует" -#: catalog/heap.c:1178 catalog/pg_type.c:434 catalog/pg_type.c:805 +#: catalog/heap.c:1192 catalog/pg_type.c:434 catalog/pg_type.c:805 #: catalog/pg_type.c:977 commands/typecmds.c:253 commands/typecmds.c:265 #: commands/typecmds.c:758 commands/typecmds.c:1179 commands/typecmds.c:1405 #: commands/typecmds.c:1585 commands/typecmds.c:2556 @@ -5634,7 +5634,7 @@ msgid "type \"%s\" already exists" msgstr "тип \"%s\" уже существует" -#: catalog/heap.c:1179 +#: catalog/heap.c:1193 #, c-format msgid "" "A relation has an associated type of the same name, so you must use a name " @@ -5643,54 +5643,54 @@ "С отношением уже связан тип с таким же именем; выберите имя, не " "конфликтующее с существующими типами." -#: catalog/heap.c:1219 +#: catalog/heap.c:1233 #, c-format msgid "toast relfilenumber value not set when in binary upgrade mode" msgstr "" "значение relfilenumber для TOAST не задано в режиме двоичного обновления" -#: catalog/heap.c:1230 +#: catalog/heap.c:1244 #, c-format msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "значение OID кучи в pg_class не задано в режиме двоичного обновления" -#: catalog/heap.c:1240 +#: catalog/heap.c:1254 #, c-format msgid "relfilenumber value not set when in binary upgrade mode" msgstr "значение relfilenumber не задано в режиме двоичного обновления" -#: catalog/heap.c:2185 +#: catalog/heap.c:2199 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "" "добавить ограничение NO INHERIT к секционированной таблице \"%s\" нельзя" -#: catalog/heap.c:2452 +#: catalog/heap.c:2466 #, c-format msgid "check constraint \"%s\" already exists" msgstr "ограничение-проверка \"%s\" уже существует" -#: catalog/heap.c:2624 catalog/index.c:913 catalog/pg_constraint.c:725 +#: catalog/heap.c:2638 catalog/index.c:913 catalog/pg_constraint.c:725 #: commands/tablecmds.c:9389 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "ограничение \"%s\" для отношения \"%s\" уже существует" -#: catalog/heap.c:2631 +#: catalog/heap.c:2645 #, c-format msgid "" "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "" "ограничение \"%s\" конфликтует с ненаследуемым ограничением таблицы \"%s\"" -#: catalog/heap.c:2642 +#: catalog/heap.c:2656 #, c-format msgid "" "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "" "ограничение \"%s\" конфликтует с наследуемым ограничением таблицы \"%s\"" -#: catalog/heap.c:2652 +#: catalog/heap.c:2666 #, c-format msgid "" "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" @@ -5698,71 +5698,71 @@ "ограничение \"%s\" конфликтует с непроверенным (NOT VALID) ограничением " "таблицы \"%s\"" -#: catalog/heap.c:2657 +#: catalog/heap.c:2671 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "слияние ограничения \"%s\" с унаследованным определением" -#: catalog/heap.c:2683 catalog/pg_constraint.c:854 commands/tablecmds.c:3074 +#: catalog/heap.c:2697 catalog/pg_constraint.c:854 commands/tablecmds.c:3074 #: commands/tablecmds.c:3377 commands/tablecmds.c:7089 #: commands/tablecmds.c:15971 commands/tablecmds.c:16102 #, c-format msgid "too many inheritance parents" msgstr "слишком много родителей в иерархии наследования" -#: catalog/heap.c:2767 +#: catalog/heap.c:2781 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "" "использовать генерируемый столбец \"%s\" в выражении генерируемого столбца " "нельзя" -#: catalog/heap.c:2769 +#: catalog/heap.c:2783 #, c-format msgid "A generated column cannot reference another generated column." msgstr "" "Генерируемый столбец не может ссылаться на другой генерируемый столбец." -#: catalog/heap.c:2775 +#: catalog/heap.c:2789 #, c-format msgid "cannot use whole-row variable in column generation expression" msgstr "" "в выражении генерируемого столбца нельзя использовать переменные «вся строка»" -#: catalog/heap.c:2776 +#: catalog/heap.c:2790 #, c-format msgid "This would cause the generated column to depend on its own value." msgstr "" "Это сделало бы генерируемый столбец зависимым от собственного значения." -#: catalog/heap.c:2831 +#: catalog/heap.c:2845 #, c-format msgid "generation expression is not immutable" msgstr "генерирующее выражение не является постоянным" -#: catalog/heap.c:2859 rewrite/rewriteHandler.c:1279 +#: catalog/heap.c:2873 rewrite/rewriteHandler.c:1313 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "столбец \"%s\" имеет тип %s, но тип выражения по умолчанию %s" -#: catalog/heap.c:2864 commands/prepare.c:331 parser/analyze.c:2758 +#: catalog/heap.c:2878 commands/prepare.c:331 parser/analyze.c:2758 #: parser/parse_target.c:592 parser/parse_target.c:882 -#: parser/parse_target.c:892 rewrite/rewriteHandler.c:1284 +#: parser/parse_target.c:892 rewrite/rewriteHandler.c:1318 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Перепишите выражение или преобразуйте его тип." -#: catalog/heap.c:2911 +#: catalog/heap.c:2925 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "в ограничении-проверке можно ссылаться только на таблицу \"%s\"" -#: catalog/heap.c:3217 +#: catalog/heap.c:3231 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "неподдерживаемое сочетание внешнего ключа с ON COMMIT" -#: catalog/heap.c:3218 +#: catalog/heap.c:3232 #, c-format msgid "" "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT " @@ -5770,23 +5770,23 @@ msgstr "" "Таблица \"%s\" ссылается на \"%s\", и для них задан разный режим ON COMMIT." -#: catalog/heap.c:3223 +#: catalog/heap.c:3237 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "опустошить таблицу, на которую ссылается внешний ключ, нельзя" -#: catalog/heap.c:3224 +#: catalog/heap.c:3238 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "Таблица \"%s\" ссылается на \"%s\"." -#: catalog/heap.c:3226 +#: catalog/heap.c:3240 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "" "Опустошите таблицу \"%s\" параллельно или используйте TRUNCATE ... CASCADE." -#: catalog/index.c:219 parser/parse_utilcmd.c:2176 +#: catalog/index.c:219 parser/parse_utilcmd.c:2180 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "таблица \"%s\" не может иметь несколько первичных ключей" @@ -6089,7 +6089,7 @@ msgstr "сопоставление для пользователя \"%s\" на сервере \"%s\" не существует" #: catalog/objectaddress.c:1834 commands/foreigncmds.c:441 -#: commands/foreigncmds.c:1004 commands/foreigncmds.c:1367 +#: commands/foreigncmds.c:1009 commands/foreigncmds.c:1372 #: foreign/foreign.c:713 #, c-format msgid "server \"%s\" does not exist" @@ -6570,7 +6570,7 @@ msgid "return type of inverse transition function %s is not %s" msgstr "обратная функция перехода %s должна возвращать тип %s" -#: catalog/pg_aggregate.c:352 executor/nodeWindowAgg.c:2991 +#: catalog/pg_aggregate.c:352 executor/nodeWindowAgg.c:3039 #, c-format msgid "" "strictness of aggregate's forward and inverse transition functions must match" @@ -7410,7 +7410,7 @@ msgid "foreign-data wrapper \"%s\" already exists" msgstr "обёртка сторонних данных \"%s\" уже существует" -#: commands/alter.c:89 commands/foreigncmds.c:895 +#: commands/alter.c:89 commands/foreigncmds.c:900 #, c-format msgid "server \"%s\" already exists" msgstr "сервер \"%s\" уже существует" @@ -7952,165 +7952,165 @@ msgstr "" "Выполнять COPY с записью в файл могут только роли с правами роли \"%s\"." -#: commands/copy.c:180 +#: commands/copy.c:181 #, c-format msgid "generated columns are not supported in COPY FROM WHERE conditions" msgstr "генерируемые столбцы не поддерживаются в условиях COPY FROM WHERE" -#: commands/copy.c:181 commands/tablecmds.c:12858 commands/tablecmds.c:18092 +#: commands/copy.c:182 commands/tablecmds.c:12858 commands/tablecmds.c:18092 #: commands/tablecmds.c:18171 commands/trigger.c:657 -#: rewrite/rewriteHandler.c:944 rewrite/rewriteHandler.c:979 +#: rewrite/rewriteHandler.c:978 rewrite/rewriteHandler.c:1013 #, c-format msgid "Column \"%s\" is a generated column." msgstr "Столбец \"%s\" является генерируемым." -#: commands/copy.c:230 +#: commands/copy.c:231 #, c-format msgid "COPY FROM not supported with row-level security" msgstr "COPY FROM не поддерживается с защитой на уровне строк." -#: commands/copy.c:231 +#: commands/copy.c:232 #, c-format msgid "Use INSERT statements instead." msgstr "Используйте операторы INSERT." -#: commands/copy.c:412 +#: commands/copy.c:413 #, c-format msgid "cannot use \"%s\" with HEADER in COPY TO" msgstr "использовать \"%s\" с параметром HEADER в COPY TO нельзя" -#: commands/copy.c:421 +#: commands/copy.c:422 #, c-format msgid "%s requires a Boolean value or \"match\"" msgstr "%s требует логическое значение или \"match\"" #. translator: first %s is the name of a COPY option, e.g. ON_ERROR, #. second %s is a COPY with direction, e.g. COPY TO -#: commands/copy.c:439 commands/copy.c:819 commands/copy.c:835 -#: commands/copy.c:852 commands/copy.c:878 commands/copy.c:888 +#: commands/copy.c:440 commands/copy.c:820 commands/copy.c:836 +#: commands/copy.c:853 commands/copy.c:879 commands/copy.c:889 #, c-format msgid "COPY %s cannot be used with %s" msgstr "COPY %s нельзя использовать с %s" #. translator: first %s is the name of a COPY option, e.g. ON_ERROR -#: commands/copy.c:453 commands/copy.c:478 +#: commands/copy.c:454 commands/copy.c:479 #, c-format msgid "COPY %s \"%s\" not recognized" msgstr "параметр COPY %s \"%s\" не распознан" -#: commands/copy.c:539 +#: commands/copy.c:540 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "формат \"%s\" для COPY не распознан" -#: commands/copy.c:597 commands/copy.c:612 commands/copy.c:627 -#: commands/copy.c:646 +#: commands/copy.c:598 commands/copy.c:613 commands/copy.c:628 +#: commands/copy.c:647 #, c-format msgid "argument to option \"%s\" must be a list of column names" msgstr "аргументом параметра \"%s\" должен быть список имён столбцов" -#: commands/copy.c:658 +#: commands/copy.c:659 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "аргументом параметра \"%s\" должно быть название допустимой кодировки" -#: commands/copy.c:679 commands/dbcommands.c:866 commands/dbcommands.c:2381 +#: commands/copy.c:680 commands/dbcommands.c:866 commands/dbcommands.c:2381 #, c-format msgid "option \"%s\" not recognized" msgstr "параметр \"%s\" не распознан" #. translator: %s is the name of a COPY option, e.g. ON_ERROR -#: commands/copy.c:692 commands/copy.c:697 commands/copy.c:702 -#: commands/copy.c:777 +#: commands/copy.c:693 commands/copy.c:698 commands/copy.c:703 +#: commands/copy.c:778 #, c-format msgid "cannot specify %s in BINARY mode" msgstr "в режиме BINARY нельзя указывать %s" -#: commands/copy.c:707 +#: commands/copy.c:708 #, c-format msgid "only ON_ERROR STOP is allowed in BINARY mode" msgstr "в режиме BINARY допускается только ON_ERROR STOP" -#: commands/copy.c:729 +#: commands/copy.c:730 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "разделитель для COPY должен быть однобайтным символом" -#: commands/copy.c:736 +#: commands/copy.c:737 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "" "разделителем для COPY не может быть символ новой строки или возврата каретки" -#: commands/copy.c:742 +#: commands/copy.c:743 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "" "представление NULL для COPY не может включать символ новой строки или " "возврата каретки" -#: commands/copy.c:752 +#: commands/copy.c:753 #, c-format msgid "COPY default representation cannot use newline or carriage return" msgstr "" "представление DEFAULT для COPY не может включать символ новой строки или " "возврата каретки" -#: commands/copy.c:770 +#: commands/copy.c:771 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "\"%s\" не может быть разделителем для COPY" #. translator: %s is the name of a COPY option, e.g. ON_ERROR -#: commands/copy.c:784 commands/copy.c:801 commands/copy.c:813 -#: commands/copy.c:828 commands/copy.c:844 +#: commands/copy.c:785 commands/copy.c:802 commands/copy.c:814 +#: commands/copy.c:829 commands/copy.c:845 #, c-format msgid "COPY %s requires CSV mode" msgstr "для COPY %s требуется режим CSV" -#: commands/copy.c:789 +#: commands/copy.c:790 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "символ кавычек для COPY должен быть однобайтным" -#: commands/copy.c:794 +#: commands/copy.c:795 #, c-format msgid "COPY delimiter and quote must be different" msgstr "символ кавычек для COPY должен отличаться от разделителя" -#: commands/copy.c:806 +#: commands/copy.c:807 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "спецсимвол для COPY должен быть однобайтным" #. translator: %s is the name of a COPY option, e.g. NULL -#: commands/copy.c:860 commands/copy.c:896 +#: commands/copy.c:861 commands/copy.c:897 #, c-format msgid "COPY delimiter character must not appear in the %s specification" msgstr "символ разделителя для COPY не должен присутствовать в указании %s" #. translator: %s is the name of a COPY option, e.g. NULL -#: commands/copy.c:869 commands/copy.c:905 +#: commands/copy.c:870 commands/copy.c:906 #, c-format msgid "CSV quote character must not appear in the %s specification" msgstr "символ кавычек в CSV не должен присутствовать в указании %s" -#: commands/copy.c:914 +#: commands/copy.c:915 #, c-format msgid "NULL specification and DEFAULT specification cannot be the same" msgstr "представления NULL и DEFAULT не могут быть одинаковыми" -#: commands/copy.c:976 +#: commands/copy.c:977 #, c-format msgid "column \"%s\" is a generated column" msgstr "столбец \"%s\" — генерируемый" -#: commands/copy.c:978 +#: commands/copy.c:979 #, c-format msgid "Generated columns cannot be used in COPY." msgstr "Генерируемые столбцы нельзя использовать в COPY." -#: commands/copy.c:993 commands/indexcmds.c:1890 commands/statscmds.c:260 +#: commands/copy.c:994 commands/indexcmds.c:1890 commands/statscmds.c:260 #: commands/tablecmds.c:2526 commands/tablecmds.c:2997 #: commands/tablecmds.c:3808 parser/parse_relation.c:3692 #: parser/parse_relation.c:3702 parser/parse_relation.c:3720 @@ -8120,7 +8120,7 @@ msgid "column \"%s\" does not exist" msgstr "столбец \"%s\" не существует" -#: commands/copy.c:1000 commands/tablecmds.c:2552 commands/trigger.c:952 +#: commands/copy.c:1001 commands/tablecmds.c:2552 commands/trigger.c:952 #: parser/parse_target.c:1083 parser/parse_target.c:1094 #, c-format msgid "column \"%s\" specified more than once" @@ -8285,7 +8285,7 @@ msgstr "не удалось прочитать файл COPY: %m" #: commands/copyfromparse.c:278 commands/copyfromparse.c:303 -#: replication/walsender.c:774 replication/walsender.c:800 tcop/postgres.c:381 +#: replication/walsender.c:774 replication/walsender.c:800 tcop/postgres.c:382 #, c-format msgid "unexpected EOF on client connection with an open transaction" msgstr "неожиданный обрыв соединения с клиентом при открытой транзакции" @@ -8856,7 +8856,7 @@ msgstr "каталог данных с указанным OID %u уже существует" #: commands/dbcommands.c:1571 commands/dbcommands.c:1586 -#: utils/adt/pg_locale.c:2591 +#: utils/adt/pg_locale.c:2597 #, c-format msgid "encoding \"%s\" does not match locale \"%s\"" msgstr "кодировка \"%s\" не соответствует локали \"%s\"" @@ -9192,7 +9192,7 @@ msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "обёртка сторонних данных \"%s\" не существует, пропускается" -#: commands/dropcmds.c:448 commands/foreigncmds.c:1371 +#: commands/dropcmds.c:448 commands/foreigncmds.c:1376 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "сервер \"%s\" не существует, пропускается" @@ -9288,7 +9288,7 @@ msgid "%s can only be called in a table_rewrite event trigger function" msgstr "%s можно вызывать только в событийной триггерной функции table_rewrite" -#: commands/event_trigger.c:2063 +#: commands/event_trigger.c:2066 #, c-format msgid "%s can only be called in an event trigger function" msgstr "%s можно вызывать только в событийной триггерной функции" @@ -9715,7 +9715,7 @@ "при изменении обработчика в обёртке сторонних данных может измениться " "поведение существующих сторонних таблиц" -#: commands/foreigncmds.c:756 +#: commands/foreigncmds.c:761 #, c-format msgid "" "changing the foreign-data wrapper validator can cause the options for " @@ -9724,46 +9724,46 @@ "при изменении функции проверки в обёртке сторонних данных параметры " "зависимых объектов могут стать неверными" -#: commands/foreigncmds.c:887 +#: commands/foreigncmds.c:892 #, c-format msgid "server \"%s\" already exists, skipping" msgstr "сервер \"%s\" уже существует, пропускается" -#: commands/foreigncmds.c:1155 +#: commands/foreigncmds.c:1160 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\", skipping" msgstr "" "сопоставление пользователя \"%s\" для сервера \"%s\" уже существует, " "пропускается" -#: commands/foreigncmds.c:1165 +#: commands/foreigncmds.c:1170 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\"" msgstr "сопоставление пользователя \"%s\" для сервера \"%s\" уже существует" -#: commands/foreigncmds.c:1265 commands/foreigncmds.c:1385 +#: commands/foreigncmds.c:1270 commands/foreigncmds.c:1390 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\"" msgstr "сопоставление пользователя \"%s\" для сервера \"%s\" не существует" -#: commands/foreigncmds.c:1390 +#: commands/foreigncmds.c:1395 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "" "сопоставление пользователя \"%s\" для сервера \"%s\" не существует, " "пропускается" -#: commands/foreigncmds.c:1518 foreign/foreign.c:404 +#: commands/foreigncmds.c:1523 foreign/foreign.c:404 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "обёртка сторонних данных \"%s\" не имеет обработчика" -#: commands/foreigncmds.c:1524 +#: commands/foreigncmds.c:1529 #, c-format msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" msgstr "обёртка сторонних данных \"%s\" не поддерживает IMPORT FOREIGN SCHEMA" -#: commands/foreigncmds.c:1626 +#: commands/foreigncmds.c:1631 #, c-format msgid "importing foreign table \"%s\"" msgstr "импорт сторонней таблицы \"%s\"" @@ -10288,8 +10288,8 @@ msgid "functions in index predicate must be marked IMMUTABLE" msgstr "функции в предикате индекса должны быть помечены как IMMUTABLE" -#: commands/indexcmds.c:1885 parser/parse_utilcmd.c:2519 -#: parser/parse_utilcmd.c:2654 +#: commands/indexcmds.c:1885 parser/parse_utilcmd.c:2523 +#: parser/parse_utilcmd.c:2658 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "указанный в ключе столбец \"%s\" не существует" @@ -10330,7 +10330,7 @@ msgstr "не удалось определить правило сортировки для индексного выражения" #: commands/indexcmds.c:2028 commands/tablecmds.c:18259 commands/typecmds.c:811 -#: parser/parse_expr.c:2794 parser/parse_type.c:568 parser/parse_utilcmd.c:3771 +#: parser/parse_expr.c:2794 parser/parse_type.c:568 parser/parse_utilcmd.c:3775 #: utils/adt/misc.c:630 #, c-format msgid "collations are not supported by type %s" @@ -10979,8 +10979,8 @@ msgstr "" "для создания дополнительного процедурного языка нужно быть суперпользователем" -#: commands/publicationcmds.c:129 postmaster/postmaster.c:1110 -#: postmaster/postmaster.c:1212 utils/init/miscinit.c:1866 +#: commands/publicationcmds.c:129 postmaster/postmaster.c:1111 +#: postmaster/postmaster.c:1213 utils/init/miscinit.c:1866 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "неверный формат списка в параметре \"%s\"" @@ -11150,7 +11150,7 @@ msgstr "В публикации всех таблиц нельзя добавлять или удалять таблицы." #: commands/publicationcmds.c:1390 commands/publicationcmds.c:1429 -#: commands/publicationcmds.c:1966 utils/cache/lsyscache.c:3634 +#: commands/publicationcmds.c:1966 utils/cache/lsyscache.c:3672 #, c-format msgid "publication \"%s\" does not exist" msgstr "публикация \"%s\" не существует" @@ -11556,7 +11556,7 @@ "подписку, а затем обновить её." #: commands/subscriptioncmds.c:1109 commands/subscriptioncmds.c:1592 -#: commands/subscriptioncmds.c:1975 utils/cache/lsyscache.c:3684 +#: commands/subscriptioncmds.c:1975 utils/cache/lsyscache.c:3722 #, c-format msgid "subscription \"%s\" does not exist" msgstr "подписка \"%s\" не существует" @@ -11824,7 +11824,7 @@ "представления." #: commands/tablecmds.c:279 commands/tablecmds.c:303 commands/tablecmds.c:19891 -#: parser/parse_utilcmd.c:2251 +#: parser/parse_utilcmd.c:2255 #, c-format msgid "index \"%s\" does not exist" msgstr "индекс \"%s\" не существует" @@ -11964,8 +11964,8 @@ msgid "cannot inherit from partition \"%s\"" msgstr "наследование от секции \"%s\" не допускается" -#: commands/tablecmds.c:2619 parser/parse_utilcmd.c:2481 -#: parser/parse_utilcmd.c:2623 +#: commands/tablecmds.c:2619 parser/parse_utilcmd.c:2485 +#: parser/parse_utilcmd.c:2627 #, c-format msgid "inherited relation \"%s\" is not a table or foreign table" msgstr "" @@ -13422,29 +13422,29 @@ msgid "partition \"%s\" was removed concurrently" msgstr "секция \"%s\" была параллельно удалена" -#: commands/tablecmds.c:19925 commands/tablecmds.c:19945 -#: commands/tablecmds.c:19966 commands/tablecmds.c:19985 -#: commands/tablecmds.c:20027 +#: commands/tablecmds.c:19928 commands/tablecmds.c:19948 +#: commands/tablecmds.c:19969 commands/tablecmds.c:19988 +#: commands/tablecmds.c:20038 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "нельзя присоединить индекс \"%s\" в качестве секции индекса \"%s\"" -#: commands/tablecmds.c:19928 +#: commands/tablecmds.c:19931 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "Индекс \"%s\" уже присоединён к другому индексу." -#: commands/tablecmds.c:19948 +#: commands/tablecmds.c:19951 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "Индекс \"%s\" не является индексом какой-либо секции таблицы \"%s\"." -#: commands/tablecmds.c:19969 +#: commands/tablecmds.c:19972 #, c-format msgid "The index definitions do not match." msgstr "Определения индексов не совпадают." -#: commands/tablecmds.c:19988 +#: commands/tablecmds.c:19991 #, c-format msgid "" "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint " @@ -13453,27 +13453,27 @@ "Индекс \"%s\" принадлежит ограничению в таблице \"%s\", но для индекса " "\"%s\" ограничения нет." -#: commands/tablecmds.c:20030 +#: commands/tablecmds.c:20041 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "К секции \"%s\" уже присоединён другой индекс." -#: commands/tablecmds.c:20266 +#: commands/tablecmds.c:20277 #, c-format msgid "column data type %s does not support compression" msgstr "тим данных столбца %s не поддерживает сжатие" -#: commands/tablecmds.c:20273 +#: commands/tablecmds.c:20284 #, c-format msgid "invalid compression method \"%s\"" msgstr "неверный метод сжатия \"%s\"" -#: commands/tablecmds.c:20299 +#: commands/tablecmds.c:20310 #, c-format msgid "invalid storage type \"%s\"" msgstr "неверный тип хранилища \"%s\"" -#: commands/tablecmds.c:20309 +#: commands/tablecmds.c:20320 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "тип данных столбца %s совместим только с хранилищем PLAIN" @@ -13877,7 +13877,7 @@ #: commands/trigger.c:3428 executor/nodeModifyTable.c:1563 #: executor/nodeModifyTable.c:1637 executor/nodeModifyTable.c:2400 #: executor/nodeModifyTable.c:2491 executor/nodeModifyTable.c:3146 -#: executor/nodeModifyTable.c:3338 +#: executor/nodeModifyTable.c:3343 #, c-format msgid "" "Consider using an AFTER trigger instead of a BEFORE trigger to propagate " @@ -13889,7 +13889,7 @@ #: commands/trigger.c:3470 executor/nodeLockRows.c:228 #: executor/nodeLockRows.c:237 executor/nodeModifyTable.c:335 #: executor/nodeModifyTable.c:1579 executor/nodeModifyTable.c:2417 -#: executor/nodeModifyTable.c:2641 +#: executor/nodeModifyTable.c:2641 executor/nodeModifyTable.c:3184 #, c-format msgid "could not serialize access due to concurrent update" msgstr "не удалось сериализовать доступ из-за параллельного изменения" @@ -15204,7 +15204,7 @@ msgstr "" "для курсора \"%s\" не выполняется обновляемое сканирование таблицы \"%s\"" -#: executor/execCurrent.c:280 executor/execExprInterp.c:2555 +#: executor/execCurrent.c:280 executor/execExprInterp.c:2563 #, c-format msgid "" "type of parameter %d (%s) does not match that when preparing the plan (%s)" @@ -15212,14 +15212,14 @@ "тип параметра %d (%s) не соответствует тому, с которым подготавливался план " "(%s)" -#: executor/execCurrent.c:292 executor/execExprInterp.c:2567 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2575 #, c-format msgid "no value found for parameter %d" msgstr "не найдено значение параметра %d" #: executor/execExpr.c:642 executor/execExpr.c:649 executor/execExpr.c:655 -#: executor/execExprInterp.c:4851 executor/execExprInterp.c:4868 -#: executor/execExprInterp.c:4967 executor/nodeModifyTable.c:204 +#: executor/execExprInterp.c:4922 executor/execExprInterp.c:4939 +#: executor/execExprInterp.c:5038 executor/nodeModifyTable.c:204 #: executor/nodeModifyTable.c:223 executor/nodeModifyTable.c:240 #: executor/nodeModifyTable.c:250 executor/nodeModifyTable.c:260 #, c-format @@ -15237,7 +15237,7 @@ msgstr "" "Запрос выдаёт значение для удалённого столбца (с порядковым номером %d)." -#: executor/execExpr.c:656 executor/execExprInterp.c:4869 +#: executor/execExpr.c:656 executor/execExprInterp.c:4940 #: executor/nodeModifyTable.c:251 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." @@ -15288,23 +15288,23 @@ msgid "type %s does not support subscripted assignment" msgstr "тип %s не поддерживает изменение элемента по индексу" -#: executor/execExprInterp.c:2019 +#: executor/execExprInterp.c:2027 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "атрибут %d типа %s был удалён" -#: executor/execExprInterp.c:2025 +#: executor/execExprInterp.c:2033 #, c-format msgid "attribute %d of type %s has wrong type" msgstr "атрибут %d типа %s имеет неправильный тип" -#: executor/execExprInterp.c:2027 executor/execExprInterp.c:3226 -#: executor/execExprInterp.c:3272 +#: executor/execExprInterp.c:2035 executor/execExprInterp.c:3234 +#: executor/execExprInterp.c:3280 #, c-format msgid "Table has type %s, but query expects %s." msgstr "В таблице задан тип %s, а в запросе ожидается %s." -#: executor/execExprInterp.c:2107 utils/adt/expandedrecord.c:99 +#: executor/execExprInterp.c:2115 utils/adt/expandedrecord.c:99 #: utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1752 #: utils/cache/typcache.c:1911 utils/cache/typcache.c:2058 #: utils/fmgr/funcapi.c:569 @@ -15312,17 +15312,17 @@ msgid "type %s is not composite" msgstr "тип %s не является составным" -#: executor/execExprInterp.c:2710 +#: executor/execExprInterp.c:2718 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF для таблиц такого типа не поддерживается" -#: executor/execExprInterp.c:2923 +#: executor/execExprInterp.c:2931 #, c-format msgid "cannot merge incompatible arrays" msgstr "не удалось объединить несовместимые массивы" -#: executor/execExprInterp.c:2924 +#: executor/execExprInterp.c:2932 #, c-format msgid "" "Array with element type %s cannot be included in ARRAY construct with " @@ -15331,7 +15331,7 @@ "Массив с типом элементов %s нельзя включить в конструкцию ARRAY с типом " "элементов %s." -#: executor/execExprInterp.c:2945 utils/adt/arrayfuncs.c:1305 +#: executor/execExprInterp.c:2953 utils/adt/arrayfuncs.c:1305 #: utils/adt/arrayfuncs.c:3503 utils/adt/arrayfuncs.c:5599 #: utils/adt/arrayfuncs.c:6118 utils/adt/arraysubs.c:150 #: utils/adt/arraysubs.c:488 @@ -15339,7 +15339,7 @@ msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "число размерностей массива (%d) превышает предел (%d)" -#: executor/execExprInterp.c:2965 executor/execExprInterp.c:3000 +#: executor/execExprInterp.c:2973 executor/execExprInterp.c:3008 #, c-format msgid "" "multidimensional arrays must have array expressions with matching dimensions" @@ -15347,7 +15347,7 @@ "для многомерных массивов должны задаваться выражения с соответствующими " "размерностями" -#: executor/execExprInterp.c:2977 utils/adt/array_expanded.c:274 +#: executor/execExprInterp.c:2985 utils/adt/array_expanded.c:274 #: utils/adt/arrayfuncs.c:335 utils/adt/arrayfuncs.c:494 #: utils/adt/arrayfuncs.c:727 utils/adt/arrayfuncs.c:1533 #: utils/adt/arrayfuncs.c:2341 utils/adt/arrayfuncs.c:2356 @@ -15362,38 +15362,38 @@ msgid "array size exceeds the maximum allowed (%d)" msgstr "размер массива превышает предел (%d)" -#: executor/execExprInterp.c:3225 executor/execExprInterp.c:3271 +#: executor/execExprInterp.c:3233 executor/execExprInterp.c:3279 #, c-format msgid "attribute %d has wrong type" msgstr "атрибут %d имеет неверный тип" -#: executor/execExprInterp.c:3857 utils/adt/domains.c:158 +#: executor/execExprInterp.c:3928 utils/adt/domains.c:158 #, c-format msgid "domain %s does not allow null values" msgstr "домен %s не допускает значения null" -#: executor/execExprInterp.c:3872 utils/adt/domains.c:196 +#: executor/execExprInterp.c:3943 utils/adt/domains.c:196 #, c-format msgid "value for domain %s violates check constraint \"%s\"" msgstr "значение домена %s нарушает ограничение-проверку \"%s\"" -#: executor/execExprInterp.c:4447 +#: executor/execExprInterp.c:4518 #, c-format msgid "no SQL/JSON item found for specified path of column \"%s\"" msgstr "по заданному для столбца \"%s\" пути не найден элемент SQL/JSON" -#: executor/execExprInterp.c:4452 +#: executor/execExprInterp.c:4523 #, c-format msgid "no SQL/JSON item found for specified path" msgstr "по заданному пути не найден элемент SQL/JSON" #. translator: first %s is a SQL/JSON clause (e.g. ON ERROR) -#: executor/execExprInterp.c:4652 executor/execExprInterp.c:4660 +#: executor/execExprInterp.c:4723 executor/execExprInterp.c:4731 #, c-format msgid "could not coerce %s expression (%s) to the RETURNING type" msgstr "привести выражение %s (%s) к типу RETURNING не удалось" -#: executor/execExprInterp.c:4852 +#: executor/execExprInterp.c:4923 #, c-format msgid "Table row contains %d attribute, but query expects %d." msgid_plural "Table row contains %d attributes, but query expects %d." @@ -15401,7 +15401,7 @@ msgstr[1] "Строка таблицы содержит %d атрибута, а в запросе ожидается %d." msgstr[2] "Строка таблицы содержит %d атрибутов, а в запросе ожидается %d." -#: executor/execExprInterp.c:4968 executor/execSRF.c:977 +#: executor/execExprInterp.c:5039 executor/execSRF.c:977 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "" @@ -15635,8 +15635,8 @@ msgstr "параллельное удаление; следует повторная попытка" #: executor/execReplication.c:352 parser/parse_cte.c:303 -#: parser/parse_oper.c:221 utils/adt/array_userfuncs.c:1334 -#: utils/adt/array_userfuncs.c:1477 utils/adt/arrayfuncs.c:3858 +#: parser/parse_oper.c:221 utils/adt/array_userfuncs.c:1343 +#: utils/adt/array_userfuncs.c:1486 utils/adt/arrayfuncs.c:3858 #: utils/adt/arrayfuncs.c:4413 utils/adt/arrayfuncs.c:6434 #: utils/adt/rowtypes.c:1220 #, c-format @@ -15870,7 +15870,7 @@ msgid "return type %s is not supported for SQL functions" msgstr "для SQL-функций тип возврата %s не поддерживается" -#: executor/nodeAgg.c:3936 executor/nodeWindowAgg.c:2975 +#: executor/nodeAgg.c:3936 executor/nodeWindowAgg.c:3023 #, c-format msgid "aggregate %u needs to have compatible input type and transition type" msgstr "" @@ -15978,7 +15978,7 @@ #. translator: %s is a SQL command name #: executor/nodeModifyTable.c:2619 executor/nodeModifyTable.c:3152 -#: executor/nodeModifyTable.c:3344 +#: executor/nodeModifyTable.c:3349 #, c-format msgid "%s command cannot affect row a second time" msgstr "команда %s не может подействовать на строку дважды" @@ -15992,7 +15992,7 @@ "Проверьте, не содержат ли строки, которые должна добавить команда, " "дублирующиеся значения, подпадающие под ограничения." -#: executor/nodeModifyTable.c:3145 executor/nodeModifyTable.c:3337 +#: executor/nodeModifyTable.c:3145 executor/nodeModifyTable.c:3342 #, c-format msgid "" "tuple to be updated or deleted was already modified by an operation " @@ -16001,14 +16001,14 @@ "кортеж, который должен быть изменён или удалён, уже модифицирован в " "операции, вызванной текущей командой" -#: executor/nodeModifyTable.c:3154 executor/nodeModifyTable.c:3346 +#: executor/nodeModifyTable.c:3154 executor/nodeModifyTable.c:3351 #, c-format msgid "Ensure that not more than one source row matches any one target row." msgstr "" "Проверьте, не может ли какой-либо целевой строке соответствовать более одной " "исходной строки." -#: executor/nodeModifyTable.c:3223 +#: executor/nodeModifyTable.c:3228 #, c-format msgid "" "tuple to be merged was already moved to another partition due to concurrent " @@ -16058,32 +16058,32 @@ msgid "null is not allowed in column \"%s\"" msgstr "в столбце \"%s\" не допускается NULL" -#: executor/nodeWindowAgg.c:356 +#: executor/nodeWindowAgg.c:357 #, c-format msgid "moving-aggregate transition function must not return null" msgstr "функция перехода движимого агрегата не должна возвращать NULL" -#: executor/nodeWindowAgg.c:2083 +#: executor/nodeWindowAgg.c:2131 #, c-format msgid "frame starting offset must not be null" msgstr "смещение начала рамки не может быть NULL" -#: executor/nodeWindowAgg.c:2096 +#: executor/nodeWindowAgg.c:2144 #, c-format msgid "frame starting offset must not be negative" msgstr "смещение начала рамки не может быть отрицательным" -#: executor/nodeWindowAgg.c:2108 +#: executor/nodeWindowAgg.c:2156 #, c-format msgid "frame ending offset must not be null" msgstr "смещение конца рамки не может быть NULL" -#: executor/nodeWindowAgg.c:2121 +#: executor/nodeWindowAgg.c:2169 #, c-format msgid "frame ending offset must not be negative" msgstr "смещение конца рамки не может быть отрицательным" -#: executor/nodeWindowAgg.c:2891 +#: executor/nodeWindowAgg.c:2939 #, c-format msgid "aggregate function %s does not support use as a window function" msgstr "" @@ -17913,7 +17913,7 @@ msgid "could not receive data from client: %m" msgstr "не удалось получить данные от клиента: %m" -#: libpq/pqcomm.c:1149 tcop/postgres.c:4533 +#: libpq/pqcomm.c:1149 tcop/postgres.c:4537 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "закрытие подключения из-за потери синхронизации протокола" @@ -17959,7 +17959,7 @@ msgstr "в сообщении не осталось данных" #: libpq/pqformat.c:515 libpq/pqformat.c:533 libpq/pqformat.c:554 -#: utils/adt/array_userfuncs.c:797 utils/adt/arrayfuncs.c:1481 +#: utils/adt/array_userfuncs.c:798 utils/adt/arrayfuncs.c:1481 #: utils/adt/rowtypes.c:613 #, c-format msgid "insufficient data left in message" @@ -18288,7 +18288,7 @@ msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "методы расширенного узла \"%s\" не зарегистрированы" -#: nodes/makefuncs.c:152 nodes/makefuncs.c:178 statistics/extended_stats.c:2290 +#: nodes/makefuncs.c:152 nodes/makefuncs.c:178 statistics/extended_stats.c:2300 #, c-format msgid "relation \"%s\" does not have a composite type" msgstr "отношение \"%s\" не имеет составного типа" @@ -18321,7 +18321,7 @@ "слиянием или хеш-соединение" #: optimizer/plan/createplan.c:7177 parser/parse_merge.c:203 -#: rewrite/rewriteHandler.c:1683 +#: rewrite/rewriteHandler.c:1717 #, c-format msgid "cannot execute MERGE on relation \"%s\"" msgstr "выполнить MERGE для отношения \"%s\" нельзя" @@ -20733,7 +20733,7 @@ msgid "inconsistent types deduced for parameter $%d" msgstr "для параметра $%d выведены несогласованные типы" -#: parser/parse_param.c:309 tcop/postgres.c:744 +#: parser/parse_param.c:309 tcop/postgres.c:745 #, c-format msgid "could not determine data type of parameter $%d" msgstr "не удалось определить тип данных параметра $%d" @@ -21151,68 +21151,68 @@ msgid "Index \"%s\" contains a whole-row table reference." msgstr "Индекс \"%s\" ссылается на тип всей строки таблицы." -#: parser/parse_utilcmd.c:2242 +#: parser/parse_utilcmd.c:2246 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "в CREATE TABLE нельзя использовать существующий индекс" -#: parser/parse_utilcmd.c:2262 +#: parser/parse_utilcmd.c:2266 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "индекс \"%s\" уже связан с ограничением" -#: parser/parse_utilcmd.c:2283 +#: parser/parse_utilcmd.c:2287 #, c-format msgid "\"%s\" is not a unique index" msgstr "\"%s\" не является уникальным индексом" -#: parser/parse_utilcmd.c:2284 parser/parse_utilcmd.c:2291 -#: parser/parse_utilcmd.c:2298 parser/parse_utilcmd.c:2375 +#: parser/parse_utilcmd.c:2288 parser/parse_utilcmd.c:2295 +#: parser/parse_utilcmd.c:2302 parser/parse_utilcmd.c:2379 #, c-format msgid "Cannot create a primary key or unique constraint using such an index." msgstr "" "Создать первичный ключ или ограничение уникальности для такого индекса " "нельзя." -#: parser/parse_utilcmd.c:2290 +#: parser/parse_utilcmd.c:2294 #, c-format msgid "index \"%s\" contains expressions" msgstr "индекс \"%s\" содержит выражения" -#: parser/parse_utilcmd.c:2297 +#: parser/parse_utilcmd.c:2301 #, c-format msgid "\"%s\" is a partial index" msgstr "\"%s\" - частичный индекс" -#: parser/parse_utilcmd.c:2309 +#: parser/parse_utilcmd.c:2313 #, c-format msgid "\"%s\" is a deferrable index" msgstr "\"%s\" - откладываемый индекс" -#: parser/parse_utilcmd.c:2310 +#: parser/parse_utilcmd.c:2314 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "" "Создать не откладываемое ограничение на базе откладываемого индекса нельзя." -#: parser/parse_utilcmd.c:2374 +#: parser/parse_utilcmd.c:2378 #, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" msgstr "" "в индексе \"%s\" для столбца номер %d не определено поведение сортировки по " "умолчанию" -#: parser/parse_utilcmd.c:2531 +#: parser/parse_utilcmd.c:2535 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "столбец \"%s\" фигурирует в первичном ключе дважды" -#: parser/parse_utilcmd.c:2537 +#: parser/parse_utilcmd.c:2541 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "столбец \"%s\" фигурирует в ограничении уникальности дважды" -#: parser/parse_utilcmd.c:2871 +#: parser/parse_utilcmd.c:2875 #, c-format msgid "" "index expressions and predicates can refer only to the table being indexed" @@ -21220,22 +21220,22 @@ "индексные выражения и предикаты могут ссылаться только на индексируемую " "таблицу" -#: parser/parse_utilcmd.c:2943 +#: parser/parse_utilcmd.c:2947 #, c-format msgid "statistics expressions can refer only to the table being referenced" msgstr "выражения статистики могут ссылаться только на целевую таблицу" -#: parser/parse_utilcmd.c:2986 +#: parser/parse_utilcmd.c:2990 #, c-format msgid "rules on materialized views are not supported" msgstr "правила для материализованных представлений не поддерживаются" -#: parser/parse_utilcmd.c:3046 +#: parser/parse_utilcmd.c:3050 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "в условиях WHERE для правил нельзя ссылаться на другие отношения" -#: parser/parse_utilcmd.c:3118 +#: parser/parse_utilcmd.c:3122 #, c-format msgid "" "rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE " @@ -21244,158 +21244,158 @@ "правила с условиями WHERE могут содержать только действия SELECT, INSERT, " "UPDATE или DELETE" -#: parser/parse_utilcmd.c:3136 parser/parse_utilcmd.c:3237 -#: rewrite/rewriteHandler.c:544 rewrite/rewriteManip.c:1096 +#: parser/parse_utilcmd.c:3140 parser/parse_utilcmd.c:3241 +#: rewrite/rewriteHandler.c:545 rewrite/rewriteManip.c:1096 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "условные операторы UNION/INTERSECT/EXCEPT не реализованы" -#: parser/parse_utilcmd.c:3154 +#: parser/parse_utilcmd.c:3158 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "в правиле ON SELECT нельзя использовать OLD" -#: parser/parse_utilcmd.c:3158 +#: parser/parse_utilcmd.c:3162 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "в правиле ON SELECT нельзя использовать NEW" -#: parser/parse_utilcmd.c:3167 +#: parser/parse_utilcmd.c:3171 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "в правиле ON INSERT нельзя использовать OLD" -#: parser/parse_utilcmd.c:3173 +#: parser/parse_utilcmd.c:3177 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "в правиле ON DELETE нельзя использовать NEW" -#: parser/parse_utilcmd.c:3201 +#: parser/parse_utilcmd.c:3205 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "в запросе WITH нельзя ссылаться на OLD" -#: parser/parse_utilcmd.c:3208 +#: parser/parse_utilcmd.c:3212 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "в запросе WITH нельзя ссылаться на NEW" -#: parser/parse_utilcmd.c:3664 +#: parser/parse_utilcmd.c:3668 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "предложение DEFERRABLE расположено неправильно" -#: parser/parse_utilcmd.c:3669 parser/parse_utilcmd.c:3684 +#: parser/parse_utilcmd.c:3673 parser/parse_utilcmd.c:3688 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "DEFERRABLE/NOT DEFERRABLE можно указать только один раз" -#: parser/parse_utilcmd.c:3679 +#: parser/parse_utilcmd.c:3683 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "предложение NOT DEFERRABLE расположено неправильно" -#: parser/parse_utilcmd.c:3692 parser/parse_utilcmd.c:3718 gram.y:6114 +#: parser/parse_utilcmd.c:3696 parser/parse_utilcmd.c:3722 gram.y:6114 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "" "ограничение со свойством INITIALLY DEFERRED должно быть объявлено как " "DEFERRABLE" -#: parser/parse_utilcmd.c:3700 +#: parser/parse_utilcmd.c:3704 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "предложение INITIALLY DEFERRED расположено неправильно" -#: parser/parse_utilcmd.c:3705 parser/parse_utilcmd.c:3731 +#: parser/parse_utilcmd.c:3709 parser/parse_utilcmd.c:3735 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "INITIALLY IMMEDIATE/DEFERRED можно указать только один раз" -#: parser/parse_utilcmd.c:3726 +#: parser/parse_utilcmd.c:3730 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "предложение INITIALLY IMMEDIATE расположено неправильно" -#: parser/parse_utilcmd.c:3919 +#: parser/parse_utilcmd.c:3923 #, c-format msgid "" "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "в CREATE указана схема (%s), отличная от создаваемой (%s)" -#: parser/parse_utilcmd.c:3954 +#: parser/parse_utilcmd.c:3958 #, c-format msgid "\"%s\" is not a partitioned table" msgstr "\"%s\" — не секционированная таблица" -#: parser/parse_utilcmd.c:3961 +#: parser/parse_utilcmd.c:3965 #, c-format msgid "table \"%s\" is not partitioned" msgstr "таблица \"%s\" не является секционированной" -#: parser/parse_utilcmd.c:3968 +#: parser/parse_utilcmd.c:3972 #, c-format msgid "index \"%s\" is not partitioned" msgstr "индекс \"%s\" не секционирован" -#: parser/parse_utilcmd.c:4008 +#: parser/parse_utilcmd.c:4012 #, c-format msgid "a hash-partitioned table may not have a default partition" msgstr "у секционированной по хешу таблицы не может быть секции по умолчанию" -#: parser/parse_utilcmd.c:4025 +#: parser/parse_utilcmd.c:4029 #, c-format msgid "invalid bound specification for a hash partition" msgstr "неправильное указание ограничения для хеш-секции" -#: parser/parse_utilcmd.c:4031 partitioning/partbounds.c:4802 +#: parser/parse_utilcmd.c:4035 partitioning/partbounds.c:4802 #, c-format msgid "modulus for hash partition must be an integer value greater than zero" msgstr "модуль для хеш-секции должен быть положительным целым" -#: parser/parse_utilcmd.c:4038 partitioning/partbounds.c:4810 +#: parser/parse_utilcmd.c:4042 partitioning/partbounds.c:4810 #, c-format msgid "remainder for hash partition must be less than modulus" msgstr "остаток для хеш-секции должен быть меньше модуля" -#: parser/parse_utilcmd.c:4051 +#: parser/parse_utilcmd.c:4055 #, c-format msgid "invalid bound specification for a list partition" msgstr "неправильное указание ограничения для секции по списку" -#: parser/parse_utilcmd.c:4104 +#: parser/parse_utilcmd.c:4108 #, c-format msgid "invalid bound specification for a range partition" msgstr "неправильное указание ограничения для секции по диапазону" -#: parser/parse_utilcmd.c:4110 +#: parser/parse_utilcmd.c:4114 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "" "во FROM должно указываться ровно одно значение для секционирующего столбца" -#: parser/parse_utilcmd.c:4114 +#: parser/parse_utilcmd.c:4118 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "" "в TO должно указываться ровно одно значение для секционирующего столбца" -#: parser/parse_utilcmd.c:4230 +#: parser/parse_utilcmd.c:4234 #, c-format msgid "cannot specify NULL in range bound" msgstr "указать NULL в диапазонном ограничении нельзя" -#: parser/parse_utilcmd.c:4278 +#: parser/parse_utilcmd.c:4282 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "за границей MAXVALUE могут следовать только границы MAXVALUE" -#: parser/parse_utilcmd.c:4285 +#: parser/parse_utilcmd.c:4289 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "за границей MINVALUE могут следовать только границы MINVALUE" -#: parser/parse_utilcmd.c:4328 +#: parser/parse_utilcmd.c:4332 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "указанное значение нельзя привести к типу %s столбца \"%s\"" @@ -21886,7 +21886,7 @@ "фоновый процесс \"%s\": параллельные исполнители не могут быть настроены для " "перезапуска" -#: postmaster/bgworker.c:715 tcop/postgres.c:3312 +#: postmaster/bgworker.c:715 tcop/postgres.c:3313 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "завершение фонового процесса \"%s\" по команде администратора" @@ -22107,22 +22107,22 @@ msgid "archive modules must register an archive callback" msgstr "модули архивирования должны регистрировать обработчик вызова архивации" -#: postmaster/postmaster.c:661 +#: postmaster/postmaster.c:662 #, c-format msgid "%s: invalid argument for option -f: \"%s\"\n" msgstr "%s: неверный аргумент для параметра -f: \"%s\"\n" -#: postmaster/postmaster.c:734 +#: postmaster/postmaster.c:735 #, c-format msgid "%s: invalid argument for option -t: \"%s\"\n" msgstr "%s: неверный аргумент для параметра -t: \"%s\"\n" -#: postmaster/postmaster.c:757 +#: postmaster/postmaster.c:758 #, c-format msgid "%s: invalid argument: \"%s\"\n" msgstr "%s: неверный аргумент: \"%s\"\n" -#: postmaster/postmaster.c:825 +#: postmaster/postmaster.c:826 #, c-format msgid "" "%s: \"superuser_reserved_connections\" (%d) plus " @@ -22131,12 +22131,12 @@ "%s: значение \"superuser_reserved_connections\" (%d) плюс " "\"reserved_connections\" (%d) должно быть меньше \"max_connections\" (%d)\n" -#: postmaster/postmaster.c:833 +#: postmaster/postmaster.c:834 #, c-format msgid "WAL archival cannot be enabled when \"wal_level\" is \"minimal\"" msgstr "архивацию WAL нельзя включить, если \"wal_level\" = \"minimal\"" -#: postmaster/postmaster.c:836 +#: postmaster/postmaster.c:837 #, c-format msgid "" "WAL streaming (\"max_wal_senders\" > 0) requires \"wal_level\" to be " @@ -22145,103 +22145,103 @@ "для потоковой трансляции WAL (\"max_wal_senders\" > 0) \"wal_level\" должен " "быть \"replica\" или \"logical\"" -#: postmaster/postmaster.c:839 +#: postmaster/postmaster.c:840 #, c-format msgid "WAL cannot be summarized when \"wal_level\" is \"minimal\"" msgstr "обобщение WAL нельзя включить, если выбран \"wal_level\" \"minimal\"" -#: postmaster/postmaster.c:847 +#: postmaster/postmaster.c:848 #, c-format msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: ошибка в таблицах маркеров времени, требуется исправление\n" -#: postmaster/postmaster.c:1006 +#: postmaster/postmaster.c:1007 #, c-format msgid "could not create I/O completion port for child queue" msgstr "не удалось создать порт завершения ввода/вывода для очереди потомков" -#: postmaster/postmaster.c:1071 +#: postmaster/postmaster.c:1072 #, c-format msgid "ending log output to stderr" msgstr "завершение вывода в stderr" -#: postmaster/postmaster.c:1072 +#: postmaster/postmaster.c:1073 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "В дальнейшем протокол будет выводиться в \"%s\"." -#: postmaster/postmaster.c:1083 +#: postmaster/postmaster.c:1084 #, c-format msgid "starting %s" msgstr "запускается %s" -#: postmaster/postmaster.c:1145 +#: postmaster/postmaster.c:1146 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "не удалось создать принимающий сокет для \"%s\"" -#: postmaster/postmaster.c:1151 +#: postmaster/postmaster.c:1152 #, c-format msgid "could not create any TCP/IP sockets" msgstr "не удалось создать сокеты TCP/IP" -#: postmaster/postmaster.c:1183 +#: postmaster/postmaster.c:1184 #, c-format msgid "DNSServiceRegister() failed: error code %ld" msgstr "функция DNSServiceRegister() выдала ошибку с кодом %ld" -#: postmaster/postmaster.c:1236 +#: postmaster/postmaster.c:1237 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "не удалось создать Unix-сокет в каталоге \"%s\"" -#: postmaster/postmaster.c:1242 +#: postmaster/postmaster.c:1243 #, c-format msgid "could not create any Unix-domain sockets" msgstr "ни один Unix-сокет создать не удалось" -#: postmaster/postmaster.c:1253 +#: postmaster/postmaster.c:1254 #, c-format msgid "no socket created for listening" msgstr "отсутствуют принимающие сокеты" -#: postmaster/postmaster.c:1284 +#: postmaster/postmaster.c:1285 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %m\n" msgstr "%s: не удалось поменять права для внешнего файла PID \"%s\": %m\n" -#: postmaster/postmaster.c:1288 +#: postmaster/postmaster.c:1289 #, c-format msgid "%s: could not write external PID file \"%s\": %m\n" msgstr "%s: не удалось записать внешний файл PID \"%s\": %m\n" #. translator: %s is a configuration file -#: postmaster/postmaster.c:1316 utils/init/postinit.c:221 +#: postmaster/postmaster.c:1317 utils/init/postinit.c:221 #, c-format msgid "could not load %s" msgstr "не удалось загрузить %s" -#: postmaster/postmaster.c:1344 +#: postmaster/postmaster.c:1345 #, c-format msgid "postmaster became multithreaded during startup" msgstr "процесс postmaster стал многопоточным при запуске" -#: postmaster/postmaster.c:1345 postmaster/postmaster.c:3686 +#: postmaster/postmaster.c:1346 postmaster/postmaster.c:3672 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "Установите в переменной окружения LC_ALL правильную локаль." -#: postmaster/postmaster.c:1444 +#: postmaster/postmaster.c:1445 #, c-format msgid "%s: could not locate my own executable path" msgstr "%s: не удалось найти путь к собственному исполняемому файлу" -#: postmaster/postmaster.c:1451 +#: postmaster/postmaster.c:1452 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: подходящий исполняемый файл postgres не найден" -#: postmaster/postmaster.c:1474 utils/misc/tzparser.c:341 +#: postmaster/postmaster.c:1475 utils/misc/tzparser.c:341 #, c-format msgid "" "This may indicate an incomplete PostgreSQL installation, or that the file " @@ -22250,7 +22250,7 @@ "Возможно, PostgreSQL установлен не полностью или файла \"%s\" нет в " "положенном месте." -#: postmaster/postmaster.c:1501 +#: postmaster/postmaster.c:1502 #, c-format msgid "" "%s: could not find the database system\n" @@ -22263,246 +22263,241 @@ # well-spelled: неподчиняющимся #. translator: %s is SIGKILL or SIGABRT -#: postmaster/postmaster.c:1791 +#: postmaster/postmaster.c:1792 #, c-format msgid "issuing %s to recalcitrant children" msgstr "неподчиняющимся потомкам посылается %s" -#: postmaster/postmaster.c:1813 +#: postmaster/postmaster.c:1814 #, c-format msgid "" "performing immediate shutdown because data directory lock file is invalid" msgstr "" "немедленное отключение из-за ошибочного файла блокировки каталога данных" -#: postmaster/postmaster.c:1876 +#: postmaster/postmaster.c:1877 #, c-format msgid "wrong key in cancel request for process %d" msgstr "неправильный ключ в запросе на отмену процесса %d" -#: postmaster/postmaster.c:1888 +#: postmaster/postmaster.c:1889 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "процесс с кодом %d, полученным в запросе на отмену, не найден" -#: postmaster/postmaster.c:2108 +#: postmaster/postmaster.c:2109 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "получен SIGHUP, файлы конфигурации перезагружаются" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2136 postmaster/postmaster.c:2140 +#: postmaster/postmaster.c:2137 postmaster/postmaster.c:2141 #, c-format msgid "%s was not reloaded" msgstr "%s не был перезагружен" -#: postmaster/postmaster.c:2150 +#: postmaster/postmaster.c:2151 #, c-format msgid "SSL configuration was not reloaded" msgstr "конфигурация SSL не была перезагружена" -#: postmaster/postmaster.c:2236 +#: postmaster/postmaster.c:2237 #, c-format msgid "received smart shutdown request" msgstr "получен запрос на \"вежливое\" выключение" -#: postmaster/postmaster.c:2277 +#: postmaster/postmaster.c:2278 #, c-format msgid "received fast shutdown request" msgstr "получен запрос на быстрое выключение" -#: postmaster/postmaster.c:2295 +#: postmaster/postmaster.c:2296 #, c-format msgid "aborting any active transactions" msgstr "прерывание всех активных транзакций" -#: postmaster/postmaster.c:2319 +#: postmaster/postmaster.c:2320 #, c-format msgid "received immediate shutdown request" msgstr "получен запрос на немедленное выключение" -#: postmaster/postmaster.c:2391 +#: postmaster/postmaster.c:2392 #, c-format msgid "shutdown at recovery target" msgstr "выключение при достижении цели восстановления" -#: postmaster/postmaster.c:2409 postmaster/postmaster.c:2445 +#: postmaster/postmaster.c:2430 msgid "startup process" msgstr "стартовый процесс" -#: postmaster/postmaster.c:2412 -#, c-format -msgid "aborting startup due to startup process failure" -msgstr "прерывание запуска из-за ошибки в стартовом процессе" - -#: postmaster/postmaster.c:2487 +#: postmaster/postmaster.c:2472 #, c-format msgid "database system is ready to accept connections" msgstr "система БД готова принимать подключения" -#: postmaster/postmaster.c:2508 +#: postmaster/postmaster.c:2493 msgid "background writer process" msgstr "процесс фоновой записи" -#: postmaster/postmaster.c:2555 +#: postmaster/postmaster.c:2540 msgid "checkpointer process" msgstr "процесс контрольных точек" -#: postmaster/postmaster.c:2571 +#: postmaster/postmaster.c:2556 msgid "WAL writer process" msgstr "процесс записи WAL" -#: postmaster/postmaster.c:2586 +#: postmaster/postmaster.c:2571 msgid "WAL receiver process" msgstr "процесс считывания WAL" -#: postmaster/postmaster.c:2600 +#: postmaster/postmaster.c:2585 msgid "WAL summarizer process" msgstr "процесс обобщения WAL" -#: postmaster/postmaster.c:2615 +#: postmaster/postmaster.c:2600 msgid "autovacuum launcher process" msgstr "процесс запуска автоочистки" -#: postmaster/postmaster.c:2633 +#: postmaster/postmaster.c:2618 msgid "archiver process" msgstr "процесс архивации" -#: postmaster/postmaster.c:2646 +#: postmaster/postmaster.c:2631 msgid "system logger process" msgstr "процесс системного протоколирования" -#: postmaster/postmaster.c:2663 +#: postmaster/postmaster.c:2648 msgid "slot sync worker process" msgstr "рабочий процесс синхронизации слотов" -#: postmaster/postmaster.c:2719 +#: postmaster/postmaster.c:2704 #, c-format msgid "background worker \"%s\"" msgstr "фоновый процесс \"%s\"" -#: postmaster/postmaster.c:2798 postmaster/postmaster.c:2818 -#: postmaster/postmaster.c:2825 postmaster/postmaster.c:2843 +#: postmaster/postmaster.c:2783 postmaster/postmaster.c:2803 +#: postmaster/postmaster.c:2810 postmaster/postmaster.c:2828 msgid "server process" msgstr "процесс сервера" -#: postmaster/postmaster.c:2897 +#: postmaster/postmaster.c:2882 #, 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:3084 +#: postmaster/postmaster.c:3070 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) завершился с кодом выхода %d" -#: postmaster/postmaster.c:3086 postmaster/postmaster.c:3098 -#: postmaster/postmaster.c:3108 postmaster/postmaster.c:3119 +#: postmaster/postmaster.c:3072 postmaster/postmaster.c:3084 +#: postmaster/postmaster.c:3094 postmaster/postmaster.c:3105 #, 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:3095 +#: postmaster/postmaster.c:3081 #, 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:3105 +#: postmaster/postmaster.c:3091 #, 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:3117 +#: postmaster/postmaster.c:3103 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) завершился с нераспознанным кодом состояния %d" -#: postmaster/postmaster.c:3333 +#: postmaster/postmaster.c:3319 #, c-format msgid "abnormal database system shutdown" msgstr "аварийное выключение системы БД" -#: postmaster/postmaster.c:3359 +#: postmaster/postmaster.c:3345 #, c-format msgid "shutting down due to startup process failure" msgstr "сервер останавливается из-за ошибки в стартовом процессе" -#: postmaster/postmaster.c:3365 +#: postmaster/postmaster.c:3351 #, c-format msgid "shutting down because \"restart_after_crash\" is off" msgstr "сервер останавливается, так как \"restart_after_crash\" = \"off\"" -#: postmaster/postmaster.c:3377 +#: postmaster/postmaster.c:3363 #, c-format msgid "all server processes terminated; reinitializing" msgstr "все серверные процессы завершены... переинициализация" -#: postmaster/postmaster.c:3576 postmaster/postmaster.c:3987 -#: postmaster/postmaster.c:4376 +#: postmaster/postmaster.c:3562 postmaster/postmaster.c:3973 +#: postmaster/postmaster.c:4362 #, c-format msgid "could not generate random cancel key" msgstr "не удалось сгенерировать случайный ключ отмены" -#: postmaster/postmaster.c:3609 +#: postmaster/postmaster.c:3595 #, c-format msgid "could not fork new process for connection: %m" msgstr "породить новый процесс для соединения не удалось: %m" -#: postmaster/postmaster.c:3651 +#: postmaster/postmaster.c:3637 msgid "could not fork new process for connection: " msgstr "породить новый процесс для соединения не удалось: " -#: postmaster/postmaster.c:3685 +#: postmaster/postmaster.c:3671 #, c-format msgid "postmaster became multithreaded" msgstr "процесс postmaster стал многопоточным" -#: postmaster/postmaster.c:3754 +#: postmaster/postmaster.c:3740 #, c-format msgid "database system is ready to accept read-only connections" msgstr "система БД готова принимать подключения в режиме \"только чтение\"" -#: postmaster/postmaster.c:3937 +#: postmaster/postmaster.c:3923 #, c-format msgid "could not fork \"%s\" process: %m" msgstr "породить процесс \"%s\" не удалось: %m" -#: postmaster/postmaster.c:4175 postmaster/postmaster.c:4209 +#: postmaster/postmaster.c:4161 postmaster/postmaster.c:4195 #, c-format msgid "database connection requirement not indicated during registration" msgstr "" "при регистрации фонового процесса не указывалось, что ему требуется " "подключение к БД" -#: postmaster/postmaster.c:4185 postmaster/postmaster.c:4219 +#: postmaster/postmaster.c:4171 postmaster/postmaster.c:4205 #, c-format msgid "invalid processing mode in background worker" msgstr "неправильный режим обработки в фоновом процессе" -#: postmaster/postmaster.c:4279 +#: postmaster/postmaster.c:4265 #, c-format msgid "could not fork background worker process: %m" msgstr "породить фоновый рабочий процесс не удалось: %m" -#: postmaster/postmaster.c:4362 +#: postmaster/postmaster.c:4348 #, c-format msgid "no slot available for new background worker process" msgstr "для нового фонового рабочего процесса нет свободного слота" -#: postmaster/postmaster.c:4625 +#: postmaster/postmaster.c:4611 #, c-format msgid "could not read exit code for process\n" msgstr "прочитать код завершения процесса не удалось\n" -#: postmaster/postmaster.c:4667 +#: postmaster/postmaster.c:4653 #, c-format msgid "could not post child completion status\n" msgstr "отправить состояние завершения потомка не удалось\n" @@ -22557,12 +22552,12 @@ msgid "disabling automatic rotation (use SIGHUP to re-enable)" msgstr "отключение автопрокрутки (чтобы включить, передайте SIGHUP)" -#: postmaster/walsummarizer.c:740 +#: postmaster/walsummarizer.c:741 #, c-format msgid "WAL summarization is not progressing" msgstr "процесс обобщения WAL не продвигается" -#: postmaster/walsummarizer.c:741 +#: postmaster/walsummarizer.c:742 #, c-format msgid "" "Summarization is needed through %X/%X, but is stuck at %X/%X on disk and %X/" @@ -22571,7 +22566,7 @@ "Обобщение должно охватить %X/%X, но оно остановилось на позиции %X/%X на " "диске и %X/%X в памяти." -#: postmaster/walsummarizer.c:755 +#: postmaster/walsummarizer.c:756 #, c-format msgid "still waiting for WAL summarization through %X/%X after %ld second" msgid_plural "" @@ -22580,22 +22575,22 @@ msgstr[1] "ожидание обобщения позиции %X/%X продолжается %ld сек." msgstr[2] "ожидание обобщения позиции %X/%X продолжается %ld сек." -#: postmaster/walsummarizer.c:760 +#: postmaster/walsummarizer.c:761 #, c-format msgid "Summarization has reached %X/%X on disk and %X/%X in memory." msgstr "Процесс обобщения достиг позиции %X/%X на диске и %X/%X в памяти." -#: postmaster/walsummarizer.c:1000 +#: postmaster/walsummarizer.c:1001 #, c-format msgid "could not find a valid record after %X/%X" msgstr "не удалось найти корректную запись после %X/%X" -#: postmaster/walsummarizer.c:1045 +#: postmaster/walsummarizer.c:1046 #, c-format msgid "could not read WAL from timeline %u at %X/%X: %s" msgstr "не удалось прочитать WAL с линии времени %u в позиции %X/%X: %s" -#: postmaster/walsummarizer.c:1051 +#: postmaster/walsummarizer.c:1052 #, c-format msgid "could not read WAL from timeline %u at %X/%X" msgstr "не удалось прочитать WAL с линии времени %u в позиции %X/%X" @@ -22779,35 +22774,35 @@ "параллельный применяющий процесс логической репликации для подписки \"%s\" " "завершён" -#: replication/logical/applyparallelworker.c:822 +#: replication/logical/applyparallelworker.c:831 #, c-format msgid "lost connection to the logical replication apply worker" msgstr "потеряна связь с применяющим процессом логической репликации" -#: replication/logical/applyparallelworker.c:1031 -#: replication/logical/applyparallelworker.c:1033 +#: replication/logical/applyparallelworker.c:1040 +#: replication/logical/applyparallelworker.c:1042 msgid "logical replication parallel apply worker" msgstr "параллельный применяющий процесс логической репликации" -#: replication/logical/applyparallelworker.c:1047 +#: replication/logical/applyparallelworker.c:1056 #, c-format msgid "logical replication parallel apply worker exited due to error" msgstr "" "параллельный применяющий процесс логической репликации завершён из-за ошибки" -#: replication/logical/applyparallelworker.c:1134 -#: replication/logical/applyparallelworker.c:1307 +#: replication/logical/applyparallelworker.c:1143 +#: replication/logical/applyparallelworker.c:1316 #, c-format msgid "lost connection to the logical replication parallel apply worker" msgstr "" "потеряна связь с параллельным применяющим процессом логическим репликации" -#: replication/logical/applyparallelworker.c:1187 +#: replication/logical/applyparallelworker.c:1196 #, c-format msgid "could not send data to shared-memory queue" msgstr "не удалось передать данные в очередь в разделяемой памяти" -#: replication/logical/applyparallelworker.c:1222 +#: replication/logical/applyparallelworker.c:1231 #, c-format msgid "" "logical replication apply worker will serialize the remaining changes of " @@ -23186,12 +23181,12 @@ msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %d, требовалось: %d)" -#: replication/logical/slotsync.c:215 replication/logical/slotsync.c:580 +#: replication/logical/slotsync.c:226 replication/logical/slotsync.c:604 #, c-format msgid "could not synchronize replication slot \"%s\"" msgstr "не удалось синхронизировать слот репликации \"%s\"" -#: replication/logical/slotsync.c:217 +#: replication/logical/slotsync.c:228 #, c-format msgid "" "Synchronization could lead to data loss, because the remote slot needs WAL " @@ -23202,12 +23197,12 @@ "WAL в позиции LSN %X/%X и xmin каталога %u, но на резервном сервере текущий " "LSN %X/%X и xmin каталога %u." -#: replication/logical/slotsync.c:459 +#: replication/logical/slotsync.c:483 #, c-format msgid "dropped replication slot \"%s\" of database with OID %u" msgstr "слот репликации \"%s\" базы данных с OID %u удалён" -#: replication/logical/slotsync.c:581 +#: replication/logical/slotsync.c:605 #, c-format msgid "" "Synchronization could lead to data loss, because the standby could not build " @@ -23216,12 +23211,12 @@ "Синхронизация могла привести к потере данных, так как резервный сервер не " "смог получить согласованный снимок для декодирования WAL в позиции LSN %X/%X." -#: replication/logical/slotsync.c:590 +#: replication/logical/slotsync.c:614 #, c-format msgid "newly created replication slot \"%s\" is sync-ready now" msgstr "созданный слот репликации \"%s\" сейчас готов к синхронизации" -#: replication/logical/slotsync.c:629 +#: replication/logical/slotsync.c:653 #, c-format msgid "" "skipping slot synchronization because the received slot sync LSN %X/%X for " @@ -23230,7 +23225,7 @@ "синхронизация слота пропускается, потому что полученная позиция LSN %X/%X " "для слота \"%s\" предшествует позиции %X/%X на резервном сервере" -#: replication/logical/slotsync.c:651 +#: replication/logical/slotsync.c:675 #, c-format msgid "" "exiting from slot synchronization because same name slot \"%s\" already " @@ -23239,32 +23234,32 @@ "синхронизация слота отменяется, потому что слот с таким же именем \"%s\" уже " "существует на резервном сервере" -#: replication/logical/slotsync.c:822 +#: replication/logical/slotsync.c:846 #, c-format msgid "could not fetch failover logical slots info from the primary server: %s" msgstr "" "не удалось получить информацию о переносимых логических слотах с главного " "сервера: %s" -#: replication/logical/slotsync.c:968 +#: replication/logical/slotsync.c:992 #, c-format msgid "" "could not fetch primary_slot_name \"%s\" info from the primary server: %s" msgstr "не удалось получить информацию о слоте \"%s\" с главного сервера: %s" # skip-rule: nastroy1 -#: replication/logical/slotsync.c:970 +#: replication/logical/slotsync.c:994 #, c-format msgid "Check if primary_slot_name is configured correctly." msgstr "Проверьте правильность настройки primary_slot_name." -#: replication/logical/slotsync.c:990 +#: replication/logical/slotsync.c:1014 #, c-format msgid "cannot synchronize replication slots from a standby server" msgstr "синхронизировать слоты репликации с резервного сервера нельзя" #. translator: second %s is a GUC variable name -#: replication/logical/slotsync.c:999 +#: replication/logical/slotsync.c:1023 #, c-format msgid "" "replication slot \"%s\" specified by \"%s\" does not exist on primary server" @@ -23274,41 +23269,40 @@ #. translator: first %s is a connection option; second %s is a GUC #. variable name #. -#: replication/logical/slotsync.c:1032 +#: replication/logical/slotsync.c:1056 #, c-format msgid "" "replication slot synchronization requires \"%s\" to be specified in \"%s\"" msgstr "для синхронизации слотов репликации требуется указание \"%s\" в \"%s\"" -#: replication/logical/slotsync.c:1051 +#: replication/logical/slotsync.c:1075 #, c-format msgid "replication slot synchronization requires \"wal_level\" >= \"logical\"" msgstr "" "для синхронизации слотов репликации требуется \"wal_level\" >= \"logical\"" #. translator: %s is a GUC variable name -#: replication/logical/slotsync.c:1066 replication/logical/slotsync.c:1094 +#: replication/logical/slotsync.c:1090 replication/logical/slotsync.c:1118 #, c-format msgid "replication slot synchronization requires \"%s\" to be set" msgstr "для синхронизации слотов репликации требуется установить \"%s\"" #. translator: %s is a GUC variable name -#: replication/logical/slotsync.c:1080 +#: replication/logical/slotsync.c:1104 #, c-format msgid "replication slot synchronization requires \"%s\" to be enabled" msgstr "для синхронизации слотов репликации требуется включить \"%s\"" #. translator: %s is a GUC variable name -#: replication/logical/slotsync.c:1132 +#: replication/logical/slotsync.c:1161 #, c-format msgid "" -"replication slot synchronization worker will shut down because \"%s\" is " -"disabled" +"replication slot synchronization worker will stop because \"%s\" is disabled" msgstr "" "процесс синхронизации слотов репликации будет остановлен, так как \"%s\" " "отключён" -#: replication/logical/slotsync.c:1141 +#: replication/logical/slotsync.c:1179 #, c-format msgid "" "replication slot synchronization worker will restart because of a parameter " @@ -23317,33 +23311,60 @@ "процесс синхронизации слотов репликации будет перезапущен вследствие " "изменения параметров" -#: replication/logical/slotsync.c:1165 +#: replication/logical/slotsync.c:1204 +#, c-format +msgid "" +"replication slot synchronization will stop because of a parameter change" +msgstr "" +"процесс синхронизации слотов репликации будет остановлен вследствие " +"изменения параметров" + +#: replication/logical/slotsync.c:1240 +#, c-format +msgid "" +"replication slot synchronization worker will stop because promotion is " +"triggered" +msgstr "" +"процесс синхронизации слотов репликации будет остановлен, так как вызвана " +"процедура повышения сервера" + +#: replication/logical/slotsync.c:1254 +#, c-format +msgid "" +"replication slot synchronization will stop because promotion is triggered" +msgstr "" +"синхронизация слотов репликации будет остановлена, так как вызвана процедура " +"повышения сервера" + +#: replication/logical/slotsync.c:1374 #, c-format msgid "" -"replication slot synchronization worker is shutting down because promotion " -"is triggered" +"replication slot synchronization worker will not start because promotion was " +"triggered" msgstr "" -"процесс синхронизации слотов репликации останавливается, так как вызвана " +"процесс синхронизации слотов репликации не будет запущен, так как вызвана " "процедура повышения сервера" -#: replication/logical/slotsync.c:1290 +#: replication/logical/slotsync.c:1386 #, c-format -msgid "cannot synchronize replication slots when standby promotion is ongoing" +msgid "" +"replication slot synchronization will not start because promotion was " +"triggered" msgstr "" -"синхронизировать слоты репликации, когда выполняется повышение резервного " -"сервера, нельзя" +"синхронизация слотов репликации не будет запущена, так как вызвана процедура " +"повышения сервера" -#: replication/logical/slotsync.c:1298 +#: replication/logical/slotsync.c:1395 #, c-format msgid "cannot synchronize replication slots concurrently" msgstr "многопоточная синхронизация слотов репликации не поддерживается" -#: replication/logical/slotsync.c:1406 +#: replication/logical/slotsync.c:1507 #, c-format msgid "slot sync worker started" msgstr "рабочий процесс синхронизации слотов запущен" -#: replication/logical/slotsync.c:1469 replication/slotfuncs.c:926 +#: replication/logical/slotsync.c:1570 replication/slotfuncs.c:926 #: replication/walreceiver.c:307 #, c-format msgid "could not connect to the primary server: %s" @@ -24421,28 +24442,28 @@ msgid "terminating walsender process after promotion" msgstr "завершение процесса передачи журнала после повышения" -#: replication/walsender.c:2029 +#: replication/walsender.c:2035 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "" "нельзя выполнять новые команды, пока процесс передачи WAL находится в режиме " "остановки" -#: replication/walsender.c:2064 +#: replication/walsender.c:2070 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" msgstr "" "нельзя выполнять команды SQL в процессе, передающем WAL для физической " "репликации" -#: replication/walsender.c:2097 +#: replication/walsender.c:2103 #, c-format msgid "received replication command: %s" msgstr "получена команда репликации: %s" -#: replication/walsender.c:2105 tcop/fastpath.c:209 tcop/postgres.c:1142 -#: tcop/postgres.c:1500 tcop/postgres.c:1752 tcop/postgres.c:2234 -#: tcop/postgres.c:2672 tcop/postgres.c:2749 +#: replication/walsender.c:2111 tcop/fastpath.c:209 tcop/postgres.c:1143 +#: tcop/postgres.c:1501 tcop/postgres.c:1753 tcop/postgres.c:2235 +#: tcop/postgres.c:2673 tcop/postgres.c:2750 #, c-format msgid "" "current transaction is aborted, commands ignored until end of transaction " @@ -24450,22 +24471,22 @@ msgstr "" "текущая транзакция прервана, команды до конца блока транзакции игнорируются" -#: replication/walsender.c:2262 replication/walsender.c:2297 +#: replication/walsender.c:2268 replication/walsender.c:2303 #, c-format msgid "unexpected EOF on standby connection" msgstr "неожиданный обрыв соединения с резервным сервером" -#: replication/walsender.c:2285 +#: replication/walsender.c:2291 #, c-format msgid "invalid standby message type \"%c\"" msgstr "неверный тип сообщения резервного сервера: \"%c\"" -#: replication/walsender.c:2374 +#: replication/walsender.c:2380 #, c-format msgid "unexpected message type \"%c\"" msgstr "неожиданный тип сообщения \"%c\"" -#: replication/walsender.c:2792 +#: replication/walsender.c:2801 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "завершение процесса передачи журнала из-за тайм-аута репликации" @@ -24658,7 +24679,7 @@ msgid "renaming an ON SELECT rule is not allowed" msgstr "переименовывать правило ON SELECT нельзя" -#: rewrite/rewriteHandler.c:588 +#: rewrite/rewriteHandler.c:589 #, c-format msgid "" "WITH query name \"%s\" appears in both a rule action and the query being " @@ -24667,7 +24688,7 @@ "имя запроса WITH \"%s\" оказалось и в действии правила, и в переписываемом " "запросе" -#: rewrite/rewriteHandler.c:618 +#: rewrite/rewriteHandler.c:619 #, c-format msgid "" "INSERT ... SELECT rule actions are not supported for queries having data-" @@ -24676,123 +24697,123 @@ "правила INSERT ... SELECT не поддерживаются для запросов с операторами, " "изменяющими данные, в WITH" -#: rewrite/rewriteHandler.c:671 +#: rewrite/rewriteHandler.c:705 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "RETURNING можно определить только для одного правила" -#: rewrite/rewriteHandler.c:903 rewrite/rewriteHandler.c:942 +#: rewrite/rewriteHandler.c:937 rewrite/rewriteHandler.c:976 #, c-format msgid "cannot insert a non-DEFAULT value into column \"%s\"" msgstr "в столбец \"%s\" можно вставить только значение по умолчанию" -#: rewrite/rewriteHandler.c:905 rewrite/rewriteHandler.c:971 +#: rewrite/rewriteHandler.c:939 rewrite/rewriteHandler.c:1005 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "" "Столбец \"%s\" является столбцом идентификации со свойством GENERATED ALWAYS." -#: rewrite/rewriteHandler.c:907 +#: rewrite/rewriteHandler.c:941 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "Для переопределения укажите OVERRIDING SYSTEM VALUE." -#: rewrite/rewriteHandler.c:969 rewrite/rewriteHandler.c:977 +#: rewrite/rewriteHandler.c:1003 rewrite/rewriteHandler.c:1011 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "столбцу \"%s\" можно присвоить только значение DEFAULT" -#: rewrite/rewriteHandler.c:1112 rewrite/rewriteHandler.c:1130 +#: rewrite/rewriteHandler.c:1146 rewrite/rewriteHandler.c:1164 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "многочисленные присвоения одному столбцу \"%s\"" -#: rewrite/rewriteHandler.c:1685 +#: rewrite/rewriteHandler.c:1719 #, c-format msgid "MERGE is not supported for relations with rules." msgstr "MERGE не поддерживается для отношений с правилами." -#: rewrite/rewriteHandler.c:1725 rewrite/rewriteHandler.c:3265 +#: rewrite/rewriteHandler.c:1759 rewrite/rewriteHandler.c:3330 #, c-format msgid "access to non-system view \"%s\" is restricted" msgstr "доступ к несистемному представлению \"%s\" ограничен" -#: rewrite/rewriteHandler.c:2125 rewrite/rewriteHandler.c:4274 +#: rewrite/rewriteHandler.c:2159 rewrite/rewriteHandler.c:4339 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "обнаружена бесконечная рекурсия в правилах для отношения \"%s\"" -#: rewrite/rewriteHandler.c:2230 +#: rewrite/rewriteHandler.c:2264 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "обнаружена бесконечная рекурсия в политике для отношения \"%s\"" -#: rewrite/rewriteHandler.c:2592 +#: rewrite/rewriteHandler.c:2657 msgid "Junk view columns are not updatable." msgstr "Утилизируемые столбцы представлений не обновляются." -#: rewrite/rewriteHandler.c:2597 +#: rewrite/rewriteHandler.c:2662 msgid "" "View columns that are not columns of their base relation are not updatable." msgstr "" "Столбцы представлений, не являющиеся столбцами базовых отношений, не " "обновляются." -#: rewrite/rewriteHandler.c:2600 +#: rewrite/rewriteHandler.c:2665 msgid "View columns that refer to system columns are not updatable." msgstr "" "Столбцы представлений, ссылающиеся на системные столбцы, не обновляются." -#: rewrite/rewriteHandler.c:2603 +#: rewrite/rewriteHandler.c:2668 msgid "View columns that return whole-row references are not updatable." msgstr "" "Столбцы представлений, возвращающие ссылки на всю строку, не обновляются." -#: rewrite/rewriteHandler.c:2664 +#: rewrite/rewriteHandler.c:2729 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Представления с DISTINCT не обновляются автоматически." -#: rewrite/rewriteHandler.c:2667 +#: rewrite/rewriteHandler.c:2732 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Представления с GROUP BY не обновляются автоматически." -#: rewrite/rewriteHandler.c:2670 +#: rewrite/rewriteHandler.c:2735 msgid "Views containing HAVING are not automatically updatable." msgstr "Представления с HAVING не обновляются автоматически." -#: rewrite/rewriteHandler.c:2673 +#: rewrite/rewriteHandler.c:2738 msgid "" "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "" "Представления с UNION, INTERSECT или EXCEPT не обновляются автоматически." -#: rewrite/rewriteHandler.c:2676 +#: rewrite/rewriteHandler.c:2741 msgid "Views containing WITH are not automatically updatable." msgstr "Представления с WITH не обновляются автоматически." -#: rewrite/rewriteHandler.c:2679 +#: rewrite/rewriteHandler.c:2744 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Представления с LIMIT или OFFSET не обновляются автоматически." -#: rewrite/rewriteHandler.c:2691 +#: rewrite/rewriteHandler.c:2756 msgid "Views that return aggregate functions are not automatically updatable." msgstr "" "Представления, возвращающие агрегатные функции, не обновляются автоматически." -#: rewrite/rewriteHandler.c:2694 +#: rewrite/rewriteHandler.c:2759 msgid "Views that return window functions are not automatically updatable." msgstr "" "Представления, возвращающие оконные функции, не обновляются автоматически." -#: rewrite/rewriteHandler.c:2697 +#: rewrite/rewriteHandler.c:2762 msgid "" "Views that return set-returning functions are not automatically updatable." msgstr "" "Представления, возвращающие функции с результатом-множеством, не обновляются " "автоматически." -#: rewrite/rewriteHandler.c:2704 rewrite/rewriteHandler.c:2708 -#: rewrite/rewriteHandler.c:2716 +#: rewrite/rewriteHandler.c:2769 rewrite/rewriteHandler.c:2773 +#: rewrite/rewriteHandler.c:2781 msgid "" "Views that do not select from a single table or view are not automatically " "updatable." @@ -24800,22 +24821,22 @@ "Представления, выбирающие данные не из одной таблицы или представления, не " "обновляются автоматически." -#: rewrite/rewriteHandler.c:2719 +#: rewrite/rewriteHandler.c:2784 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Представления, содержащие TABLESAMPLE, не обновляются автоматически." -#: rewrite/rewriteHandler.c:2743 +#: rewrite/rewriteHandler.c:2808 msgid "Views that have no updatable columns are not automatically updatable." msgstr "" "Представления, не содержащие обновляемых столбцов, не обновляются " "автоматически." -#: rewrite/rewriteHandler.c:3124 rewrite/rewriteHandler.c:3159 +#: rewrite/rewriteHandler.c:3189 rewrite/rewriteHandler.c:3224 #, c-format msgid "cannot insert into view \"%s\"" msgstr "вставить данные в представление \"%s\" нельзя" -#: rewrite/rewriteHandler.c:3127 +#: rewrite/rewriteHandler.c:3192 #, c-format msgid "" "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or " @@ -24824,12 +24845,12 @@ "Чтобы представление допускало добавление данных, установите триггер INSTEAD " "OF INSERT или безусловное правило ON INSERT DO INSTEAD." -#: rewrite/rewriteHandler.c:3132 rewrite/rewriteHandler.c:3168 +#: rewrite/rewriteHandler.c:3197 rewrite/rewriteHandler.c:3233 #, c-format msgid "cannot update view \"%s\"" msgstr "изменить данные в представлении \"%s\" нельзя" -#: rewrite/rewriteHandler.c:3135 +#: rewrite/rewriteHandler.c:3200 #, c-format msgid "" "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an " @@ -24838,12 +24859,12 @@ "Чтобы представление допускало изменение данных, установите триггер INSTEAD " "OF UPDATE или безусловное правило ON UPDATE DO INSTEAD." -#: rewrite/rewriteHandler.c:3140 rewrite/rewriteHandler.c:3177 +#: rewrite/rewriteHandler.c:3205 rewrite/rewriteHandler.c:3242 #, c-format msgid "cannot delete from view \"%s\"" msgstr "удалить данные из представления \"%s\" нельзя" -#: rewrite/rewriteHandler.c:3143 +#: rewrite/rewriteHandler.c:3208 #, c-format msgid "" "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an " @@ -24852,7 +24873,7 @@ "Чтобы представление допускало удаление данных, установите триггер INSTEAD OF " "DELETE или безусловное правило ON DELETE DO INSTEAD." -#: rewrite/rewriteHandler.c:3162 +#: rewrite/rewriteHandler.c:3227 #, c-format msgid "" "To enable inserting into the view using MERGE, provide an INSTEAD OF INSERT " @@ -24861,7 +24882,7 @@ "Чтобы представление допускало добавление данных посредством MERGE, создайте " "триггер INSTEAD OF INSERT." -#: rewrite/rewriteHandler.c:3171 +#: rewrite/rewriteHandler.c:3236 #, c-format msgid "" "To enable updating the view using MERGE, provide an INSTEAD OF UPDATE " @@ -24870,7 +24891,7 @@ "Чтобы представление допускало изменение данных посредством MERGE, создайте " "триггер INSTEAD OF UPDATE." -#: rewrite/rewriteHandler.c:3180 +#: rewrite/rewriteHandler.c:3245 #, c-format msgid "" "To enable deleting from the view using MERGE, provide an INSTEAD OF DELETE " @@ -24879,27 +24900,27 @@ "Чтобы представление допускало удаление данных посредством MERGE, создайте " "триггер INSTEAD OF DELETE." -#: rewrite/rewriteHandler.c:3355 +#: rewrite/rewriteHandler.c:3420 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "вставить данные в столбец \"%s\" представления \"%s\" нельзя" -#: rewrite/rewriteHandler.c:3363 +#: rewrite/rewriteHandler.c:3428 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "изменить данные в столбце \"%s\" представления \"%s\" нельзя" -#: rewrite/rewriteHandler.c:3371 +#: rewrite/rewriteHandler.c:3436 #, c-format msgid "cannot merge into column \"%s\" of view \"%s\"" msgstr "столбец \"%s\" представления \"%s\" не допускает объединение данных" -#: rewrite/rewriteHandler.c:3399 +#: rewrite/rewriteHandler.c:3464 #, c-format msgid "cannot merge into view \"%s\"" msgstr "представление \"%s\" не допускает объединение данных" -#: rewrite/rewriteHandler.c:3401 +#: rewrite/rewriteHandler.c:3466 #, c-format msgid "" "MERGE is not supported for views with INSTEAD OF triggers for some actions " @@ -24908,7 +24929,7 @@ "MERGE не поддерживается для представлений, имеющих триггеры INSTEAD OF для " "некоторых, но не всех действий." -#: rewrite/rewriteHandler.c:3402 +#: rewrite/rewriteHandler.c:3467 #, c-format msgid "" "To enable merging into the view, either provide a full set of INSTEAD OF " @@ -24917,7 +24938,7 @@ "Чтобы представление допускало объединение данных, или предоставьте полный " "набор триггеров INSTEAD OF, или удалите существующие триггеры INSTEAD OF." -#: rewrite/rewriteHandler.c:3931 +#: rewrite/rewriteHandler.c:3996 #, c-format msgid "" "DO INSTEAD NOTIFY rules are not supported for data-modifying statements in " @@ -24926,7 +24947,7 @@ "правила DO INSTEAD NOTIFY не поддерживаются в операторах, изменяющих данные, " "в WITH" -#: rewrite/rewriteHandler.c:3942 +#: rewrite/rewriteHandler.c:4007 #, c-format msgid "" "DO INSTEAD NOTHING rules are not supported for data-modifying statements in " @@ -24935,7 +24956,7 @@ "правила DO INSTEAD NOTHING не поддерживаются в операторах, изменяющих " "данные, в WITH" -#: rewrite/rewriteHandler.c:3956 +#: rewrite/rewriteHandler.c:4021 #, c-format msgid "" "conditional DO INSTEAD rules are not supported for data-modifying statements " @@ -24944,13 +24965,13 @@ "условные правила DO INSTEAD не поддерживаются для операторов, изменяющих " "данные, в WITH" -#: rewrite/rewriteHandler.c:3960 +#: rewrite/rewriteHandler.c:4025 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "" "правила DO ALSO не поддерживаются для операторов, изменяющих данные, в WITH" -#: rewrite/rewriteHandler.c:3965 +#: rewrite/rewriteHandler.c:4030 #, c-format msgid "" "multi-statement DO INSTEAD rules are not supported for data-modifying " @@ -24959,50 +24980,50 @@ "составные правила DO INSTEAD не поддерживаются для операторов, изменяющих " "данные, в WITH" -#: rewrite/rewriteHandler.c:4226 +#: rewrite/rewriteHandler.c:4291 msgid "" "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "" "Представления в сочетании с правилами DO INSTEAD с условиями не обновляются " "автоматически." -#: rewrite/rewriteHandler.c:4324 +#: rewrite/rewriteHandler.c:4389 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "выполнить INSERT RETURNING для отношения \"%s\" нельзя" -#: rewrite/rewriteHandler.c:4326 +#: rewrite/rewriteHandler.c:4391 #, 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:4331 +#: rewrite/rewriteHandler.c:4396 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "выполнить UPDATE RETURNING для отношения \"%s\" нельзя" -#: rewrite/rewriteHandler.c:4333 +#: rewrite/rewriteHandler.c:4398 #, 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:4338 +#: rewrite/rewriteHandler.c:4403 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "выполнить DELETE RETURNING для отношения \"%s\" нельзя" -#: rewrite/rewriteHandler.c:4340 +#: rewrite/rewriteHandler.c:4405 #, 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:4358 +#: rewrite/rewriteHandler.c:4423 #, c-format msgid "" "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or " @@ -25011,7 +25032,7 @@ "INSERT c предложением ON CONFLICT нельзя использовать с таблицей, для " "которой заданы правила INSERT или UPDATE" -#: rewrite/rewriteHandler.c:4415 +#: rewrite/rewriteHandler.c:4480 #, c-format msgid "" "WITH cannot be used in a query that is rewritten by rules into multiple " @@ -25491,7 +25512,7 @@ "Только роли с правами роли, которой принадлежит процесс, или с правами роли " "\"%s\" могут завершить этот процесс." -#: storage/ipc/procsignal.c:416 +#: storage/ipc/procsignal.c:417 #, c-format msgid "still waiting for backend with PID %d to accept ProcSignalBarrier" msgstr "" @@ -25618,13 +25639,13 @@ msgid "recovery finished waiting after %ld.%03d ms: %s" msgstr "процесс восстановления завершил ожидание после %ld.%03d мс: %s" -#: storage/ipc/standby.c:920 tcop/postgres.c:3196 +#: storage/ipc/standby.c:920 tcop/postgres.c:3197 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "" "выполнение оператора отменено из-за конфликта с процессом восстановления" -#: storage/ipc/standby.c:921 tcop/postgres.c:2557 +#: storage/ipc/standby.c:921 tcop/postgres.c:2558 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "" @@ -26219,8 +26240,8 @@ msgid "fastpath function call: \"%s\" (OID %u)" msgstr "вызов функции (через fastpath): \"%s\" (OID %u)" -#: tcop/fastpath.c:313 tcop/postgres.c:1369 tcop/postgres.c:1605 -#: tcop/postgres.c:2071 tcop/postgres.c:2333 +#: tcop/fastpath.c:313 tcop/postgres.c:1370 tcop/postgres.c:1606 +#: tcop/postgres.c:2072 tcop/postgres.c:2334 #, c-format msgid "duration: %s ms" msgstr "продолжительность: %s мс" @@ -26255,44 +26276,44 @@ msgid "incorrect binary data format in function argument %d" msgstr "неправильный формат двоичных данных в аргументе функции %d" -#: tcop/postgres.c:467 tcop/postgres.c:5012 +#: tcop/postgres.c:468 tcop/postgres.c:5016 #, c-format msgid "invalid frontend message type %d" msgstr "неправильный тип клиентского сообщения %d" -#: tcop/postgres.c:1076 +#: tcop/postgres.c:1077 #, c-format msgid "statement: %s" msgstr "оператор: %s" -#: tcop/postgres.c:1374 +#: tcop/postgres.c:1375 #, c-format msgid "duration: %s ms statement: %s" msgstr "продолжительность: %s мс, оператор: %s" -#: tcop/postgres.c:1480 +#: tcop/postgres.c:1481 #, c-format msgid "cannot insert multiple commands into a prepared statement" msgstr "в подготовленный оператор нельзя вставить несколько команд" -#: tcop/postgres.c:1610 +#: tcop/postgres.c:1611 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "продолжительность: %s мс, разбор %s: %s" # [SM]: TO REVIEW -#: tcop/postgres.c:1677 tcop/postgres.c:2653 +#: tcop/postgres.c:1678 tcop/postgres.c:2654 #, c-format msgid "unnamed prepared statement does not exist" msgstr "безымянный подготовленный оператор не существует" -#: tcop/postgres.c:1729 +#: tcop/postgres.c:1730 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "" "неверное число форматов параметров в сообщении Bind (%d, а параметров %d)" -#: tcop/postgres.c:1735 +#: tcop/postgres.c:1736 #, c-format msgid "" "bind message supplies %d parameters, but prepared statement \"%s\" requires " @@ -26301,120 +26322,120 @@ "в сообщении Bind передано неверное число параметров (%d, а подготовленный " "оператор \"%s\" требует %d)" -#: tcop/postgres.c:1949 +#: tcop/postgres.c:1950 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "неверный формат двоичных данных в параметре Bind %d" -#: tcop/postgres.c:2076 +#: tcop/postgres.c:2077 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "продолжительность: %s мс, сообщение Bind %s%s%s: %s" -#: tcop/postgres.c:2131 tcop/postgres.c:2735 +#: tcop/postgres.c:2132 tcop/postgres.c:2736 #, c-format msgid "portal \"%s\" does not exist" msgstr "портал \"%s\" не существует" -#: tcop/postgres.c:2213 +#: tcop/postgres.c:2214 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2215 tcop/postgres.c:2341 +#: tcop/postgres.c:2216 tcop/postgres.c:2342 msgid "execute fetch from" msgstr "выборка из" -#: tcop/postgres.c:2216 tcop/postgres.c:2342 +#: tcop/postgres.c:2217 tcop/postgres.c:2343 msgid "execute" msgstr "выполнение" -#: tcop/postgres.c:2338 +#: tcop/postgres.c:2339 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "продолжительность: %s мс %s %s%s%s: %s" -#: tcop/postgres.c:2486 +#: tcop/postgres.c:2487 #, c-format msgid "prepare: %s" msgstr "подготовка: %s" -#: tcop/postgres.c:2511 +#: tcop/postgres.c:2512 #, c-format msgid "Parameters: %s" msgstr "Параметры: %s" -#: tcop/postgres.c:2526 +#: tcop/postgres.c:2527 #, c-format msgid "Abort reason: recovery conflict" msgstr "Причина прерывания: конфликт при восстановлении" -#: tcop/postgres.c:2542 +#: tcop/postgres.c:2543 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "Пользователь удерживал фиксатор разделяемого буфера слишком долго." -#: tcop/postgres.c:2545 +#: tcop/postgres.c:2546 #, c-format msgid "User was holding a relation lock for too long." msgstr "Пользователь удерживал блокировку таблицы слишком долго." -#: tcop/postgres.c:2548 +#: tcop/postgres.c:2549 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "" "Пользователь использовал табличное пространство, которое должно быть удалено." -#: tcop/postgres.c:2551 +#: tcop/postgres.c:2552 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "" "Запросу пользователя нужно было видеть версии строк, которые должны быть " "удалены." -#: tcop/postgres.c:2554 +#: tcop/postgres.c:2555 #, c-format msgid "User was using a logical replication slot that must be invalidated." msgstr "" "Пользователь использовал слот логической репликации, который должен быть " "аннулирован." -#: tcop/postgres.c:2560 +#: tcop/postgres.c:2561 #, c-format msgid "User was connected to a database that must be dropped." msgstr "Пользователь был подключён к базе данных, которая должна быть удалена." -#: tcop/postgres.c:2599 +#: tcop/postgres.c:2600 #, c-format msgid "portal \"%s\" parameter $%d = %s" msgstr "портал \"%s\", параметр $%d = %s" -#: tcop/postgres.c:2602 +#: tcop/postgres.c:2603 #, c-format msgid "portal \"%s\" parameter $%d" msgstr "портал \"%s\", параметр $%d" -#: tcop/postgres.c:2608 +#: tcop/postgres.c:2609 #, c-format msgid "unnamed portal parameter $%d = %s" msgstr "неименованный портал, параметр $%d = %s" -#: tcop/postgres.c:2611 +#: tcop/postgres.c:2612 #, c-format msgid "unnamed portal parameter $%d" msgstr "неименованный портал, параметр $%d" -#: tcop/postgres.c:2955 +#: tcop/postgres.c:2956 #, c-format msgid "terminating connection because of unexpected SIGQUIT signal" msgstr "закрытие подключения из-за неожиданного сигнала SIGQUIT" -#: tcop/postgres.c:2961 +#: tcop/postgres.c:2962 #, c-format msgid "terminating connection because of crash of another server process" msgstr "закрытие подключения из-за краха другого серверного процесса" -#: tcop/postgres.c:2962 +#: tcop/postgres.c:2963 #, c-format msgid "" "The postmaster has commanded this server process to roll back the current " @@ -26425,7 +26446,7 @@ "транзакцию и завершиться, так как другой серверный процесс завершился " "аварийно и, возможно, разрушил разделяемую память." -#: tcop/postgres.c:2966 tcop/postgres.c:3219 +#: tcop/postgres.c:2967 tcop/postgres.c:3220 #, c-format msgid "" "In a moment you should be able to reconnect to the database and repeat your " @@ -26434,18 +26455,18 @@ "Вы сможете переподключиться к базе данных и повторить вашу команду сию " "минуту." -#: tcop/postgres.c:2973 +#: tcop/postgres.c:2974 #, c-format msgid "terminating connection due to immediate shutdown command" msgstr "" "закрытие подключения вследствие получения команды для немедленного отключения" -#: tcop/postgres.c:3051 +#: tcop/postgres.c:3052 #, c-format msgid "floating-point exception" msgstr "исключение в операции с плавающей точкой" -#: tcop/postgres.c:3052 +#: tcop/postgres.c:3053 #, c-format msgid "" "An invalid floating-point operation was signaled. This probably means an out-" @@ -26455,77 +26476,77 @@ "оказался вне допустимых рамок или произошла ошибка вычисления, например, " "деление на ноль." -#: tcop/postgres.c:3217 +#: tcop/postgres.c:3218 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "закрытие подключения из-за конфликта с процессом восстановления" -#: tcop/postgres.c:3289 +#: tcop/postgres.c:3290 #, c-format msgid "canceling authentication due to timeout" msgstr "отмена проверки подлинности из-за тайм-аута" -#: tcop/postgres.c:3293 +#: tcop/postgres.c:3294 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "прекращение процесса автоочистки по команде администратора" -#: tcop/postgres.c:3297 +#: tcop/postgres.c:3298 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "завершение обработчика логической репликации по команде администратора" -#: tcop/postgres.c:3317 +#: tcop/postgres.c:3318 #, c-format msgid "terminating connection due to administrator command" msgstr "закрытие подключения по команде администратора" -#: tcop/postgres.c:3348 +#: tcop/postgres.c:3349 #, c-format msgid "connection to client lost" msgstr "подключение к клиенту потеряно" -#: tcop/postgres.c:3400 +#: tcop/postgres.c:3401 #, c-format msgid "canceling statement due to lock timeout" msgstr "выполнение оператора отменено из-за тайм-аута блокировки" -#: tcop/postgres.c:3407 +#: tcop/postgres.c:3408 #, c-format msgid "canceling statement due to statement timeout" msgstr "выполнение оператора отменено из-за тайм-аута" -#: tcop/postgres.c:3414 +#: tcop/postgres.c:3415 #, c-format msgid "canceling autovacuum task" msgstr "отмена задачи автоочистки" -#: tcop/postgres.c:3427 +#: tcop/postgres.c:3428 #, c-format msgid "canceling statement due to user request" msgstr "выполнение оператора отменено по запросу пользователя" -#: tcop/postgres.c:3448 +#: tcop/postgres.c:3449 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "закрытие подключения из-за тайм-аута простоя в транзакции" -#: tcop/postgres.c:3461 +#: tcop/postgres.c:3462 #, c-format msgid "terminating connection due to transaction timeout" msgstr "закрытие подключения из-за тайм-аута транзакции" -#: tcop/postgres.c:3474 +#: tcop/postgres.c:3475 #, c-format msgid "terminating connection due to idle-session timeout" msgstr "закрытие подключения из-за тайм-аута простоя сеанса" -#: tcop/postgres.c:3564 +#: tcop/postgres.c:3568 #, c-format msgid "stack depth limit exceeded" msgstr "превышен предел глубины стека" -#: tcop/postgres.c:3565 +#: tcop/postgres.c:3569 #, c-format msgid "" "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), " @@ -26535,12 +26556,12 @@ "КБ), предварительно убедившись, что ОС предоставляет достаточный размер " "стека." -#: tcop/postgres.c:3612 +#: tcop/postgres.c:3616 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "Значение \"max_stack_depth\" не должно превышать %ld КБ." -#: tcop/postgres.c:3614 +#: tcop/postgres.c:3618 #, c-format msgid "" "Increase the platform's stack depth limit via \"ulimit -s\" or local " @@ -26549,20 +26570,20 @@ "Увеличьте предел глубины стека в системе с помощью команды \"ulimit -s\" или " "эквивалента в вашей ОС." -#: tcop/postgres.c:3637 +#: tcop/postgres.c:3641 #, c-format msgid "\"client_connection_check_interval\" must be set to 0 on this platform." msgstr "" "Значение \"client_connection_check_interval\" должно равняться 0 на этой " "платформе." -#: tcop/postgres.c:3658 +#: tcop/postgres.c:3662 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "" "Этот параметр нельзя включить, когда \"log_statement_stats\" равен true." -#: tcop/postgres.c:3673 +#: tcop/postgres.c:3677 #, c-format msgid "" "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", " @@ -26572,49 +26593,49 @@ "\"log_parser_stats\", \"log_planner_stats\" или \"log_executor_stats\" равны " "true." -#: tcop/postgres.c:4098 +#: tcop/postgres.c:4102 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "неверный аргумент командной строки для серверного процесса: %s" -#: tcop/postgres.c:4099 tcop/postgres.c:4105 +#: tcop/postgres.c:4103 tcop/postgres.c:4109 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Для дополнительной информации попробуйте \"%s --help\"." -#: tcop/postgres.c:4103 +#: tcop/postgres.c:4107 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: неверный аргумент командной строки: %s" -#: tcop/postgres.c:4156 +#: tcop/postgres.c:4160 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: не указаны ни база данных, ни пользователь" -#: tcop/postgres.c:4909 +#: tcop/postgres.c:4913 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "неверный подтип сообщения CLOSE: %d" -#: tcop/postgres.c:4946 +#: tcop/postgres.c:4950 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "неверный подтип сообщения DESCRIBE: %d" -#: tcop/postgres.c:5033 +#: tcop/postgres.c:5037 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "" "вызовы функций через fastpath не поддерживаются для реплицирующих соединений" -#: tcop/postgres.c:5037 +#: tcop/postgres.c:5041 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "" "протокол расширенных запросов не поддерживается для реплицирующих соединений" -#: tcop/postgres.c:5217 +#: tcop/postgres.c:5221 #, c-format msgid "" "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s " @@ -26811,12 +26832,12 @@ msgstr "отсутствует параметр Dictionary" #: tsearch/spell.c:383 tsearch/spell.c:400 tsearch/spell.c:409 -#: tsearch/spell.c:1040 +#: tsearch/spell.c:1052 #, c-format msgid "invalid affix flag \"%s\"" msgstr "неверный флаг аффиксов \"%s\"" -#: tsearch/spell.c:387 tsearch/spell.c:1044 +#: tsearch/spell.c:387 tsearch/spell.c:1056 #, c-format msgid "affix flag \"%s\" is out of range" msgstr "флаг аффикса \"%s\" вне диапазона" @@ -26841,24 +26862,24 @@ msgid "invalid regular expression: %s" msgstr "неверное регулярное выражение: %s" -#: tsearch/spell.c:962 tsearch/spell.c:978 tsearch/spell.c:994 -#: tsearch/spell.c:1010 tsearch/spell.c:1075 gram.y:18742 gram.y:18759 +#: tsearch/spell.c:971 tsearch/spell.c:988 tsearch/spell.c:1005 +#: tsearch/spell.c:1022 tsearch/spell.c:1087 gram.y:18742 gram.y:18759 #, c-format msgid "syntax error" msgstr "ошибка синтаксиса" -#: tsearch/spell.c:1167 tsearch/spell.c:1179 tsearch/spell.c:1739 -#: tsearch/spell.c:1744 tsearch/spell.c:1749 +#: tsearch/spell.c:1181 tsearch/spell.c:1193 tsearch/spell.c:1753 +#: tsearch/spell.c:1758 tsearch/spell.c:1763 #, c-format msgid "invalid affix alias \"%s\"" msgstr "неверное указание аффикса \"%s\"" -#: tsearch/spell.c:1220 tsearch/spell.c:1291 tsearch/spell.c:1440 +#: tsearch/spell.c:1234 tsearch/spell.c:1305 tsearch/spell.c:1454 #, c-format msgid "could not open affix file \"%s\": %m" msgstr "не удалось открыть файл аффиксов \"%s\": %m" -#: tsearch/spell.c:1274 +#: tsearch/spell.c:1288 #, c-format msgid "" "Ispell dictionary supports only \"default\", \"long\", and \"num\" flag " @@ -26867,17 +26888,17 @@ "словарь Ispell поддерживает для флага только значения \"default\", \"long\" " "и \"num\"" -#: tsearch/spell.c:1318 +#: tsearch/spell.c:1332 #, c-format msgid "invalid number of flag vector aliases" msgstr "неверное количество векторов флагов" -#: tsearch/spell.c:1341 +#: tsearch/spell.c:1355 #, c-format msgid "number of aliases exceeds specified number %d" msgstr "количество псевдонимов превышает заданное число %d" -#: tsearch/spell.c:1555 +#: tsearch/spell.c:1569 #, c-format msgid "affix file contains both old-style and new-style commands" msgstr "файл аффиксов содержит команды и в старом, и в новом стиле" @@ -27110,20 +27131,20 @@ msgid "must be able to SET ROLE \"%s\"" msgstr "нужны права для выполнения SET ROLE \"%s\"" -#: utils/adt/array_userfuncs.c:102 utils/adt/array_userfuncs.c:489 -#: utils/adt/array_userfuncs.c:866 utils/adt/json.c:602 utils/adt/json.c:740 +#: utils/adt/array_userfuncs.c:103 utils/adt/array_userfuncs.c:490 +#: utils/adt/array_userfuncs.c:867 utils/adt/json.c:602 utils/adt/json.c:740 #: utils/adt/json.c:790 utils/adt/jsonb.c:1025 utils/adt/jsonb.c:1098 #: utils/adt/jsonb.c:1530 utils/adt/jsonb.c:1718 utils/adt/jsonb.c:1728 #, c-format msgid "could not determine input data type" msgstr "не удалось определить тип входных данных" -#: utils/adt/array_userfuncs.c:107 +#: utils/adt/array_userfuncs.c:108 #, c-format msgid "input data type is not an array" msgstr "тип входных данных не является массивом" -#: utils/adt/array_userfuncs.c:151 utils/adt/array_userfuncs.c:203 +#: utils/adt/array_userfuncs.c:152 utils/adt/array_userfuncs.c:204 #: utils/adt/float.c:1222 utils/adt/float.c:1296 utils/adt/float.c:4022 #: utils/adt/float.c:4060 utils/adt/int.c:807 utils/adt/int.c:829 #: utils/adt/int.c:843 utils/adt/int.c:857 utils/adt/int.c:888 @@ -27139,58 +27160,63 @@ msgid "integer out of range" msgstr "целое вне диапазона" -#: utils/adt/array_userfuncs.c:158 utils/adt/array_userfuncs.c:213 +#: utils/adt/array_userfuncs.c:159 utils/adt/array_userfuncs.c:214 #, c-format msgid "argument must be empty or one-dimensional array" msgstr "аргумент должен быть одномерным массивом или пустым" -#: utils/adt/array_userfuncs.c:295 utils/adt/array_userfuncs.c:334 -#: utils/adt/array_userfuncs.c:371 utils/adt/array_userfuncs.c:400 -#: utils/adt/array_userfuncs.c:428 +#: utils/adt/array_userfuncs.c:296 utils/adt/array_userfuncs.c:335 +#: utils/adt/array_userfuncs.c:372 utils/adt/array_userfuncs.c:401 +#: utils/adt/array_userfuncs.c:429 #, c-format msgid "cannot concatenate incompatible arrays" msgstr "соединять несовместимые массивы нельзя" -#: utils/adt/array_userfuncs.c:296 +#: utils/adt/array_userfuncs.c:297 #, c-format msgid "" "Arrays with element types %s and %s are not compatible for concatenation." msgstr "Массивы с элементами типов %s и %s несовместимы для соединения." -#: utils/adt/array_userfuncs.c:335 +#: utils/adt/array_userfuncs.c:336 #, c-format msgid "Arrays of %d and %d dimensions are not compatible for concatenation." msgstr "Массивы с размерностями %d и %d несовместимы для соединения." -#: utils/adt/array_userfuncs.c:372 +#: utils/adt/array_userfuncs.c:373 #, c-format msgid "" "Arrays with differing element dimensions are not compatible for " "concatenation." msgstr "Массивы с разными размерностями элементов несовместимы для соединения." -#: utils/adt/array_userfuncs.c:401 utils/adt/array_userfuncs.c:429 +#: utils/adt/array_userfuncs.c:402 utils/adt/array_userfuncs.c:430 #, c-format msgid "Arrays with differing dimensions are not compatible for concatenation." msgstr "Массивы с разными размерностями несовместимы для соединения." -#: utils/adt/array_userfuncs.c:975 utils/adt/array_userfuncs.c:983 +#: utils/adt/array_userfuncs.c:977 utils/adt/array_userfuncs.c:985 #: utils/adt/arrayfuncs.c:5622 utils/adt/arrayfuncs.c:5628 #, c-format msgid "cannot accumulate arrays of different dimensionality" msgstr "аккумулировать массивы различной размерности нельзя" -#: utils/adt/array_userfuncs.c:1272 utils/adt/array_userfuncs.c:1426 +#: utils/adt/array_userfuncs.c:997 +#, c-format +msgid "array size exceeds the maximum allowed (%zu)" +msgstr "размер массива превышает предел (%zu)" + +#: utils/adt/array_userfuncs.c:1281 utils/adt/array_userfuncs.c:1435 #, c-format msgid "searching for elements in multidimensional arrays is not supported" msgstr "поиск элементов в многомерных массивах не поддерживается" -#: utils/adt/array_userfuncs.c:1301 +#: utils/adt/array_userfuncs.c:1310 #, c-format msgid "initial position must not be null" msgstr "начальная позиция не может быть NULL" -#: utils/adt/array_userfuncs.c:1674 +#: utils/adt/array_userfuncs.c:1683 #, c-format msgid "sample size must be between 0 and %d" msgstr "размер выборки должен задаваться числом от 0 до %d" @@ -27313,7 +27339,7 @@ "(%s)" #: utils/adt/arrayfuncs.c:1378 utils/adt/multirangetypes.c:450 -#: utils/adt/rangetypes.c:351 utils/cache/lsyscache.c:2958 +#: utils/adt/rangetypes.c:351 utils/cache/lsyscache.c:2996 #, c-format msgid "no binary input function available for type %s" msgstr "для типа %s нет функции ввода двоичных данных" @@ -27324,7 +27350,7 @@ msgstr "неподходящий двоичный формат в элементе массива %d" #: utils/adt/arrayfuncs.c:1588 utils/adt/multirangetypes.c:455 -#: utils/adt/rangetypes.c:356 utils/cache/lsyscache.c:2991 +#: utils/adt/rangetypes.c:356 utils/cache/lsyscache.c:3029 #, c-format msgid "no binary output function available for type %s" msgstr "для типа %s нет функции вывода двоичных данных" @@ -27566,9 +27592,9 @@ msgid "TIME(%d)%s precision reduced to maximum allowed, %d" msgstr "TIME(%d)%s: точность уменьшена до дозволенного максимума: %d" -#: utils/adt/date.c:167 utils/adt/date.c:175 utils/adt/formatting.c:4424 -#: utils/adt/formatting.c:4433 utils/adt/formatting.c:4538 -#: utils/adt/formatting.c:4548 +#: utils/adt/date.c:167 utils/adt/date.c:175 utils/adt/formatting.c:4426 +#: utils/adt/formatting.c:4435 utils/adt/formatting.c:4540 +#: utils/adt/formatting.c:4550 #, c-format msgid "date out of range: \"%s\"" msgstr "дата вне диапазона: \"%s\"" @@ -27623,8 +27649,8 @@ #: utils/adt/date.c:1314 utils/adt/date.c:1360 utils/adt/date.c:1919 #: utils/adt/date.c:1950 utils/adt/date.c:1979 utils/adt/date.c:2869 #: utils/adt/date.c:3101 utils/adt/datetime.c:422 utils/adt/datetime.c:1807 -#: utils/adt/formatting.c:4269 utils/adt/formatting.c:4305 -#: utils/adt/formatting.c:4392 utils/adt/formatting.c:4514 utils/adt/json.c:366 +#: utils/adt/formatting.c:4271 utils/adt/formatting.c:4307 +#: utils/adt/formatting.c:4394 utils/adt/formatting.c:4516 utils/adt/json.c:366 #: utils/adt/json.c:405 utils/adt/timestamp.c:248 utils/adt/timestamp.c:280 #: utils/adt/timestamp.c:716 utils/adt/timestamp.c:725 #: utils/adt/timestamp.c:803 utils/adt/timestamp.c:836 @@ -27654,7 +27680,7 @@ msgid "timestamp out of range" msgstr "timestamp вне диапазона" -#: utils/adt/date.c:1536 utils/adt/date.c:2352 utils/adt/formatting.c:4597 +#: utils/adt/date.c:1536 utils/adt/date.c:2352 utils/adt/formatting.c:4599 #, c-format msgid "time out of range" msgstr "время вне диапазона" @@ -27948,106 +27974,106 @@ msgid "Intervals are not tied to specific calendar dates." msgstr "Интервалы не привязываются к определённым календарным датам." -#: utils/adt/formatting.c:1161 +#: utils/adt/formatting.c:1163 #, c-format msgid "\"EEEE\" must be the last pattern used" msgstr "\"EEEE\" может быть только последним шаблоном" -#: utils/adt/formatting.c:1169 +#: utils/adt/formatting.c:1171 #, c-format msgid "\"9\" must be ahead of \"PR\"" msgstr "\"9\" должна стоять до \"PR\"" -#: utils/adt/formatting.c:1185 +#: utils/adt/formatting.c:1187 #, c-format msgid "\"0\" must be ahead of \"PR\"" msgstr "\"0\" должен стоять до \"PR\"" -#: utils/adt/formatting.c:1212 +#: utils/adt/formatting.c:1214 #, c-format msgid "multiple decimal points" msgstr "многочисленные десятичные точки" -#: utils/adt/formatting.c:1216 utils/adt/formatting.c:1299 +#: utils/adt/formatting.c:1218 utils/adt/formatting.c:1301 #, c-format msgid "cannot use \"V\" and decimal point together" msgstr "нельзя использовать \"V\" вместе с десятичной точкой" -#: utils/adt/formatting.c:1228 +#: utils/adt/formatting.c:1230 #, c-format msgid "cannot use \"S\" twice" msgstr "нельзя использовать \"S\" дважды" -#: utils/adt/formatting.c:1232 +#: utils/adt/formatting.c:1234 #, c-format msgid "cannot use \"S\" and \"PL\"/\"MI\"/\"SG\"/\"PR\" together" msgstr "нельзя использовать \"S\" вместе с \"PL\"/\"MI\"/\"SG\"/\"PR\"" -#: utils/adt/formatting.c:1252 +#: utils/adt/formatting.c:1254 #, c-format msgid "cannot use \"S\" and \"MI\" together" msgstr "нельзя использовать \"S\" вместе с \"MI\"" -#: utils/adt/formatting.c:1262 +#: utils/adt/formatting.c:1264 #, c-format msgid "cannot use \"S\" and \"PL\" together" msgstr "нельзя использовать \"S\" вместе с \"PL\"" -#: utils/adt/formatting.c:1272 +#: utils/adt/formatting.c:1274 #, c-format msgid "cannot use \"S\" and \"SG\" together" msgstr "нельзя использовать \"S\" вместе с \"SG\"" -#: utils/adt/formatting.c:1281 +#: utils/adt/formatting.c:1283 #, c-format msgid "cannot use \"PR\" and \"S\"/\"PL\"/\"MI\"/\"SG\" together" msgstr "нельзя использовать \"PR\" вместе с \"S\"/\"PL\"/\"MI\"/\"SG\"" -#: utils/adt/formatting.c:1307 +#: utils/adt/formatting.c:1309 #, c-format msgid "cannot use \"EEEE\" twice" msgstr "нельзя использовать \"EEEE\" дважды" -#: utils/adt/formatting.c:1313 +#: utils/adt/formatting.c:1315 #, c-format msgid "\"EEEE\" is incompatible with other formats" msgstr "\"EEEE\" несовместим с другими форматами" -#: utils/adt/formatting.c:1314 +#: utils/adt/formatting.c:1316 #, c-format msgid "" "\"EEEE\" may only be used together with digit and decimal point patterns." msgstr "" "\"EEEE\" может использоваться только с шаблонами цифр и десятичной точки." -#: utils/adt/formatting.c:1398 +#: utils/adt/formatting.c:1400 #, c-format msgid "invalid datetime format separator: \"%s\"" msgstr "неверный разделитель в формате datetime: \"%s\"" -#: utils/adt/formatting.c:1525 +#: utils/adt/formatting.c:1527 #, c-format msgid "\"%s\" is not a number" msgstr "\"%s\" не является числом" -#: utils/adt/formatting.c:1603 +#: utils/adt/formatting.c:1605 #, c-format msgid "case conversion failed: %s" msgstr "преобразовать регистр не удалось: %s" -#: utils/adt/formatting.c:1651 utils/adt/formatting.c:1799 -#: utils/adt/formatting.c:1989 +#: utils/adt/formatting.c:1653 utils/adt/formatting.c:1801 +#: utils/adt/formatting.c:1991 #, c-format msgid "could not determine which collation to use for %s function" msgstr "" "не удалось определить, какое правило сортировки использовать для функции %s" -#: utils/adt/formatting.c:2410 +#: utils/adt/formatting.c:2412 #, c-format msgid "invalid combination of date conventions" msgstr "неверное сочетание стилей дат" -#: utils/adt/formatting.c:2411 +#: utils/adt/formatting.c:2413 #, c-format msgid "" "Do not mix Gregorian and ISO week date conventions in a formatting template." @@ -28055,27 +28081,27 @@ "Не смешивайте Григорианский стиль дат (недель) с ISO в одном шаблоне " "форматирования." -#: utils/adt/formatting.c:2433 +#: utils/adt/formatting.c:2435 #, c-format msgid "conflicting values for \"%s\" field in formatting string" msgstr "конфликтующие значения поля \"%s\" в строке форматирования" -#: utils/adt/formatting.c:2435 +#: utils/adt/formatting.c:2437 #, c-format msgid "This value contradicts a previous setting for the same field type." msgstr "Это значение противоречит предыдущему значению поля того же типа." -#: utils/adt/formatting.c:2502 +#: utils/adt/formatting.c:2504 #, c-format msgid "source string too short for \"%s\" formatting field" msgstr "входная строка короче, чем требует поле форматирования \"%s\"" -#: utils/adt/formatting.c:2504 +#: utils/adt/formatting.c:2506 #, c-format msgid "Field requires %d characters, but only %d remain." msgstr "Требуется символов: %d, а осталось только %d." -#: utils/adt/formatting.c:2506 utils/adt/formatting.c:2520 +#: utils/adt/formatting.c:2508 utils/adt/formatting.c:2522 #, c-format msgid "" "If your source string is not fixed-width, try using the \"FM\" modifier." @@ -28083,132 +28109,132 @@ "Если входная строка имеет переменную длину, попробуйте использовать " "модификатор \"FM\"." -#: utils/adt/formatting.c:2516 utils/adt/formatting.c:2529 -#: utils/adt/formatting.c:2750 utils/adt/formatting.c:3650 +#: utils/adt/formatting.c:2518 utils/adt/formatting.c:2531 +#: utils/adt/formatting.c:2752 utils/adt/formatting.c:3652 #, c-format msgid "invalid value \"%s\" for \"%s\"" msgstr "неверное значение \"%s\" для \"%s\"" -#: utils/adt/formatting.c:2518 +#: utils/adt/formatting.c:2520 #, c-format msgid "Field requires %d characters, but only %d could be parsed." msgstr "Поле должно поглотить символов: %d, но удалось разобрать только %d." -#: utils/adt/formatting.c:2531 +#: utils/adt/formatting.c:2533 #, c-format msgid "Value must be an integer." msgstr "Значение должно быть целым числом." -#: utils/adt/formatting.c:2536 +#: utils/adt/formatting.c:2538 #, c-format msgid "value for \"%s\" in source string is out of range" msgstr "значение \"%s\" во входной строке вне диапазона" -#: utils/adt/formatting.c:2538 +#: utils/adt/formatting.c:2540 #, c-format msgid "Value must be in the range %d to %d." msgstr "Значение должно быть в интервале %d..%d." -#: utils/adt/formatting.c:2752 +#: utils/adt/formatting.c:2754 #, c-format msgid "The given value did not match any of the allowed values for this field." msgstr "" "Данное значение не соответствует ни одному из допустимых значений для этого " "поля." -#: utils/adt/formatting.c:2968 utils/adt/formatting.c:2988 -#: utils/adt/formatting.c:3008 utils/adt/formatting.c:3028 -#: utils/adt/formatting.c:3047 utils/adt/formatting.c:3066 -#: utils/adt/formatting.c:3090 utils/adt/formatting.c:3108 -#: utils/adt/formatting.c:3126 utils/adt/formatting.c:3144 -#: utils/adt/formatting.c:3161 utils/adt/formatting.c:3178 +#: utils/adt/formatting.c:2970 utils/adt/formatting.c:2990 +#: utils/adt/formatting.c:3010 utils/adt/formatting.c:3030 +#: utils/adt/formatting.c:3049 utils/adt/formatting.c:3068 +#: utils/adt/formatting.c:3092 utils/adt/formatting.c:3110 +#: utils/adt/formatting.c:3128 utils/adt/formatting.c:3146 +#: utils/adt/formatting.c:3163 utils/adt/formatting.c:3180 #, c-format msgid "localized string format value too long" msgstr "слишком длинное значение формата локализованной строки" -#: utils/adt/formatting.c:3458 +#: utils/adt/formatting.c:3460 #, c-format msgid "unmatched format separator \"%c\"" msgstr "нет соответствия для заданного в формате разделителя \"%c\"" -#: utils/adt/formatting.c:3519 +#: utils/adt/formatting.c:3521 #, c-format msgid "unmatched format character \"%s\"" msgstr "нет соответствия для заданного в формате символа \"%s\"" -#: utils/adt/formatting.c:3652 +#: utils/adt/formatting.c:3654 #, c-format msgid "Time zone abbreviation is not recognized." msgstr "Сокращённое название часового пояса не распознано." -#: utils/adt/formatting.c:3853 +#: utils/adt/formatting.c:3855 #, c-format msgid "invalid input string for \"Y,YYY\"" msgstr "ошибка синтаксиса в значении для шаблона \"Y,YYY\"" -#: utils/adt/formatting.c:3942 +#: utils/adt/formatting.c:3944 #, c-format msgid "input string is too short for datetime format" msgstr "входная строка короче, чем требует формат datetime" -#: utils/adt/formatting.c:3950 +#: utils/adt/formatting.c:3952 #, c-format msgid "trailing characters remain in input string after datetime format" msgstr "" "после разбора формата datetime во входной строке остались дополнительные " "символы" -#: utils/adt/formatting.c:4494 +#: utils/adt/formatting.c:4496 #, c-format msgid "missing time zone in input string for type timestamptz" msgstr "во входной строке для типа timestamptz нет указания часового пояса" -#: utils/adt/formatting.c:4500 +#: utils/adt/formatting.c:4502 #, c-format msgid "timestamptz out of range" msgstr "значение timestamptz вне диапазона" -#: utils/adt/formatting.c:4528 +#: utils/adt/formatting.c:4530 #, c-format msgid "datetime format is zoned but not timed" msgstr "в формате datetime указан часовой пояс, но отсутствует время" -#: utils/adt/formatting.c:4577 +#: utils/adt/formatting.c:4579 #, c-format msgid "missing time zone in input string for type timetz" msgstr "во входной строке для типа timetz нет указания часового пояса" -#: utils/adt/formatting.c:4583 +#: utils/adt/formatting.c:4585 #, c-format msgid "timetz out of range" msgstr "значение timetz вне диапазона" -#: utils/adt/formatting.c:4609 +#: utils/adt/formatting.c:4611 #, c-format msgid "datetime format is not dated and not timed" msgstr "в формате datetime нет ни даты, ни времени" -#: utils/adt/formatting.c:4786 +#: utils/adt/formatting.c:4788 #, c-format msgid "hour \"%d\" is invalid for the 12-hour clock" msgstr "час \"%d\" не соответствует 12-часовому формату времени" -#: utils/adt/formatting.c:4788 +#: utils/adt/formatting.c:4790 #, c-format msgid "Use the 24-hour clock, or give an hour between 1 and 12." msgstr "Используйте 24-часовой формат или передавайте часы от 1 до 12." -#: utils/adt/formatting.c:4900 +#: utils/adt/formatting.c:4902 #, c-format msgid "cannot calculate day of year without year information" msgstr "нельзя рассчитать день года без информации о годе" -#: utils/adt/formatting.c:5854 +#: utils/adt/formatting.c:5867 #, c-format msgid "\"EEEE\" not supported for input" msgstr "\"EEEE\" не поддерживается при вводе" -#: utils/adt/formatting.c:5866 +#: utils/adt/formatting.c:5879 #, c-format msgid "\"RN\" not supported for input" msgstr "\"RN\" не поддерживается при вводе" @@ -29444,25 +29470,25 @@ msgstr "" "не удалось открыть сортировщик для локали \"%s\" с правилами \"%s\": %s" -#: utils/adt/pg_locale.c:1521 utils/adt/pg_locale.c:2995 -#: utils/adt/pg_locale.c:3068 +#: utils/adt/pg_locale.c:1524 utils/adt/pg_locale.c:3001 +#: utils/adt/pg_locale.c:3074 #, c-format msgid "ICU is not supported in this build" msgstr "ICU не поддерживается в данной сборке" -#: utils/adt/pg_locale.c:1549 +#: utils/adt/pg_locale.c:1552 #, c-format msgid "could not create locale \"%s\": %m" msgstr "не удалось создать локаль \"%s\": %m" -#: utils/adt/pg_locale.c:1552 +#: utils/adt/pg_locale.c:1555 #, c-format msgid "" "The operating system could not find any locale data for the locale name " "\"%s\"." msgstr "Операционная система не может найти данные локали с именем \"%s\"." -#: utils/adt/pg_locale.c:1673 +#: utils/adt/pg_locale.c:1676 #, c-format msgid "" "collations with different collate and ctype values are not supported on this " @@ -29471,17 +29497,17 @@ "правила сортировки с разными значениями collate и ctype не поддерживаются на " "этой платформе" -#: utils/adt/pg_locale.c:1720 +#: utils/adt/pg_locale.c:1723 #, c-format msgid "collation \"%s\" has no actual version, but a version was recorded" msgstr "для правила сортировки \"%s\", лишённого версии, была записана версия" -#: utils/adt/pg_locale.c:1726 +#: utils/adt/pg_locale.c:1729 #, c-format msgid "collation \"%s\" has version mismatch" msgstr "несовпадение версии для правила сортировки \"%s\"" -#: utils/adt/pg_locale.c:1728 +#: utils/adt/pg_locale.c:1731 #, c-format msgid "" "The collation in the database was created using version %s, but the " @@ -29490,7 +29516,7 @@ "Правило сортировки в базе данных было создано с версией %s, но операционная " "система предоставляет версию %s." -#: utils/adt/pg_locale.c:1731 +#: utils/adt/pg_locale.c:1734 #, c-format msgid "" "Rebuild all objects affected by this collation and run ALTER COLLATION %s " @@ -29500,98 +29526,98 @@ "ALTER COLLATION %s REFRESH VERSION либо соберите PostgreSQL с правильной " "версией библиотеки." -#: utils/adt/pg_locale.c:1775 utils/adt/pg_locale.c:2559 -#: utils/adt/pg_locale.c:2584 +#: utils/adt/pg_locale.c:1778 utils/adt/pg_locale.c:2565 +#: utils/adt/pg_locale.c:2590 #, c-format msgid "invalid locale name \"%s\" for builtin provider" msgstr "неверное имя локали \"%s\" для встроенного провайдера" -#: utils/adt/pg_locale.c:1817 +#: utils/adt/pg_locale.c:1820 #, c-format msgid "could not load locale \"%s\"" msgstr "не удалось загрузить локаль \"%s\"" -#: utils/adt/pg_locale.c:1842 +#: utils/adt/pg_locale.c:1845 #, c-format msgid "could not get collation version for locale \"%s\": error code %lu" msgstr "" "не удалось получить версию правила сортировки для локали \"%s\" (код ошибки: " "%lu)" -#: utils/adt/pg_locale.c:1898 utils/adt/pg_locale.c:1911 +#: utils/adt/pg_locale.c:1901 utils/adt/pg_locale.c:1914 #, c-format msgid "could not convert string to UTF-16: error code %lu" msgstr "не удалось преобразовать строку в UTF-16 (код ошибки: %lu)" -#: utils/adt/pg_locale.c:1923 +#: utils/adt/pg_locale.c:1926 #, c-format msgid "could not compare Unicode strings: %m" msgstr "не удалось сравнить строки в Unicode: %m" -#: utils/adt/pg_locale.c:2097 +#: utils/adt/pg_locale.c:2100 #, c-format msgid "collation failed: %s" msgstr "ошибка в библиотеке сортировки: %s" -#: utils/adt/pg_locale.c:2316 utils/adt/pg_locale.c:2348 +#: utils/adt/pg_locale.c:2319 utils/adt/pg_locale.c:2354 #, c-format msgid "sort key generation failed: %s" msgstr "не удалось сгенерировать ключ сортировки: %s" -#: utils/adt/pg_locale.c:2638 +#: utils/adt/pg_locale.c:2644 #, c-format msgid "could not get language from locale \"%s\": %s" msgstr "не удалось определить язык для локали \"%s\": %s" -#: utils/adt/pg_locale.c:2659 utils/adt/pg_locale.c:2675 +#: utils/adt/pg_locale.c:2665 utils/adt/pg_locale.c:2681 #, c-format msgid "could not open collator for locale \"%s\": %s" msgstr "не удалось открыть сортировщик для локали \"%s\": %s" -#: utils/adt/pg_locale.c:2700 +#: utils/adt/pg_locale.c:2706 #, c-format msgid "encoding \"%s\" not supported by ICU" msgstr "ICU не поддерживает кодировку \"%s\"" -#: utils/adt/pg_locale.c:2707 +#: utils/adt/pg_locale.c:2713 #, c-format msgid "could not open ICU converter for encoding \"%s\": %s" msgstr "не удалось открыть преобразователь ICU для кодировки \"%s\": %s" -#: utils/adt/pg_locale.c:2725 utils/adt/pg_locale.c:2744 -#: utils/adt/pg_locale.c:2800 utils/adt/pg_locale.c:2811 +#: utils/adt/pg_locale.c:2731 utils/adt/pg_locale.c:2750 +#: utils/adt/pg_locale.c:2806 utils/adt/pg_locale.c:2817 #, c-format msgid "%s failed: %s" msgstr "ошибка %s: %s" -#: utils/adt/pg_locale.c:2986 +#: utils/adt/pg_locale.c:2992 #, c-format msgid "could not convert locale name \"%s\" to language tag: %s" msgstr "не удалось получить из названия локали \"%s\" метку языка: %s" -#: utils/adt/pg_locale.c:3027 +#: utils/adt/pg_locale.c:3033 #, c-format msgid "could not get language from ICU locale \"%s\": %s" msgstr "не удалось определить язык для локали ICU \"%s\": %s" -#: utils/adt/pg_locale.c:3029 utils/adt/pg_locale.c:3058 +#: utils/adt/pg_locale.c:3035 utils/adt/pg_locale.c:3064 #, c-format msgid "To disable ICU locale validation, set the parameter \"%s\" to \"%s\"." msgstr "" "Чтобы отключить проверку локалей ICU, установите для параметра \"%s\" " "значение \"%s\"." -#: utils/adt/pg_locale.c:3056 +#: utils/adt/pg_locale.c:3062 #, c-format msgid "ICU locale \"%s\" has unknown language \"%s\"" msgstr "для локали ICU \"%s\" получен неизвестный язык \"%s\"" -#: utils/adt/pg_locale.c:3207 +#: utils/adt/pg_locale.c:3213 #, c-format msgid "invalid multibyte character for locale" msgstr "неверный многобайтный символ для локали" -#: utils/adt/pg_locale.c:3208 +#: utils/adt/pg_locale.c:3214 #, c-format msgid "" "The server's LC_CTYPE locale is probably incompatible with the database " @@ -30690,23 +30716,23 @@ msgid "more than one value returned by column XPath expression" msgstr "выражение XPath, отбирающее столбец, возвратило более одного значения" -#: utils/cache/lsyscache.c:1017 +#: utils/cache/lsyscache.c:1055 #, c-format msgid "cast from type %s to type %s does not exist" msgstr "приведение типа %s к типу %s не существует" -#: utils/cache/lsyscache.c:2887 utils/cache/lsyscache.c:2920 -#: utils/cache/lsyscache.c:2953 utils/cache/lsyscache.c:2986 +#: utils/cache/lsyscache.c:2925 utils/cache/lsyscache.c:2958 +#: utils/cache/lsyscache.c:2991 utils/cache/lsyscache.c:3024 #, c-format msgid "type %s is only a shell" msgstr "тип %s является пустышкой" -#: utils/cache/lsyscache.c:2892 +#: utils/cache/lsyscache.c:2930 #, c-format msgid "no input function available for type %s" msgstr "для типа %s нет функции ввода" -#: utils/cache/lsyscache.c:2925 +#: utils/cache/lsyscache.c:2963 #, c-format msgid "no output function available for type %s" msgstr "для типа %s нет функции вывода" @@ -34762,8 +34788,8 @@ #: utils/sort/tuplestore.c:518 utils/sort/tuplestore.c:528 #: utils/sort/tuplestore.c:869 utils/sort/tuplestore.c:973 #: utils/sort/tuplestore.c:1037 utils/sort/tuplestore.c:1054 -#: utils/sort/tuplestore.c:1256 utils/sort/tuplestore.c:1321 -#: utils/sort/tuplestore.c:1330 +#: utils/sort/tuplestore.c:1268 utils/sort/tuplestore.c:1333 +#: utils/sort/tuplestore.c:1342 #, c-format msgid "could not seek in tuplestore temporary file" msgstr "не удалось переместиться во временном файле хранилища кортежей" @@ -35473,6 +35499,17 @@ msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "Используйте для записи спецсимволов синтаксис спецстрок E'\\r\\n'." +#, c-format +#~ msgid "aborting startup due to startup process failure" +#~ msgstr "прерывание запуска из-за ошибки в стартовом процессе" + +#, c-format +#~ msgid "" +#~ "cannot synchronize replication slots when standby promotion is ongoing" +#~ msgstr "" +#~ "синхронизировать слоты репликации, когда выполняется повышение резервного " +#~ "сервера, нельзя" + #, fuzzy, c-format #~ msgid "" #~ "replication slot synchronization worker is shutting down on receiving " diff -Nru postgresql-17-17.9/src/backend/postmaster/postmaster.c postgresql-17-17.10/src/backend/postmaster/postmaster.c --- postgresql-17-17.9/src/backend/postmaster/postmaster.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/postmaster/postmaster.c 2026-05-11 19:46:41.000000000 +0000 @@ -284,12 +284,13 @@ * * When the startup process is ready to start archive recovery, it signals the * postmaster, and we switch to PM_RECOVERY state. The background writer and - * checkpointer are launched, while the startup process continues applying WAL. - * If Hot Standby is enabled, then, after reaching a consistent point in WAL - * redo, startup process signals us again, and we switch to PM_HOT_STANDBY - * state and begin accepting connections to perform read-only queries. When - * archive recovery is finished, the startup process exits with exit code 0 - * and we switch to PM_RUN state. + * checkpointer are already running (as these are launched during PM_STARTUP), + * and the startup process continues applying WAL. If Hot Standby is enabled, + * then, after reaching a consistent point in WAL redo, startup process + * signals us again, and we switch to PM_HOT_STANDBY state and begin accepting + * connections to perform read-only queries. When archive recovery is + * finished, the startup process exits with exit code 0 and we switch to + * PM_RUN state. * * Normal child backends can only be launched when we are in PM_RUN or * PM_HOT_STANDBY state. (connsAllowed can also restrict launching.) @@ -2398,29 +2399,13 @@ } /* - * Unexpected exit of startup process (including FATAL exit) - * during PM_STARTUP is treated as catastrophic. There are no - * other processes running yet, so we can just exit. - */ - if (pmState == PM_STARTUP && - StartupStatus != STARTUP_SIGNALED && - !EXIT_STATUS_0(exitstatus)) - { - LogChildExit(LOG, _("startup process"), - pid, exitstatus); - ereport(LOG, - (errmsg("aborting startup due to startup process failure"))); - ExitPostmaster(1); - } - - /* - * After PM_STARTUP, any unexpected exit (including FATAL exit) of - * the startup process is catastrophic, so kill other children, - * and set StartupStatus so we don't try to reinitialize after - * they're gone. Exception: if StartupStatus is STARTUP_SIGNALED, - * then we previously sent the startup process a SIGQUIT; so - * that's probably the reason it died, and we do want to try to - * restart in that case. + * Any unexpected exit (including FATAL exit) of the startup + * process is catastrophic, so kill other children, and set + * StartupStatus so we don't try to reinitialize after they're + * gone. Exception: if StartupStatus is STARTUP_SIGNALED, then we + * previously sent the startup process a SIGQUIT; so that's + * probably the reason it died, and we do want to try to restart + * in that case. * * This stanza also handles the case where we sent a SIGQUIT * during PM_STARTUP due to some dead_end child crashing: in that @@ -3042,7 +3027,8 @@ FatalError = true; /* We now transit into a state of waiting for children to die */ - if (pmState == PM_RECOVERY || + if (pmState == PM_STARTUP || + pmState == PM_RECOVERY || pmState == PM_HOT_STANDBY || pmState == PM_RUN || pmState == PM_STOP_BACKENDS || diff -Nru postgresql-17-17.9/src/backend/postmaster/walsummarizer.c postgresql-17-17.10/src/backend/postmaster/walsummarizer.c --- postgresql-17-17.9/src/backend/postmaster/walsummarizer.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/postmaster/walsummarizer.c 2026-05-11 19:46:41.000000000 +0000 @@ -23,6 +23,7 @@ #include "postgres.h" #include "access/timeline.h" +#include "access/visibilitymap.h" #include "access/xlog.h" #include "access/xlog_internal.h" #include "access/xlogrecovery.h" @@ -1353,7 +1354,8 @@ MAIN_FORKNUM, xlrec->blkno); if ((xlrec->flags & SMGR_TRUNCATE_VM) != 0) BlockRefTableSetLimitBlock(brtab, &xlrec->rlocator, - VISIBILITYMAP_FORKNUM, xlrec->blkno); + VISIBILITYMAP_FORKNUM, + visibilitymap_truncation_length(xlrec->blkno)); } } diff -Nru postgresql-17-17.9/src/backend/regex/regc_color.c postgresql-17-17.10/src/backend/regex/regc_color.c --- postgresql-17-17.9/src/backend/regex/regc_color.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/regex/regc_color.c 2026-05-11 19:46:41.000000000 +0000 @@ -218,6 +218,7 @@ n = cm->ncds * 2; if (n > MAX_COLOR + 1) n = MAX_COLOR + 1; + /* the MAX_COLOR+1 limit ensures these alloc sizes can't overflow: */ if (cm->cd == cm->cdspace) { newCd = (struct colordesc *) MALLOC(n * sizeof(struct colordesc)); @@ -434,9 +435,8 @@ CERR(REG_ESPACE); return 0; } - newarray = (color *) REALLOC(cm->hicolormap, - cm->maxarrayrows * 2 * - cm->hiarraycols * sizeof(color)); + newarray = REALLOC_ARRAY(cm->hicolormap, color, + cm->maxarrayrows * 2 * cm->hiarraycols); if (newarray == NULL) { CERR(REG_ESPACE); @@ -477,9 +477,8 @@ CERR(REG_ESPACE); return; } - newarray = (color *) REALLOC(cm->hicolormap, - cm->maxarrayrows * - cm->hiarraycols * 2 * sizeof(color)); + newarray = REALLOC_ARRAY(cm->hicolormap, color, + cm->maxarrayrows * cm->hiarraycols * 2); if (newarray == NULL) { CERR(REG_ESPACE); @@ -652,8 +651,7 @@ * Potentially, we could need two more colormapranges than we have now, if * the given chr is in the middle of some existing range. */ - newranges = (colormaprange *) - MALLOC((cm->numcmranges + 2) * sizeof(colormaprange)); + newranges = MALLOC_ARRAY(colormaprange, cm->numcmranges + 2); if (newranges == NULL) { CERR(REG_ESPACE); @@ -766,8 +764,7 @@ * Potentially, if we have N non-adjacent ranges, we could need as many as * 2N+1 result ranges (consider case where new range spans 'em all). */ - newranges = (colormaprange *) - MALLOC((cm->numcmranges * 2 + 1) * sizeof(colormaprange)); + newranges = MALLOC_ARRAY(colormaprange, cm->numcmranges * 2 + 1); if (newranges == NULL) { CERR(REG_ESPACE); diff -Nru postgresql-17-17.9/src/backend/regex/regc_cvec.c postgresql-17-17.10/src/backend/regex/regc_cvec.c --- postgresql-17-17.9/src/backend/regex/regc_cvec.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/regex/regc_cvec.c 2026-05-11 19:46:41.000000000 +0000 @@ -40,6 +40,9 @@ /* * newcvec - allocate a new cvec + * + * Note: in current usage, nchrs and nranges are never so large that we risk + * integer overflow in these size calculations, even with 32-bit size_t. */ static struct cvec * newcvec(int nchrs, /* to hold this many chrs... */ diff -Nru postgresql-17-17.9/src/backend/regex/regc_nfa.c postgresql-17-17.10/src/backend/regex/regc_nfa.c --- postgresql-17-17.9/src/backend/regex/regc_nfa.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/regex/regc_nfa.c 2026-05-11 19:46:41.000000000 +0000 @@ -3523,6 +3523,10 @@ assert(!NISERR()); + /* + * The REG_MAX_COMPILE_SPACE restriction ensures that integer overflow + * can't occur in this loop nor in the allocation requests below. + */ nstates = 0; narcs = 0; for (s = nfa->states; s != NULL; s = s->next) @@ -3575,6 +3579,12 @@ case LACON: assert(s->no != cnfa->pre); assert(a->co >= 0); + /* make sure the modified color number will fit */ + if (a->co > MAX_COLOR - cnfa->ncolors) + { + NERR(REG_ECOLORS); + return; + } ca->co = (color) (cnfa->ncolors + a->co); ca->to = a->to->no; ca++; diff -Nru postgresql-17-17.9/src/backend/regex/regcomp.c postgresql-17-17.10/src/backend/regex/regcomp.c --- postgresql-17-17.9/src/backend/regex/regcomp.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/regex/regcomp.c 2026-05-11 19:46:41.000000000 +0000 @@ -561,6 +561,7 @@ assert(wanted > 0 && (size_t) wanted >= v->nsubs); n = (size_t) wanted * 3 / 2 + 1; + /* n is bounded by the number of states, so no chance of overflow here */ if (v->subs == v->sub10) { p = (struct subre **) MALLOC(n * sizeof(struct subre *)); @@ -2405,8 +2406,8 @@ else { n = v->nlacons; - newlacons = (struct subre *) REALLOC(v->lacons, - (n + 1) * sizeof(struct subre)); + /* better use REALLOC_ARRAY here, as struct subre is big */ + newlacons = REALLOC_ARRAY(v->lacons, struct subre, n + 1); } if (newlacons == NULL) { diff -Nru postgresql-17-17.9/src/backend/regex/rege_dfa.c postgresql-17-17.10/src/backend/regex/rege_dfa.c --- postgresql-17-17.9/src/backend/regex/rege_dfa.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/regex/rege_dfa.c 2026-05-11 19:46:41.000000000 +0000 @@ -640,20 +640,29 @@ } else { + /* + * Restrict the ranges of nstates and ncolors enough that the arrays + * we allocate here have no more than INT_MAX members. This protects + * not only the allocation calculations just below, but later indexing + * into these arrays. + */ + if (wordsper >= INT_MAX / (nss + WORK) || + cnfa->ncolors >= INT_MAX / nss) + { + ERR(REG_ETOOBIG); + return NULL; + } d = (struct dfa *) MALLOC(sizeof(struct dfa)); if (d == NULL) { ERR(REG_ESPACE); return NULL; } - d->ssets = (struct sset *) MALLOC(nss * sizeof(struct sset)); - d->statesarea = (unsigned *) MALLOC((nss + WORK) * wordsper * - sizeof(unsigned)); + d->ssets = MALLOC_ARRAY(struct sset, nss); + d->statesarea = MALLOC_ARRAY(unsigned, (nss + WORK) * wordsper); d->work = &d->statesarea[nss * wordsper]; - d->outsarea = (struct sset **) MALLOC(nss * cnfa->ncolors * - sizeof(struct sset *)); - d->incarea = (struct arcp *) MALLOC(nss * cnfa->ncolors * - sizeof(struct arcp)); + d->outsarea = MALLOC_ARRAY(struct sset *, nss * cnfa->ncolors); + d->incarea = MALLOC_ARRAY(struct arcp, nss * cnfa->ncolors); d->ismalloced = true; d->arraysmalloced = true; /* now freedfa() will behave sanely */ diff -Nru postgresql-17-17.9/src/backend/regex/regexec.c postgresql-17-17.10/src/backend/regex/regexec.c --- postgresql-17-17.9/src/backend/regex/regexec.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/regex/regexec.c 2026-05-11 19:46:41.000000000 +0000 @@ -231,7 +231,7 @@ if (v->nmatch <= LOCALMAT) v->pmatch = mat; else - v->pmatch = (regmatch_t *) MALLOC(v->nmatch * sizeof(regmatch_t)); + v->pmatch = MALLOC_ARRAY(regmatch_t, v->nmatch); if (v->pmatch == NULL) return REG_ESPACE; zapallsubs(v->pmatch, v->nmatch); @@ -265,6 +265,7 @@ v->subdfas = subdfas; else { + /* ntree is surely less than the number of states, so this is safe: */ v->subdfas = (struct dfa **) MALLOC(n * sizeof(struct dfa *)); if (v->subdfas == NULL) { @@ -279,6 +280,7 @@ n = (size_t) v->g->nlacons; if (n > 0) { + /* nlacons is surely less than the number of arcs, so this is safe: */ v->ladfas = (struct dfa **) MALLOC(n * sizeof(struct dfa *)); if (v->ladfas == NULL) { @@ -1163,7 +1165,7 @@ max_matches = t->max; if (max_matches < min_matches) max_matches = min_matches; - endpts = (chr **) MALLOC((max_matches + 1) * sizeof(chr *)); + endpts = MALLOC_ARRAY(chr *, max_matches + 1); if (endpts == NULL) return REG_ESPACE; endpts[0] = begin; @@ -1370,7 +1372,7 @@ max_matches = t->max; if (max_matches < min_matches) max_matches = min_matches; - endpts = (chr **) MALLOC((max_matches + 1) * sizeof(chr *)); + endpts = MALLOC_ARRAY(chr *, max_matches + 1); if (endpts == NULL) return REG_ESPACE; endpts[0] = begin; diff -Nru postgresql-17-17.9/src/backend/replication/logical/applyparallelworker.c postgresql-17-17.10/src/backend/replication/logical/applyparallelworker.c --- postgresql-17-17.9/src/backend/replication/logical/applyparallelworker.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/replication/logical/applyparallelworker.c 2026-05-11 19:46:41.000000000 +0000 @@ -811,6 +811,15 @@ if (rc & WL_LATCH_SET) ResetLatch(MyLatch); + + /* + * Force stats reporting to avoid long delays. There can be long + * idle gaps before the leader assigns the next transaction, and + * the only opportunity to report stats during such gaps is + * here. + */ + if ((rc & WL_TIMEOUT) && !IsTransactionState()) + pgstat_report_stat(true); } } else diff -Nru postgresql-17-17.9/src/backend/replication/logical/slotsync.c postgresql-17-17.10/src/backend/replication/logical/slotsync.c --- postgresql-17-17.9/src/backend/replication/logical/slotsync.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/replication/logical/slotsync.c 2026-05-11 19:46:41.000000000 +0000 @@ -74,16 +74,20 @@ /* * Struct for sharing information to control slot synchronization. * - * The slot sync worker's pid is needed by the startup process to shut it - * down during promotion. The startup process shuts down the slot sync worker - * and also sets stopSignaled=true to handle the race condition when the - * postmaster has not noticed the promotion yet and thus may end up restarting - * the slot sync worker. If stopSignaled is set, the worker will exit in such a - * case. The SQL function pg_sync_replication_slots() will also error out if - * this flag is set. Note that we don't need to reset this variable as after - * promotion the slot sync worker won't be restarted because the pmState - * changes to PM_RUN from PM_HOT_STANDBY and we don't support demoting - * primary without restarting the server. See MaybeStartSlotSyncWorker. + * The 'pid' is either the slot sync worker's pid or the backend's pid running + * the SQL function pg_sync_replication_slots(). On promotion, the startup + * process sets 'stopSignaled' and uses this 'pid' to signal the synchronizing + * process with PROCSIG_SLOTSYNC_MESSAGE and also to wake it up so that the + * process can immediately stop its synchronizing work. + * Setting 'stopSignaled' on the other hand is used to handle the race + * condition when the postmaster has not noticed the promotion yet and thus may + * end up restarting the slot sync worker. If 'stopSignaled' is set, the worker + * will exit in such a case. The SQL function pg_sync_replication_slots() will + * also error out if this flag is set. Note that we don't need to reset this + * variable as after promotion the slot sync worker won't be restarted because + * the pmState changes to PM_RUN from PM_HOT_STANDBY and we don't support + * demoting primary without restarting the server. + * See MaybeStartSlotSyncWorker. * * The 'syncing' flag is needed to prevent concurrent slot syncs to avoid slot * overwrites. @@ -129,6 +133,13 @@ static bool syncing_slots = false; /* + * Interrupt flag set when PROCSIG_SLOTSYNC_MESSAGE is received, asking the + * slotsync worker or pg_sync_replication_slots() to stop because + * standby promotion has been triggered. + */ +volatile sig_atomic_t SlotSyncShutdownPending = false; + +/* * Structure to hold information fetched from the primary server about a logical * replication slot. */ @@ -256,9 +267,15 @@ if (found_consistent_snapshot) *found_consistent_snapshot = true; + + updated_xmin_or_lsn = true; } else { + XLogRecPtr old_confirmed_lsn = slot->data.confirmed_flush; + XLogRecPtr old_restart_lsn = slot->data.restart_lsn; + XLogRecPtr old_catalog_xmin = slot->data.catalog_xmin; + LogicalSlotAdvanceAndCheckSnapState(remote_slot->confirmed_lsn, found_consistent_snapshot); @@ -270,9 +287,16 @@ errdetail_internal("Remote slot has LSN %X/%X but local slot has LSN %X/%X.", LSN_FORMAT_ARGS(remote_slot->confirmed_lsn), LSN_FORMAT_ARGS(slot->data.confirmed_flush))); - } - updated_xmin_or_lsn = true; + /* + * It is possible that the slot's xmin or LSNs are not updated, + * when the synced slot has reached consistent snapshot state or + * cannot build one at all. + */ + updated_xmin_or_lsn = (old_confirmed_lsn != slot->data.confirmed_flush || + old_restart_lsn != slot->data.restart_lsn || + old_catalog_xmin != slot->data.catalog_xmin); + } } if (remote_dbid != slot->data.database || @@ -1100,10 +1124,10 @@ } /* - * Re-read the config file. + * Re-read the config file for slot synchronization. * - * Exit if any of the slot sync GUCs have changed. The postmaster will - * restart it. + * Exit or throw error if relevant GUCs have changed depending on whether + * called from slot sync worker or from the SQL function pg_sync_replication_slots() */ static void slotsync_reread_config(void) @@ -1114,8 +1138,11 @@ bool old_hot_standby_feedback = hot_standby_feedback; bool conninfo_changed; bool primary_slotname_changed; + bool is_slotsync_worker = AmLogicalSlotSyncWorkerProcess(); + bool parameter_changed = false; - Assert(sync_replication_slots); + if (is_slotsync_worker) + Assert(sync_replication_slots); ConfigReloadPending = false; ProcessConfigFile(PGC_SIGHUP); @@ -1127,48 +1154,105 @@ if (old_sync_replication_slots != sync_replication_slots) { - ereport(LOG, - /* translator: %s is a GUC variable name */ - errmsg("replication slot synchronization worker will shut down because \"%s\" is disabled", "sync_replication_slots")); - proc_exit(0); - } + if (is_slotsync_worker) + { + ereport(LOG, + /* translator: %s is a GUC variable name */ + errmsg("replication slot synchronization worker will stop because \"%s\" is disabled", + "sync_replication_slots")); + + proc_exit(0); + } - if (conninfo_changed || - primary_slotname_changed || - (old_hot_standby_feedback != hot_standby_feedback)) + parameter_changed = true; + } + else { - ereport(LOG, - errmsg("replication slot synchronization worker will restart because of a parameter change")); + if (conninfo_changed || + primary_slotname_changed || + (old_hot_standby_feedback != hot_standby_feedback)) + { - /* - * Reset the last-start time for this worker so that the postmaster - * can restart it without waiting for SLOTSYNC_RESTART_INTERVAL_SEC. - */ - SlotSyncCtx->last_start_time = 0; + if (is_slotsync_worker) + { + ereport(LOG, + errmsg("replication slot synchronization worker will restart because of a parameter change")); - proc_exit(0); + /* + * Reset the last-start time for this worker so that the + * postmaster can restart it without waiting for + * SLOTSYNC_RESTART_INTERVAL_SEC. + */ + SlotSyncCtx->last_start_time = 0; + + proc_exit(0); + } + + parameter_changed = true; + } + } + + /* + * If we have reached here with a parameter change, we must be running in + * SQL function, emit error in such a case. + */ + if (parameter_changed) + { + Assert(!is_slotsync_worker); + ereport(ERROR, + errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("replication slot synchronization will stop because of a parameter change")); } } /* - * Interrupt handler for main loop of slot sync worker. + * Handle receipt of an interrupt indicating a slotsync shutdown message. + * + * This is called within the SIGUSR1 handler. All we do here is set a flag + * that will cause the next CHECK_FOR_INTERRUPTS() to invoke + * ProcessSlotSyncMessage(). */ -static void -ProcessSlotSyncInterrupts(WalReceiverConn *wrconn) +void +HandleSlotSyncMessageInterrupt(void) { - CHECK_FOR_INTERRUPTS(); + InterruptPending = true; + SlotSyncShutdownPending = true; + /* latch will be set by procsignal_sigusr1_handler */ +} - if (SlotSyncCtx->stopSignaled) +/* + * Handle a PROCSIG_SLOTSYNC_MESSAGE signal, called from ProcessInterrupts(). + * + * If the current process is the slotsync background worker, log a message + * and exit cleanly. If it is a backend executing pg_sync_replication_slots(), + * raise an error, unless the sync has already finished, in which case there + * is no need to interrupt the caller. + */ +void +ProcessSlotSyncMessage(void) +{ + SlotSyncShutdownPending = false; + + if (AmLogicalSlotSyncWorkerProcess()) { ereport(LOG, - errmsg("replication slot synchronization worker is shutting down because promotion is triggered")); - + errmsg("replication slot synchronization worker will stop because promotion is triggered")); proc_exit(0); } + else + { + /* + * If sync has already completed, there is no need to interrupt the + * caller with an error. + */ + if (!IsSyncingReplicationSlots()) + return; - if (ConfigReloadPending) - slotsync_reread_config(); + ereport(ERROR, + errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("replication slot synchronization will stop because promotion is triggered")); + } } /* @@ -1267,27 +1351,40 @@ } /* - * Emit an error if a promotion or a concurrent sync call is in progress. + * Emit an error if a concurrent sync call is in progress. * Otherwise, advertise that a sync is in progress. */ static void -check_and_set_sync_info(pid_t worker_pid) +check_and_set_sync_info(pid_t sync_process_pid) { SpinLockAcquire(&SlotSyncCtx->mutex); - /* The worker pid must not be already assigned in SlotSyncCtx */ - Assert(worker_pid == InvalidPid || SlotSyncCtx->pid == InvalidPid); - /* - * Emit an error if startup process signaled the slot sync machinery to - * stop. See comments atop SlotSyncCtxStruct. + * Exit immediately if promotion has been triggered. This guards against + * a new worker (or a call to pg_sync_replication_slots()) that starts + * after the old worker was stopped by ShutDownSlotSync(). */ if (SlotSyncCtx->stopSignaled) { SpinLockRelease(&SlotSyncCtx->mutex); - ereport(ERROR, - errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("cannot synchronize replication slots when standby promotion is ongoing")); + + if (AmLogicalSlotSyncWorkerProcess()) + { + ereport(DEBUG1, + errmsg("replication slot synchronization worker will not start because promotion was triggered")); + + proc_exit(0); + } + else + { + /* + * For the backend executing SQL function + * pg_sync_replication_slots(). + */ + ereport(ERROR, + errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("replication slot synchronization will not start because promotion was triggered")); + } } if (SlotSyncCtx->syncing) @@ -1298,13 +1395,16 @@ errmsg("cannot synchronize replication slots concurrently")); } + /* The pid must not be already assigned in SlotSyncCtx */ + Assert(SlotSyncCtx->pid == InvalidPid); + SlotSyncCtx->syncing = true; /* * Advertise the required PID so that the startup process can kill the - * slot sync worker on promotion. + * slot sync process on promotion. */ - SlotSyncCtx->pid = worker_pid; + SlotSyncCtx->pid = sync_process_pid; SpinLockRelease(&SlotSyncCtx->mutex); @@ -1319,6 +1419,7 @@ { SpinLockAcquire(&SlotSyncCtx->mutex); SlotSyncCtx->syncing = false; + SlotSyncCtx->pid = InvalidPid; SpinLockRelease(&SlotSyncCtx->mutex); syncing_slots = false; @@ -1489,7 +1590,10 @@ { bool some_slot_updated = false; - ProcessSlotSyncInterrupts(wrconn); + CHECK_FOR_INTERRUPTS(); + + if (ConfigReloadPending) + slotsync_reread_config(); some_slot_updated = synchronize_slots(wrconn); @@ -1525,7 +1629,7 @@ if (!StandbyMode) return; - /* The slot sync worker or SQL function mustn't be running by now */ + /* The slot sync worker or the SQL function mustn't be running by now */ Assert((SlotSyncCtx->pid == InvalidPid) && !SlotSyncCtx->syncing); LWLockAcquire(ReplicationSlotControlLock, LW_SHARED); @@ -1556,16 +1660,18 @@ } /* - * Shut down the slot sync worker. + * Shut down slot synchronization. * - * This function sends signal to shutdown slot sync worker, if required. It - * also waits till the slot sync worker has exited or + * This function sets stopSignaled=true and wakes up the slot sync process + * (either worker or backend running the SQL function pg_sync_replication_slots()) + * so that worker can exit or the SQL function pg_sync_replication_slots() can + * finish. It also waits till the slot sync worker has exited or * pg_sync_replication_slots() has finished. */ void ShutDownSlotSync(void) { - pid_t worker_pid; + pid_t sync_process_pid; SpinLockAcquire(&SlotSyncCtx->mutex); @@ -1582,16 +1688,16 @@ return; } - worker_pid = SlotSyncCtx->pid; + sync_process_pid = SlotSyncCtx->pid; SpinLockRelease(&SlotSyncCtx->mutex); /* - * Signal slotsync worker if it was still running. The worker will stop - * upon detecting that the stopSignaled flag is set to true. + * Signal process doing slotsync, if any, asking it to stop. */ - if (worker_pid != InvalidPid) - kill(worker_pid, SIGUSR1); + if (sync_process_pid != InvalidPid) + SendProcSignal(sync_process_pid, PROCSIG_SLOTSYNC_MESSAGE, + INVALID_PROC_NUMBER); /* Wait for slot sync to end */ for (;;) @@ -1734,7 +1840,7 @@ { PG_ENSURE_ERROR_CLEANUP(slotsync_failure_callback, PointerGetDatum(wrconn)); { - check_and_set_sync_info(InvalidPid); + check_and_set_sync_info(MyProcPid); validate_remote_info(wrconn); diff -Nru postgresql-17-17.9/src/backend/replication/walsender.c postgresql-17-17.10/src/backend/replication/walsender.c --- postgresql-17-17.9/src/backend/replication/walsender.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/replication/walsender.c 2026-05-11 19:46:41.000000000 +0000 @@ -1881,9 +1881,15 @@ * If we're shutting down, trigger pending WAL to be written out, * otherwise we'd possibly end up waiting for WAL that never gets * written, because walwriter has shut down already. + * + * Note that GetXLogInsertEndRecPtr() is used to obtain the WAL flush + * request location instead of GetXLogInsertRecPtr(). Because if the + * last WAL record ends at a page boundary, GetXLogInsertRecPtr() can + * return an LSN pointing past the page header, which may cause + * XLogFlush() to report an error. */ - if (got_STOPPING) - XLogBackgroundFlush(); + if (got_STOPPING && !RecoveryInProgress()) + XLogFlush(GetXLogInsertEndRecPtr()); /* * To avoid the scenario where standbys need to catch up to a newer @@ -2430,7 +2436,9 @@ TimestampTz now; TimestampTz replyTime; - static bool fullyAppliedLastTime = false; + static XLogRecPtr prevWritePtr = InvalidXLogRecPtr; + static XLogRecPtr prevFlushPtr = InvalidXLogRecPtr; + static XLogRecPtr prevApplyPtr = InvalidXLogRecPtr; /* the caller already consumed the msgtype byte */ writePtr = pq_getmsgint64(&reply_message); @@ -2463,22 +2471,23 @@ applyLag = LagTrackerRead(SYNC_REP_WAIT_APPLY, applyPtr, now); /* - * If the standby reports that it has fully replayed the WAL in two - * consecutive reply messages, then the second such message must result - * from wal_receiver_status_interval expiring on the standby. This is a - * convenient time to forget the lag times measured when it last - * wrote/flushed/applied a WAL record, to avoid displaying stale lag data - * until more WAL traffic arrives. - */ - clearLagTimes = false; - if (applyPtr == sentPtr) - { - if (fullyAppliedLastTime) - clearLagTimes = true; - fullyAppliedLastTime = true; - } - else - fullyAppliedLastTime = false; + * If the standby reports that it has fully replayed the WAL, and the + * write/flush/apply positions remain unchanged across two consecutive + * reply messages, forget the lag times measured when it last + * wrote/flushed/applied a WAL record. + * + * The second message with unchanged positions typically results from + * wal_receiver_status_interval expiring on the standby, so lag values are + * usually cleared after that interval when there is no activity. This + * avoids displaying stale lag data until more WAL traffic arrives. + */ + clearLagTimes = (applyPtr == sentPtr && flushPtr == sentPtr && + writePtr == prevWritePtr && flushPtr == prevFlushPtr && + applyPtr == prevApplyPtr); + + prevWritePtr = writePtr; + prevFlushPtr = flushPtr; + prevApplyPtr = applyPtr; /* Send a reply if the standby requested one. */ if (replyRequested) diff -Nru postgresql-17-17.9/src/backend/rewrite/rewriteHandler.c postgresql-17-17.10/src/backend/rewrite/rewriteHandler.c --- postgresql-17-17.9/src/backend/rewrite/rewriteHandler.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/rewrite/rewriteHandler.c 2026-05-11 19:46:41.000000000 +0000 @@ -96,6 +96,7 @@ int varno, Query *parsetree, bool *hasUpdate); static Query *fireRIRrules(Query *parsetree, List *activeRIRs); static Bitmapset *adjust_view_column_set(Bitmapset *cols, List *targetlist); +static List *get_generated_columns(Relation rel, int rt_index); /* @@ -638,12 +639,45 @@ if ((event == CMD_INSERT || event == CMD_UPDATE) && sub_action->commandType != CMD_UTILITY) { + RangeTblEntry *new_rte = rt_fetch(new_varno, sub_action->rtable); + Relation new_rel; + List *gen_cols; + + /* + * The target list does not contain entries for generated columns + * (they are removed by rewriteTargetListIU), so we must build entries + * for them here, so that new.gen_col can be rewritten correctly. + */ + new_rel = relation_open(new_rte->relid, NoLock); + gen_cols = get_generated_columns(new_rel, new_varno); + relation_close(new_rel, NoLock); + + /* + * The generated column expressions refer to new.attribute, so they + * must be rewritten before they can be used as replacements. + */ + gen_cols = (List *) + ReplaceVarsFromTargetList((Node *) gen_cols, + new_varno, + 0, + new_rte, + parsetree->targetList, + (event == CMD_UPDATE) ? + REPLACEVARS_CHANGE_VARNO : + REPLACEVARS_SUBSTITUTE_NULL, + current_varno, + &sub_action->hasSubLinks); + + /* + * Now rewrite new.attribute in sub_action, using both the target list + * and the rewritten generated column expressions. + */ sub_action = (Query *) ReplaceVarsFromTargetList((Node *) sub_action, new_varno, 0, - rt_fetch(new_varno, sub_action->rtable), - parsetree->targetList, + new_rte, + list_concat(gen_cols, parsetree->targetList), (event == CMD_UPDATE) ? REPLACEVARS_CHANGE_VARNO : REPLACEVARS_SUBSTITUTE_NULL, @@ -2334,17 +2368,48 @@ ChangeVarNodes(new_qual, PRS2_OLD_VARNO, rt_index, 0); /* Fix references to NEW */ if (event == CMD_INSERT || event == CMD_UPDATE) + { + RangeTblEntry *rte = rt_fetch(rt_index, parsetree->rtable); + Relation rel; + List *gen_cols; + + /* + * As in rewriteRuleAction, build entries for generated columns so + * that new.gen_col in the rule qualification can be rewritten + * correctly. + */ + rel = relation_open(rte->relid, NoLock); + gen_cols = get_generated_columns(rel, PRS2_NEW_VARNO); + relation_close(rel, NoLock); + + /* + * The generated column expressions refer to new.attribute, so they + * must be rewritten before they can be used as replacements. + */ + gen_cols = (List *) + ReplaceVarsFromTargetList((Node *) gen_cols, + PRS2_NEW_VARNO, + 0, + rte, + parsetree->targetList, + (event == CMD_UPDATE) ? + REPLACEVARS_CHANGE_VARNO : + REPLACEVARS_SUBSTITUTE_NULL, + rt_index, + &parsetree->hasSubLinks); + new_qual = ReplaceVarsFromTargetList(new_qual, PRS2_NEW_VARNO, 0, - rt_fetch(rt_index, - parsetree->rtable), - parsetree->targetList, + rte, + list_concat(gen_cols, + parsetree->targetList), (event == CMD_UPDATE) ? REPLACEVARS_CHANGE_VARNO : REPLACEVARS_SUBSTITUTE_NULL, rt_index, &parsetree->hasSubLinks); + } /* And attach the fixed qual */ AddInvertedQual(parsetree, new_qual); @@ -4419,6 +4484,65 @@ } +/* + * Get a table's generated columns + * + * Returns a list of TargetEntry, one for each generated column, containing + * the attribute numbers and generation expressions. + */ +static List * +get_generated_columns(Relation rel, int rt_index) +{ + List *gen_cols = NIL; + TupleDesc tupdesc; + + tupdesc = RelationGetDescr(rel); + if (tupdesc->constr && tupdesc->constr->has_generated_stored) + { + for (int i = 0; i < tupdesc->natts; i++) + { + Form_pg_attribute attr = TupleDescAttr(tupdesc, i); + + if (attr->attgenerated == ATTRIBUTE_GENERATED_STORED) + { + Node *defexpr; + TargetEntry *te; + Oid attcollid; + + defexpr = build_column_default(rel, i + 1); + if (defexpr == NULL) + elog(ERROR, "no generation expression found for column number %d of table \"%s\"", + i + 1, RelationGetRelationName(rel)); + + /* + * If the column definition has a collation and it is + * different from the collation of the generation expression, + * put a COLLATE clause around the expression. + */ + attcollid = attr->attcollation; + if (attcollid && attcollid != exprCollation(defexpr)) + { + CollateExpr *ce = makeNode(CollateExpr); + + ce->arg = (Expr *) defexpr; + ce->collOid = attcollid; + ce->location = -1; + + defexpr = (Node *) ce; + } + + ChangeVarNodes(defexpr, 1, rt_index, 0); + + te = makeTargetEntry((Expr *) defexpr, i + 1, 0, false); + gen_cols = lappend(gen_cols, te); + } + } + } + + return gen_cols; +} + + /* * QueryRewrite - * Primary entry point to the query rewriter. diff -Nru postgresql-17-17.9/src/backend/statistics/extended_stats.c postgresql-17-17.10/src/backend/statistics/extended_stats.c --- postgresql-17-17.9/src/backend/statistics/extended_stats.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/statistics/extended_stats.c 2026-05-11 19:46:41.000000000 +0000 @@ -740,6 +740,16 @@ stats[i] = examine_attribute(expr); /* + * If the expression has been found as non-analyzable, give up. We + * will not be able to build extended stats with it. + */ + if (stats[i] == NULL) + { + pfree(stats); + return NULL; + } + + /* * XXX We need tuple descriptor later, and we just grab it from * stats[0]->tupDesc (see e.g. statext_mcv_build). But as coded * examine_attribute does not set that, so just grab it from the first @@ -2400,6 +2410,9 @@ /* * Loads pg_statistic record from expression statistics for expression * identified by the supplied index. + * + * Returns the pg_statistic record found, or NULL if there is no statistics + * data to use. */ HeapTuple statext_expressions_load(Oid stxoid, bool inh, int idx) @@ -2428,6 +2441,13 @@ deconstruct_expanded_array(eah); + if (eah->dnulls && eah->dnulls[idx]) + { + /* No data found for this expression, give up. */ + ReleaseSysCache(htup); + return NULL; + } + td = DatumGetHeapTupleHeader(eah->dvalues[idx]); /* Build a temporary HeapTuple control structure */ diff -Nru postgresql-17-17.9/src/backend/storage/file/fd.c postgresql-17-17.10/src/backend/storage/file/fd.c --- postgresql-17-17.9/src/backend/storage/file/fd.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/storage/file/fd.c 2026-05-11 19:46:41.000000000 +0000 @@ -562,7 +562,7 @@ { int elevel; - if (rc == EINTR) + if (errno == EINTR) goto retry; /* diff -Nru postgresql-17-17.9/src/backend/storage/freespace/freespace.c postgresql-17-17.10/src/backend/storage/freespace/freespace.c --- postgresql-17-17.9/src/backend/storage/freespace/freespace.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/storage/freespace/freespace.c 2026-05-11 19:46:41.000000000 +0000 @@ -231,8 +231,18 @@ if (PageIsNew(page)) PageInit(page, BLCKSZ, 0); + /* + * Changes to FSM are usually marked as changed using MarkBufferDirtyHint; + * however, during recovery, it does nothing if checksums are enabled. It + * is assumed that the page should not be dirtied during recovery while + * modifying hints to prevent torn pages, since no new WAL data can be + * generated at this point to store FPI. This is not relevant to the FSM + * case, as its blocks are zeroed when a checksum mismatch occurs. So, we + * need to use regular MarkBufferDirty here to mark the FSM block as + * modified during recovery, otherwise changes to the FSM may be lost. + */ if (fsm_set_avail(page, slot, new_cat)) - MarkBufferDirtyHint(buf, false); + MarkBufferDirty(buf); UnlockReleaseBuffer(buf); } diff -Nru postgresql-17-17.9/src/backend/storage/ipc/procsignal.c postgresql-17-17.10/src/backend/storage/ipc/procsignal.c --- postgresql-17-17.9/src/backend/storage/ipc/procsignal.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/storage/ipc/procsignal.c 2026-05-11 19:46:41.000000000 +0000 @@ -23,6 +23,7 @@ #include "pgstat.h" #include "port/pg_bitutils.h" #include "replication/logicalworker.h" +#include "replication/slotsync.h" #include "replication/walsender.h" #include "storage/condition_variable.h" #include "storage/ipc.h" @@ -655,6 +656,9 @@ if (CheckProcSignal(PROCSIG_PARALLEL_APPLY_MESSAGE)) HandleParallelApplyMessageInterrupt(); + if (CheckProcSignal(PROCSIG_SLOTSYNC_MESSAGE)) + HandleSlotSyncMessageInterrupt(); + if (CheckProcSignal(PROCSIG_RECOVERY_CONFLICT_DATABASE)) HandleRecoveryConflictInterrupt(PROCSIG_RECOVERY_CONFLICT_DATABASE); diff -Nru postgresql-17-17.9/src/backend/storage/ipc/shmem.c postgresql-17-17.10/src/backend/storage/ipc/shmem.c --- postgresql-17-17.9/src/backend/storage/ipc/shmem.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/storage/ipc/shmem.c 2026-05-11 19:46:41.000000000 +0000 @@ -486,42 +486,6 @@ } -/* - * Add two Size values, checking for overflow - */ -Size -add_size(Size s1, Size s2) -{ - Size result; - - result = s1 + s2; - /* We are assuming Size is an unsigned type here... */ - if (result < s1 || result < s2) - ereport(ERROR, - (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), - errmsg("requested shared memory size overflows size_t"))); - return result; -} - -/* - * Multiply two Size values, checking for overflow - */ -Size -mul_size(Size s1, Size s2) -{ - Size result; - - if (s1 == 0 || s2 == 0) - return 0; - result = s1 * s2; - /* We are assuming Size is an unsigned type here... */ - if (result / s2 != s1) - ereport(ERROR, - (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), - errmsg("requested shared memory size overflows size_t"))); - return result; -} - /* SQL SRF showing allocated shared memory */ Datum pg_get_shmem_allocations(PG_FUNCTION_ARGS) diff -Nru postgresql-17-17.9/src/backend/storage/lmgr/proc.c postgresql-17-17.10/src/backend/storage/lmgr/proc.c --- postgresql-17-17.9/src/backend/storage/lmgr/proc.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/storage/lmgr/proc.c 2026-05-11 19:46:41.000000000 +0000 @@ -222,7 +222,7 @@ * dummy PGPROCs don't need these though - they're never associated * with a real process */ - if (i < MaxBackends + NUM_AUXILIARY_PROCS) + if (i < FIRST_PREPARED_XACT_PROC_NUMBER) { proc->sem = PGSemaphoreCreate(); InitSharedLatch(&(proc->procLatch)); @@ -284,7 +284,7 @@ * processes and prepared transactions. */ AuxiliaryProcs = &procs[MaxBackends]; - PreparedXactProcs = &procs[MaxBackends + NUM_AUXILIARY_PROCS]; + PreparedXactProcs = &procs[FIRST_PREPARED_XACT_PROC_NUMBER]; /* Create ProcStructLock spinlock, too */ ProcStructLock = (slock_t *) ShmemAlloc(sizeof(slock_t)); @@ -1694,7 +1694,7 @@ proc->waitLock = NULL; proc->waitProcLock = NULL; proc->waitStatus = waitStatus; - pg_atomic_write_u64(&MyProc->waitStart, 0); + pg_atomic_write_u64(&proc->waitStart, 0); /* And awaken it */ SetLatch(&proc->procLatch); diff -Nru postgresql-17-17.9/src/backend/tcop/backend_startup.c postgresql-17-17.10/src/backend/tcop/backend_startup.c --- postgresql-17-17.9/src/backend/tcop/backend_startup.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/tcop/backend_startup.c 2026-05-11 19:46:41.000000000 +0000 @@ -457,6 +457,7 @@ ProtocolVersion proto; MemoryContext oldcontext; +retry: pq_startmsgread(); /* @@ -608,7 +609,16 @@ * another SSL negotiation request, and a GSS request should only * follow if SSL was rejected (client may negotiate in either order) */ - return ProcessStartupPacket(port, true, SSLok == 'S'); + ssl_done = true; + if (SSLok == 'S') + { + /* + * We are done with SSL and negotiated correctly, so consider the + * same for GSS. + */ + gss_done = true; + } + goto retry; } else if (proto == NEGOTIATE_GSS_CODE && !gss_done) { @@ -662,7 +672,16 @@ * another GSS negotiation request, and an SSL request should only * follow if GSS was rejected (client may negotiate in either order) */ - return ProcessStartupPacket(port, GSSok == 'G', true); + gss_done = true; + if (GSSok == 'G') + { + /* + * We are done with GSS and negotiated correctly, so consider the + * same for SSL. + */ + ssl_done = true; + } + goto retry; } /* Could add additional special packet types here */ diff -Nru postgresql-17-17.9/src/backend/tcop/postgres.c postgresql-17-17.10/src/backend/tcop/postgres.c --- postgresql-17-17.9/src/backend/tcop/postgres.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/tcop/postgres.c 2026-05-11 19:46:41.000000000 +0000 @@ -58,6 +58,7 @@ #include "postmaster/postmaster.h" #include "replication/logicallauncher.h" #include "replication/logicalworker.h" +#include "replication/slotsync.h" #include "replication/slot.h" #include "replication/walsender.h" #include "rewrite/rewriteHandler.h" @@ -3497,6 +3498,9 @@ if (ParallelApplyMessagePending) HandleParallelApplyMessages(); + + if (SlotSyncShutdownPending) + ProcessSlotSyncMessage(); } /* diff -Nru postgresql-17-17.9/src/backend/tsearch/spell.c postgresql-17-17.10/src/backend/tsearch/spell.c --- postgresql-17-17.9/src/backend/tsearch/spell.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/tsearch/spell.c 2026-05-11 19:46:41.000000000 +0000 @@ -908,14 +908,20 @@ * * An .affix file entry has the following format: * > [-,] + * + * Output buffers mask, find, repl must be of length BUFSIZ; + * we truncate the input to fit. */ static bool -parse_affentry(char *str, char *mask, char *find, char *repl) +parse_affentry(const char *str, char *mask, char *find, char *repl) { int state = PAE_WAIT_MASK; char *pmask = mask, *pfind = find, *prepl = repl; + char *emask = mask + BUFSIZ; + char *efind = find + BUFSIZ; + char *erepl = repl + BUFSIZ; *mask = *find = *repl = '\0'; @@ -929,7 +935,8 @@ return false; else if (!t_isspace_cstr(str)) { - pmask += ts_copychar_with_len(pmask, str, clen); + if (pmask < emask - clen) + pmask += ts_copychar_with_len(pmask, str, clen); state = PAE_INMASK; } } @@ -942,7 +949,8 @@ } else if (!t_isspace_cstr(str)) { - pmask += ts_copychar_with_len(pmask, str, clen); + if (pmask < emask - clen) + pmask += ts_copychar_with_len(pmask, str, clen); } } else if (state == PAE_WAIT_FIND) @@ -953,7 +961,8 @@ } else if (t_isalpha_cstr(str) || t_iseq(str, '\'') /* english 's */ ) { - prepl += ts_copychar_with_len(prepl, str, clen); + if (prepl < erepl - clen) + prepl += ts_copychar_with_len(prepl, str, clen); state = PAE_INREPL; } else if (!t_isspace_cstr(str)) @@ -970,7 +979,8 @@ } else if (t_isalpha_cstr(str)) { - pfind += ts_copychar_with_len(pfind, str, clen); + if (pfind < efind - clen) + pfind += ts_copychar_with_len(pfind, str, clen); } else if (!t_isspace_cstr(str)) ereport(ERROR, @@ -985,7 +995,8 @@ } else if (t_isalpha_cstr(str)) { - prepl += ts_copychar_with_len(prepl, str, clen); + if (prepl < erepl - clen) + prepl += ts_copychar_with_len(prepl, str, clen); state = PAE_INREPL; } else if (!t_isspace_cstr(str)) @@ -1002,7 +1013,8 @@ } else if (t_isalpha_cstr(str)) { - prepl += ts_copychar_with_len(prepl, str, clen); + if (prepl < erepl - clen) + prepl += ts_copychar_with_len(prepl, str, clen); } else if (!t_isspace_cstr(str)) ereport(ERROR, @@ -1060,7 +1072,7 @@ * val: affix parameter. */ static void -addCompoundAffixFlagValue(IspellDict *Conf, char *s, uint32 val) +addCompoundAffixFlagValue(IspellDict *Conf, const char *s, uint32 val) { CompoundAffixFlag *newValue; char sbuf[BUFSIZ]; @@ -1078,9 +1090,11 @@ sflag = sbuf; while (*s && !t_isspace_cstr(s) && *s != '\n') { - int clen = ts_copychar_cstr(sflag, s); + int clen = pg_mblen_cstr(s); - sflag += clen; + /* Truncate the input to fit in BUFSIZ */ + if (sflag < sbuf + BUFSIZ - clen) + sflag += ts_copychar_with_len(sflag, s, clen); s += clen; } *sflag = '\0'; @@ -2060,9 +2074,32 @@ return NULL; } +/* + * Checks to see if affix applies to word, transforms word if so. + * The transformation consists of replacing Affix->replen leading or + * trailing bytes with the Affix->find string. + * + * word: input word + * len: length of input word + * Affix: affix to consider + * flagflags: context flags showing whether we are handling a compound word + * newword: output buffer (MUST be of length 2 * MAXNORMLEN) + * baselen: input/output argument + * + * If baselen isn't NULL, then *baselen is used to return the length of + * the non-changed part of the word when applying a suffix, and is used + * to detect whether the input contained only a prefix and suffix when + * later applying a prefix. + * + * Returns newword on success, or NULL if the affix can't be applied. + * On success, the modified word is stored into newword. + */ static char * CheckAffix(const char *word, size_t len, AFFIX *Affix, int flagflags, char *newword, int *baselen) { + size_t keeplen, + findlen; + /* * Check compound allow flags */ @@ -2096,14 +2133,26 @@ } /* + * Protect against output buffer overrun (len < Affix->replen would be + * caller error, but check anyway) + */ + Assert(len == strlen(word)); + if (len < Affix->replen) + return NULL; + keeplen = len - Affix->replen; /* how much of word we will keep */ + findlen = strlen(Affix->find); + if (keeplen + findlen >= 2 * MAXNORMLEN) + return NULL; + + /* * make replace pattern of affix */ if (Affix->type == FF_SUFFIX) { - strcpy(newword, word); - strcpy(newword + len - Affix->replen, Affix->find); + memcpy(newword, word, keeplen); + strcpy(newword + keeplen, Affix->find); if (baselen) /* store length of non-changed part of word */ - *baselen = len - Affix->replen; + *baselen = keeplen; } else { @@ -2111,10 +2160,10 @@ * if prefix is an all non-changed part's length then all word * contains only prefix and suffix, so out */ - if (baselen && *baselen + strlen(Affix->find) <= Affix->replen) + if (baselen && *baselen + findlen <= Affix->replen) return NULL; - strcpy(newword, Affix->find); - strcat(newword, word + Affix->replen); + memcpy(newword, Affix->find, findlen); + strcpy(newword + findlen, word + Affix->replen); } /* @@ -2308,7 +2357,7 @@ } else { - char *affbegin; + const char *affbegin; while ((*ptr)->affix) { diff -Nru postgresql-17-17.9/src/backend/tsearch/wparser_def.c postgresql-17-17.10/src/backend/tsearch/wparser_def.c --- postgresql-17-17.9/src/backend/tsearch/wparser_def.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/tsearch/wparser_def.c 2026-05-11 19:46:41.000000000 +0000 @@ -2628,6 +2628,9 @@ int max_fragments = 0; bool highlightall = false; ListCell *l; + size_t startsellen; + size_t stopsellen; + size_t fragdelimlen; /* Extract configuration option values */ prs->startsel = NULL; @@ -2717,9 +2720,24 @@ prs->fragdelim = pstrdup(" ... "); /* Caller will need these lengths, too */ - prs->startsellen = strlen(prs->startsel); - prs->stopsellen = strlen(prs->stopsel); - prs->fragdelimlen = strlen(prs->fragdelim); + startsellen = strlen(prs->startsel); + stopsellen = strlen(prs->stopsel); + fragdelimlen = strlen(prs->fragdelim); + if (startsellen > PG_INT16_MAX) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("value for \"%s\" is too long", "StartSel"))); + if (stopsellen > PG_INT16_MAX) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("value for \"%s\" is too long", "StopSel"))); + if (fragdelimlen > PG_INT16_MAX) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("value for \"%s\" is too long", "FragmentDelimiter"))); + prs->startsellen = startsellen; + prs->stopsellen = stopsellen; + prs->fragdelimlen = fragdelimlen; PG_RETURN_POINTER(prs); } diff -Nru postgresql-17-17.9/src/backend/utils/activity/pgstat_database.c postgresql-17-17.10/src/backend/utils/activity/pgstat_database.c --- postgresql-17-17.9/src/backend/utils/activity/pgstat_database.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/activity/pgstat_database.c 2026-05-11 19:46:41.000000000 +0000 @@ -197,7 +197,7 @@ pgLastSessionReportTime = MyStartTimestamp; - dbentry = pgstat_prep_database_pending(MyDatabaseId); + dbentry = pgstat_prep_database_pending(dboid); dbentry->sessions++; } @@ -212,7 +212,7 @@ if (!pgstat_should_report_connstat()) return; - dbentry = pgstat_prep_database_pending(MyDatabaseId); + dbentry = pgstat_prep_database_pending(dboid); switch (pgStatSessionEndCause) { @@ -356,7 +356,7 @@ PgStat_EntryRef *dbref; PgStatShared_Database *dbentry; - dbref = pgstat_get_entry_ref_locked(PGSTAT_KIND_DATABASE, MyDatabaseId, InvalidOid, + dbref = pgstat_get_entry_ref_locked(PGSTAT_KIND_DATABASE, dboid, InvalidOid, false); dbentry = (PgStatShared_Database *) dbref->shared_stats; diff -Nru postgresql-17-17.9/src/backend/utils/adt/array_userfuncs.c postgresql-17-17.10/src/backend/utils/adt/array_userfuncs.c --- postgresql-17-17.9/src/backend/utils/adt/array_userfuncs.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/adt/array_userfuncs.c 2026-05-11 19:46:41.000000000 +0000 @@ -21,6 +21,7 @@ #include "utils/builtins.h" #include "utils/datum.h" #include "utils/lsyscache.h" +#include "utils/memutils.h" #include "utils/typcache.h" /* @@ -957,10 +958,11 @@ } /* We only need to combine the two states if state2 has any items */ - else if (state2->nitems > 0) + if (state2->nitems > 0) { MemoryContext oldContext; - int reqsize = state1->nbytes + state2->nbytes; + int reqsize; + int newnitems; int i; /* @@ -983,6 +985,17 @@ errmsg("cannot accumulate arrays of different dimensionality"))); } + /* Types should match already. */ + Assert(state1->array_type == state2->array_type); + Assert(state1->element_type == state2->element_type); + + /* Calculate new sizes, guarding against overflow. */ + if (pg_add_s32_overflow(state1->nbytes, state2->nbytes, &reqsize) || + pg_add_s32_overflow(state1->nitems, state2->nitems, &newnitems)) + ereport(ERROR, + (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), + errmsg("array size exceeds the maximum allowed (%zu)", + MaxArraySize))); oldContext = MemoryContextSwitchTo(state1->mcontext); @@ -997,17 +1010,16 @@ state1->data = (char *) repalloc(state1->data, state1->abytes); } - if (state2->nullbitmap) + /* Combine the null bitmaps, if present. */ + if (state1->nullbitmap || state2->nullbitmap) { - int newnitems = state1->nitems + state2->nitems; - if (state1->nullbitmap == NULL) { /* * First input with nulls; we must retrospectively handle any * previous inputs by marking all their items non-null. */ - state1->aitems = pg_nextpower2_32(Max(256, newnitems + 1)); + state1->aitems = pg_nextpower2_32(Max(256, newnitems)); state1->nullbitmap = (bits8 *) palloc((state1->aitems + 7) / 8); array_bitmap_copy(state1->nullbitmap, 0, NULL, 0, @@ -1015,17 +1027,17 @@ } else if (newnitems > state1->aitems) { - int newaitems = state1->aitems + state2->aitems; - - state1->aitems = pg_nextpower2_32(newaitems); + state1->aitems = pg_nextpower2_32(newnitems); state1->nullbitmap = (bits8 *) repalloc(state1->nullbitmap, (state1->aitems + 7) / 8); } + /* This will do the right thing if state2->nullbitmap is NULL: */ array_bitmap_copy(state1->nullbitmap, state1->nitems, state2->nullbitmap, 0, state2->nitems); } + /* Finally, combine the data and adjust sizes. */ memcpy(state1->data + state1->nbytes, state2->data, state2->nbytes); state1->nbytes += state2->nbytes; state1->nitems += state2->nitems; @@ -1033,9 +1045,6 @@ state1->dims[0] += state2->dims[0]; /* remaining dims already match, per test above */ - Assert(state1->array_type == state2->array_type); - Assert(state1->element_type == state2->element_type); - MemoryContextSwitchTo(oldContext); } diff -Nru postgresql-17-17.9/src/backend/utils/adt/arrayfuncs.c postgresql-17-17.10/src/backend/utils/adt/arrayfuncs.c --- postgresql-17-17.9/src/backend/utils/adt/arrayfuncs.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/adt/arrayfuncs.c 2026-05-11 19:46:41.000000000 +0000 @@ -5555,6 +5555,7 @@ ndatabytes; char *data; int i; + int newnitems; /* * We disallow accumulating null subarrays. Another plausible definition @@ -5584,6 +5585,14 @@ nitems = ArrayGetNItems(ndims, dims); ndatabytes = ARR_SIZE(arg) - ARR_DATA_OFFSET(arg); + /* Check that the array doesn't grow too large */ + newnitems = astate->nitems + nitems; + if (newnitems > MaxArraySize) + ereport(ERROR, + (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), + errmsg("array size exceeds the maximum allowed (%zu)", + MaxArraySize))); + if (astate->ndims == 0) { /* First input; check/save the dimensionality info */ @@ -5649,8 +5658,6 @@ /* Deal with null bitmap if needed */ if (astate->nullbitmap || ARR_HASNULL(arg)) { - int newnitems = astate->nitems + nitems; - if (astate->nullbitmap == NULL) { /* @@ -5674,7 +5681,7 @@ nitems); } - astate->nitems += nitems; + astate->nitems = newnitems; astate->dims[0] += 1; MemoryContextSwitchTo(oldcontext); diff -Nru postgresql-17-17.9/src/backend/utils/adt/datum.c postgresql-17-17.10/src/backend/utils/adt/datum.c --- postgresql-17-17.9/src/backend/utils/adt/datum.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/adt/datum.c 2026-05-11 19:46:41.000000000 +0000 @@ -258,8 +258,13 @@ /*------------------------------------------------------------------------- * datum_image_eq * - * Compares two datums for identical contents, based on byte images. Return - * true if the two datums are equal, false otherwise. + * Compares two datums for identical contents when coerced to a signed integer + * of typLen bytes. Return true if the two datums are equal, false otherwise. + * + * The coercion is required as we're not always careful to use the correct + * PG_RETURN_* macro. If we didn't do this, a Datum that's been formed and + * deformed into a tuple may not have the same signed representation as the + * other datum value. *------------------------------------------------------------------------- */ bool @@ -271,7 +276,21 @@ if (typByVal) { - result = (value1 == value2); + switch (typLen) + { + case sizeof(char): + result = (DatumGetChar(value1) == DatumGetChar(value2)); + break; + case sizeof(int16): + result = (DatumGetInt16(value1) == DatumGetInt16(value2)); + break; + case sizeof(int32): + result = (DatumGetInt32(value1) == DatumGetInt32(value2)); + break; + default: + result = (value1 == value2); + break; + } } else if (typLen > 0) { @@ -328,10 +347,11 @@ /*------------------------------------------------------------------------- * datum_image_hash * - * Generate a hash value based on the binary representation of 'value'. Most - * use cases will want to use the hash function specific to the Datum's type, - * however, some corner cases require generating a hash value based on the - * actual bits rather than the logical value. + * Generate a hash value based on the binary representation of 'value' when + * represented as a signed integer of typLen bytes. Most use cases will want + * to use the hash function specific to the Datum's type, however, some corner + * cases require generating a hash value based on the actual bits rather than + * the logical value. *------------------------------------------------------------------------- */ uint32 @@ -341,7 +361,23 @@ uint32 result; if (typByVal) + { + switch (typLen) + { + case sizeof(char): + value = CharGetDatum(DatumGetChar(value)); + break; + case sizeof(int16): + value = Int16GetDatum(DatumGetInt16(value)); + break; + case sizeof(int32): + value = Int32GetDatum(DatumGetInt32(value)); + break; + /* Nothing needs done for 64-bit types */ + } + result = hash_bytes((unsigned char *) &value, sizeof(Datum)); + } else if (typLen > 0) result = hash_bytes((unsigned char *) DatumGetPointer(value), typLen); else if (typLen == -1) diff -Nru postgresql-17-17.9/src/backend/utils/adt/formatting.c postgresql-17-17.10/src/backend/utils/adt/formatting.c --- postgresql-17-17.9/src/backend/utils/adt/formatting.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/adt/formatting.c 2026-05-11 19:46:41.000000000 +0000 @@ -1012,8 +1012,9 @@ char *number, /* string with number */ *number_p, /* pointer to current number position */ *inout, /* in / out buffer */ - *inout_p, /* pointer to current inout position */ - *last_relevant, /* last relevant number after decimal point */ + *inout_p; /* pointer to current inout position */ + + const char *last_relevant, /* last relevant number after decimal point */ *L_negative_sign, /* Locale */ *L_positive_sign, @@ -1078,6 +1079,7 @@ static char *get_last_relevant_decnum(char *num); static void NUM_numpart_from_char(NUMProc *Np, int id, int input_len); static void NUM_numpart_to_char(NUMProc *Np, int id); +static void NUM_add_locale_symbol(NUMProc *Np, const char *pattern); static char *NUM_processor(FormatNode *node, NUMDesc *Num, char *inout, char *number, int input_len, int to_char_out_pre_spaces, int sign, bool is_to_char, Oid collid); @@ -4196,7 +4198,7 @@ /* * Allocate workspace for result as C string */ - result = palloc((fmt_len * DCH_MAX_ITEM_SIZ) + 1); + result = palloc(mul_size(fmt_len, DCH_MAX_ITEM_SIZ) + 1); *result = '\0'; if (fmt_len > DCH_CACHE_SIZE) @@ -4207,7 +4209,7 @@ */ incache = false; - format = (FormatNode *) palloc((fmt_len + 1) * sizeof(FormatNode)); + format = palloc_array(FormatNode, fmt_len + 1); parse_format(format, fmt_str, DCH_keywords, DCH_suff, DCH_index, DCH_FLAG, NULL); @@ -4630,7 +4632,7 @@ */ incache = false; - format = (FormatNode *) palloc((fmt_len + 1) * sizeof(FormatNode)); + format = palloc_array(FormatNode, fmt_len + 1); parse_format(format, fmt_str, DCH_keywords, DCH_suff, DCH_index, DCH_FLAG, NULL); @@ -4718,7 +4720,7 @@ * Allocate new memory if format picture is bigger than static * cache and do not use cache (call parser always) */ - format = (FormatNode *) palloc((fmt_len + 1) * sizeof(FormatNode)); + format = palloc_array(FormatNode, fmt_len + 1); parse_format(format, fmt_str, DCH_keywords, DCH_suff, DCH_index, DCH_FLAG | (std ? STD_FLAG : 0), NULL); @@ -5190,7 +5192,7 @@ * Allocate new memory if format picture is bigger than static cache * and do not use cache (call parser always) */ - format = (FormatNode *) palloc((len + 1) * sizeof(FormatNode)); + format = palloc_array(FormatNode, len + 1); *shouldFree = true; @@ -5653,11 +5655,9 @@ { if (Np->Num->lsign == NUM_LSIGN_PRE) { - if (Np->sign == '-') - strcpy(Np->inout_p, Np->L_negative_sign); - else - strcpy(Np->inout_p, Np->L_positive_sign); - Np->inout_p += strlen(Np->inout_p); + NUM_add_locale_symbol(Np, (Np->sign == '-') ? + Np->L_negative_sign : + Np->L_positive_sign); Np->sign_wrote = true; } } @@ -5722,8 +5722,7 @@ { if (!Np->last_relevant || *Np->last_relevant != '.') { - strcpy(Np->inout_p, Np->decimal); /* Write DEC/D */ - Np->inout_p += strlen(Np->inout_p); + NUM_add_locale_symbol(Np, Np->decimal); /* Write DEC/D */ } /* @@ -5732,8 +5731,7 @@ else if (IS_FILLMODE(Np->Num) && Np->last_relevant && *Np->last_relevant == '.') { - strcpy(Np->inout_p, Np->decimal); /* Write DEC/D */ - Np->inout_p += strlen(Np->inout_p); + NUM_add_locale_symbol(Np, Np->decimal); /* Write DEC/D */ } } else @@ -5791,11 +5789,9 @@ } else if (IS_LSIGN(Np->Num) && Np->Num->lsign == NUM_LSIGN_POST) { - if (Np->sign == '-') - strcpy(Np->inout_p, Np->L_negative_sign); - else - strcpy(Np->inout_p, Np->L_positive_sign); - Np->inout_p += strlen(Np->inout_p); + NUM_add_locale_symbol(Np, (Np->sign == '-') ? + Np->L_negative_sign : + Np->L_positive_sign); } } } @@ -5804,6 +5800,23 @@ } /* + * Append locale-specific symbol to Np->inout. + * Note we don't null-terminate the output + */ +static void +NUM_add_locale_symbol(NUMProc *Np, const char *pattern) +{ + size_t pattern_len = strlen(pattern); + + /* Truncate symbol if it's potentially too long */ + if (unlikely(pattern_len > NUM_MAX_ITEM_SIZ)) + pattern_len = pg_mbcliplen(pattern, pattern_len, + NUM_MAX_ITEM_SIZ); + memcpy(Np->inout_p, pattern, pattern_len); + Np->inout_p += pattern_len; +} + +/* * Skip over "n" input characters, but only if they aren't numeric data */ static void @@ -6073,6 +6086,10 @@ pattern_len = strlen(pattern); if (Np->is_to_char) { + /* Truncate symbol if it's potentially too long */ + if (unlikely(pattern_len > NUM_MAX_ITEM_SIZ)) + pattern_len = pg_mbcliplen(pattern, pattern_len, + NUM_MAX_ITEM_SIZ); if (!Np->num_in) { if (IS_FILLMODE(Np->Num)) @@ -6080,19 +6097,21 @@ else { /* just in case there are MB chars */ - pattern_len = pg_mbstrlen(pattern); + pattern_len = pg_mbstrlen_with_len(pattern, + pattern_len); memset(Np->inout_p, ' ', pattern_len); Np->inout_p += pattern_len - 1; } } else { - strcpy(Np->inout_p, pattern); + memcpy(Np->inout_p, pattern, pattern_len); Np->inout_p += pattern_len - 1; } } else { + /* Here we do not truncate the symbol ... */ if (!Np->num_in) { if (IS_FILLMODE(Np->Num)) @@ -6117,11 +6136,18 @@ pattern = Np->L_currency_symbol; if (Np->is_to_char) { - strcpy(Np->inout_p, pattern); - Np->inout_p += strlen(pattern) - 1; + /* Truncate symbol if it's potentially too long */ + pattern_len = strlen(pattern); + if (unlikely(pattern_len > NUM_MAX_ITEM_SIZ)) + pattern_len = pg_mbcliplen(pattern, pattern_len, + NUM_MAX_ITEM_SIZ); + + memcpy(Np->inout_p, pattern, pattern_len); + Np->inout_p += pattern_len - 1; } else { + /* Here we do not truncate the symbol ... */ NUM_eat_non_data_chars(Np, pg_mbstrlen(pattern), input_len); continue; } diff -Nru postgresql-17-17.9/src/backend/utils/adt/jsonpath_exec.c postgresql-17-17.10/src/backend/utils/adt/jsonpath_exec.c --- postgresql-17-17.9/src/backend/utils/adt/jsonpath_exec.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/adt/jsonpath_exec.c 2026-05-11 19:46:41.000000000 +0000 @@ -4420,7 +4420,7 @@ */ if (!JsonTablePlanNextRow(planstate->right)) { - /* Right sibling ran out of row, so there are more rows. */ + /* Right sibling ran out of rows too, so there are no more rows. */ return false; } } diff -Nru postgresql-17-17.9/src/backend/utils/adt/multirangetypes.c postgresql-17-17.10/src/backend/utils/adt/multirangetypes.c --- postgresql-17-17.9/src/backend/utils/adt/multirangetypes.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/adt/multirangetypes.c 2026-05-11 19:46:41.000000000 +0000 @@ -340,7 +340,7 @@ Oid mltrngtypoid = PG_GETARG_OID(1); int32 typmod = PG_GETARG_INT32(2); MultirangeIOData *cache; - uint32 range_count; + int32 range_count; RangeType **ranges; MultirangeType *ret; StringInfoData tmpbuf; @@ -348,7 +348,8 @@ cache = get_multirange_io_data(fcinfo, mltrngtypoid, IOFunc_receive); range_count = pq_getmsgint(buf, 4); - ranges = palloc(range_count * sizeof(RangeType *)); + /* palloc_array will enforce a more-or-less-sane range_count value */ + ranges = palloc_array(RangeType *, range_count); initStringInfo(&tmpbuf); for (int i = 0; i < range_count; i++) @@ -835,7 +836,7 @@ { int i; - *ranges = palloc(*range_count * sizeof(RangeType *)); + *ranges = palloc_array(RangeType *, *range_count); for (i = 0; i < *range_count; i++) (*ranges)[i] = multirange_get_range(rangetyp, multirange, i); } @@ -999,7 +1000,7 @@ deconstruct_array(rangeArray, rngtypid, rangetyp->typlen, rangetyp->typbyval, rangetyp->typalign, &elements, &nulls, &range_count); - ranges = palloc0(range_count * sizeof(RangeType *)); + ranges = palloc_array(RangeType *, range_count); for (i = 0; i < range_count; i++) { if (nulls[i]) diff -Nru postgresql-17-17.9/src/backend/utils/adt/pg_locale.c postgresql-17-17.10/src/backend/utils/adt/pg_locale.c --- postgresql-17-17.9/src/backend/utils/adt/pg_locale.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/adt/pg_locale.c 2026-05-11 19:46:41.000000000 +0000 @@ -150,8 +150,8 @@ static UCollator *pg_ucol_open(const char *loc_str); static void init_icu_converter(void); -static size_t uchar_length(UConverter *converter, - const char *str, int32_t len); +static int32_t uchar_length(UConverter *converter, + const char *str, int32_t len); static int32_t uchar_convert(UConverter *converter, UChar *dest, int32_t destlen, const char *src, int32_t srclen); @@ -1129,7 +1129,7 @@ wchar_t wc_locale_name[LOCALE_NAME_MAX_LENGTH]; wchar_t buffer[LOCALE_NAME_MAX_LENGTH]; static char iso_lc_messages[LOCALE_NAME_MAX_LENGTH]; - char *period; + const char *period; int len; int ret_val; @@ -1509,6 +1509,9 @@ ereport(ERROR, (errmsg("could not open collator for locale \"%s\" with rules \"%s\": %s", iculocstr, icurules, u_errorName(status)))); + + pfree(my_rules); + pfree(agg_rules); } /* We will leak this string if the caller errors later :-( */ @@ -1869,8 +1872,9 @@ char *buf = sbuf; char *a1p, *a2p; - int a1len = len1 * 2 + 2; - int a2len = len2 * 2 + 2; + size_t a1len, + a2len, + buflen; int r; int result; @@ -1880,8 +1884,16 @@ Assert(false); #endif - if (a1len + a2len > TEXTBUFLEN) - buf = palloc(a1len + a2len); + /* + * In a 32-bit build, twice the input length can overflow size_t, so we + * must be careful. + */ + a1len = add_size(add_size(len1, len1), 2); + a2len = add_size(add_size(len2, len2), 2); + buflen = add_size(a1len, a2len); + + if (buflen > TEXTBUFLEN) + buf = palloc(buflen); a1p = buf; a2p = buf + a1len; @@ -2023,12 +2035,11 @@ pg_strncoll_icu_no_utf8(const char *arg1, int32_t len1, const char *arg2, int32_t len2, pg_locale_t locale) { - char sbuf[TEXTBUFLEN]; - char *buf = sbuf; + UChar sbuf[TEXTBUFLEN / sizeof(UChar)]; + UChar *buf = sbuf; int32_t ulen1; int32_t ulen2; - size_t bufsize1; - size_t bufsize2; + size_t bufsize; UChar *uchar1, *uchar2; int result; @@ -2043,14 +2054,13 @@ ulen1 = uchar_length(icu_converter, arg1, len1); ulen2 = uchar_length(icu_converter, arg2, len2); - bufsize1 = (ulen1 + 1) * sizeof(UChar); - bufsize2 = (ulen2 + 1) * sizeof(UChar); + /* ulen1+1 or ulen2+1 doesn't risk overflow, but summing them might */ + bufsize = add_size(ulen1 + 1, ulen2 + 1); + if (bufsize > lengthof(sbuf)) + buf = palloc_array(UChar, bufsize); - if (bufsize1 + bufsize2 > TEXTBUFLEN) - buf = palloc(bufsize1 + bufsize2); - - uchar1 = (UChar *) buf; - uchar2 = (UChar *) (buf + bufsize1); + uchar1 = buf; + uchar2 = buf + ulen1 + 1; ulen1 = uchar_convert(icu_converter, uchar1, ulen1 + 1, arg1, len1); ulen2 = uchar_convert(icu_converter, uchar2, ulen2 + 1, arg2, len2); @@ -2229,11 +2239,9 @@ pg_strnxfrm_icu(char *dest, const char *src, int32_t srclen, int32_t destsize, pg_locale_t locale) { - char sbuf[TEXTBUFLEN]; - char *buf = sbuf; - UChar *uchar; + UChar sbuf[TEXTBUFLEN / sizeof(UChar)]; + UChar *uchar = sbuf; int32_t ulen; - size_t uchar_bsize; Size result_bsize; Assert(locale->provider == COLLPROVIDER_ICU); @@ -2242,12 +2250,8 @@ ulen = uchar_length(icu_converter, src, srclen); - uchar_bsize = (ulen + 1) * sizeof(UChar); - - if (uchar_bsize > TEXTBUFLEN) - buf = palloc(uchar_bsize); - - uchar = (UChar *) buf; + if (ulen >= lengthof(sbuf)) + uchar = palloc_array(UChar, ulen + 1); ulen = uchar_convert(icu_converter, uchar, ulen + 1, src, srclen); @@ -2262,8 +2266,8 @@ Assert(result_bsize > 0); result_bsize--; - if (buf != sbuf) - pfree(buf); + if (uchar != sbuf) + pfree(uchar); /* if dest is defined, it should be nul-terminated */ Assert(result_bsize >= destsize || dest[result_bsize] == '\0'); @@ -2276,14 +2280,12 @@ pg_strnxfrm_prefix_icu_no_utf8(char *dest, const char *src, int32_t srclen, int32_t destsize, pg_locale_t locale) { - char sbuf[TEXTBUFLEN]; - char *buf = sbuf; + UChar sbuf[TEXTBUFLEN / sizeof(UChar)]; + UChar *uchar = sbuf; UCharIterator iter; uint32_t state[2]; UErrorCode status; - int32_t ulen = -1; - UChar *uchar = NULL; - size_t uchar_bsize; + int32_t ulen; Size result_bsize; Assert(locale->provider == COLLPROVIDER_ICU); @@ -2293,12 +2295,8 @@ ulen = uchar_length(icu_converter, src, srclen); - uchar_bsize = (ulen + 1) * sizeof(UChar); - - if (uchar_bsize > TEXTBUFLEN) - buf = palloc(uchar_bsize); - - uchar = (UChar *) buf; + if (ulen >= lengthof(sbuf)) + uchar = palloc_array(UChar, ulen + 1); ulen = uchar_convert(icu_converter, uchar, ulen + 1, src, srclen); @@ -2316,6 +2314,9 @@ (errmsg("sort key generation failed: %s", u_errorName(status)))); + if (uchar != sbuf) + pfree(uchar); + return result_bsize; } @@ -2712,8 +2713,12 @@ /* * Find length, in UChars, of given string if converted to UChar string. + * + * Note: given the assumption that the input string fits in MaxAllocSize, + * the result cannot overflow int32_t. But callers must be careful about + * multiplying the result by sizeof(UChar). */ -static size_t +static int32_t uchar_length(UConverter *converter, const char *str, int32_t len) { UErrorCode status = U_ZERO_ERROR; @@ -2737,7 +2742,6 @@ UErrorCode status = U_ZERO_ERROR; int32_t ulen; - status = U_ZERO_ERROR; ulen = ucnv_toUChars(converter, dest, destlen, src, srclen, &status); if (U_FAILURE(status)) ereport(ERROR, @@ -2766,7 +2770,7 @@ len_uchar = uchar_length(icu_converter, buff, nbytes); - *buff_uchar = palloc((len_uchar + 1) * sizeof(**buff_uchar)); + *buff_uchar = palloc_array(UChar, len_uchar + 1); len_uchar = uchar_convert(icu_converter, *buff_uchar, len_uchar + 1, buff, nbytes); diff -Nru postgresql-17-17.9/src/backend/utils/adt/selfuncs.c postgresql-17-17.10/src/backend/utils/adt/selfuncs.c --- postgresql-17-17.9/src/backend/utils/adt/selfuncs.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/adt/selfuncs.c 2026-05-11 19:46:41.000000000 +0000 @@ -2165,6 +2165,18 @@ AttStatsSlot sslot; double nelem = 0; + /* + * Skip calling examine_variable for Var with varno 0, which has no + * valid relation entry and would error in find_base_rel. Such a Var + * can appear when a nested set operation's output type doesn't match + * the parent's expected type, because recurse_set_operations builds a + * projection target list using generate_setop_tlist with varno 0, and + * if the required type coercion involves an ArrayCoerceExpr, we can + * be called on that Var. + */ + if (IsA(arrayexpr, Var) && ((Var *) arrayexpr)->varno == 0) + return 10; /* default guess, should match scalararraysel */ + examine_variable(root, arrayexpr, 0, &vardata); if (HeapTupleIsValid(vardata.statsTuple)) { @@ -5303,7 +5315,11 @@ vardata->statsTuple = statext_expressions_load(info->statOid, rte->inh, pos); - vardata->freefunc = ReleaseDummy; + /* Nothing to release if no data found */ + if (vardata->statsTuple != NULL) + { + vardata->freefunc = ReleaseDummy; + } /* * Test if user has permission to access all rows from the diff -Nru postgresql-17-17.9/src/backend/utils/adt/timestamp.c postgresql-17-17.10/src/backend/utils/adt/timestamp.c --- postgresql-17-17.9/src/backend/utils/adt/timestamp.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/adt/timestamp.c 2026-05-11 19:46:41.000000000 +0000 @@ -1700,15 +1700,19 @@ timeofday(PG_FUNCTION_ARGS) { struct timeval tp; - char templ[128]; - char buf[128]; pg_time_t tt; + struct pg_tm *tm; + char part1[128]; + char part2[128]; + char buf[128 + 128 + 10]; gettimeofday(&tp, NULL); tt = (pg_time_t) tp.tv_sec; - pg_strftime(templ, sizeof(templ), "%a %b %d %H:%M:%S.%%06d %Y %Z", - pg_localtime(&tt, session_timezone)); - snprintf(buf, sizeof(buf), templ, tp.tv_usec); + tm = pg_localtime(&tt, session_timezone); + + pg_strftime(part1, sizeof(part1), "%a %b %d %H:%M:%S", tm); + pg_strftime(part2, sizeof(part2), "%Y %Z", tm); + snprintf(buf, sizeof(buf), "%s.%06d %s", part1, (int) tp.tv_usec, part2); PG_RETURN_TEXT_P(cstring_to_text(buf)); } diff -Nru postgresql-17-17.9/src/backend/utils/adt/varlena.c postgresql-17-17.10/src/backend/utils/adt/varlena.c --- postgresql-17-17.9/src/backend/utils/adt/varlena.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/adt/varlena.c 2026-05-11 19:46:41.000000000 +0000 @@ -6394,18 +6394,18 @@ text *input = PG_GETARG_TEXT_PP(0); char *formstr = text_to_cstring(PG_GETARG_TEXT_PP(1)); UnicodeNormalizationForm form; - int size; + size_t size; pg_wchar *input_chars; pg_wchar *output_chars; unsigned char *p; text *result; - int i; + size_t i; form = unicode_norm_form_from_string(formstr); /* convert to pg_wchar */ size = pg_mbstrlen_with_len(VARDATA_ANY(input), VARSIZE_ANY_EXHDR(input)); - input_chars = palloc((size + 1) * sizeof(pg_wchar)); + input_chars = palloc_array(pg_wchar, size + 1); p = (unsigned char *) VARDATA_ANY(input); for (i = 0; i < size; i++) { @@ -6460,20 +6460,20 @@ text *input = PG_GETARG_TEXT_PP(0); char *formstr = text_to_cstring(PG_GETARG_TEXT_PP(1)); UnicodeNormalizationForm form; - int size; + size_t size; pg_wchar *input_chars; pg_wchar *output_chars; unsigned char *p; - int i; + size_t i; UnicodeNormalizationQC quickcheck; - int output_size; + size_t output_size; bool result; form = unicode_norm_form_from_string(formstr); /* convert to pg_wchar */ size = pg_mbstrlen_with_len(VARDATA_ANY(input), VARSIZE_ANY_EXHDR(input)); - input_chars = palloc((size + 1) * sizeof(pg_wchar)); + input_chars = palloc_array(pg_wchar, size + 1); p = (unsigned char *) VARDATA_ANY(input); for (i = 0; i < size; i++) { diff -Nru postgresql-17-17.9/src/backend/utils/adt/xid8funcs.c postgresql-17-17.10/src/backend/utils/adt/xid8funcs.c --- postgresql-17-17.9/src/backend/utils/adt/xid8funcs.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/adt/xid8funcs.c 2026-05-11 19:46:41.000000000 +0000 @@ -193,7 +193,7 @@ #ifdef USE_BSEARCH_IF_NXIP_GREATER else if (snap->nxip > USE_BSEARCH_IF_NXIP_GREATER) { - void *res; + const void *res; res = bsearch(&value, snap->xip, snap->nxip, sizeof(FullTransactionId), cmp_fxid); diff -Nru postgresql-17-17.9/src/backend/utils/cache/catcache.c postgresql-17-17.10/src/backend/utils/cache/catcache.c --- postgresql-17-17.9/src/backend/utils/cache/catcache.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/cache/catcache.c 2026-05-11 19:46:41.000000000 +0000 @@ -205,6 +205,10 @@ char *ca = NameStr(*DatumGetName(a)); char *cb = NameStr(*DatumGetName(b)); + /* + * Catalogs only use deterministic collations, so ignore column collation + * and use fast path. + */ return strncmp(ca, cb, NAMEDATALEN) == 0; } @@ -213,6 +217,10 @@ { char *key = NameStr(*DatumGetName(datum)); + /* + * Catalogs only use deterministic collations, so ignore column collation + * and use fast path. + */ return hash_any((unsigned char *) key, strlen(key)); } @@ -244,17 +252,20 @@ texteqfast(Datum a, Datum b) { /* - * The use of DEFAULT_COLLATION_OID is fairly arbitrary here. We just - * want to take the fast "deterministic" path in texteq(). + * Catalogs only use deterministic collations, so ignore column collation + * and use "C" locale for efficiency. */ - return DatumGetBool(DirectFunctionCall2Coll(texteq, DEFAULT_COLLATION_OID, a, b)); + return DatumGetBool(DirectFunctionCall2Coll(texteq, C_COLLATION_OID, a, b)); } static uint32 texthashfast(Datum datum) { - /* analogously here as in texteqfast() */ - return DatumGetInt32(DirectFunctionCall1Coll(hashtext, DEFAULT_COLLATION_OID, datum)); + /* + * Catalogs only use deterministic collations, so ignore column collation + * and use "C" locale for efficiency. + */ + return DatumGetInt32(DirectFunctionCall1Coll(hashtext, C_COLLATION_OID, datum)); } static bool diff -Nru postgresql-17-17.9/src/backend/utils/cache/lsyscache.c postgresql-17-17.10/src/backend/utils/cache/lsyscache.c --- postgresql-17-17.9/src/backend/utils/cache/lsyscache.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/cache/lsyscache.c 2026-05-11 19:46:41.000000000 +0000 @@ -782,6 +782,44 @@ return result; } +/* + * collations_agree_on_equality + * Return true if the two collations have equivalent notions of equality, + * so that a uniqueness or equality proof established under one side + * carries over to a comparison performed under the other side. + * + * Note: this is equality compatibility only. Do NOT use this to reason + * about ordering. + * + * An InvalidOid on either side denotes the absence of a collation -- that + * side's operation is not collation-sensitive (e.g. a non-collatable column + * type). Absence of a collation cannot conflict with the other side's + * collation, so we treat such pairs as agreeing on equality. This generalizes + * the asymmetric treatment in IndexCollMatchesExprColl(). + * + * Otherwise the collations have equivalent equality if they match, or if both + * are deterministic: by definition a deterministic collation treats two + * strings as equal iff they are byte-wise equal (see CREATE COLLATION), so any + * two deterministic collations share the same equality relation. A mismatch + * involving a nondeterministic collation, however, may mean the two equality + * relations disagree, and the proof is unsound. + */ +bool +collations_agree_on_equality(Oid coll1, Oid coll2) +{ + if (!OidIsValid(coll1) || !OidIsValid(coll2)) + return true; + + if (coll1 == coll2) + return true; + + if (!get_collation_isdeterministic(coll1) || + !get_collation_isdeterministic(coll2)) + return false; + + return true; +} + /* ---------- AMPROC CACHES ---------- */ diff -Nru postgresql-17-17.9/src/backend/utils/misc/injection_point.c postgresql-17-17.10/src/backend/utils/misc/injection_point.c --- postgresql-17-17.9/src/backend/utils/misc/injection_point.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/misc/injection_point.c 2026-05-11 19:46:41.000000000 +0000 @@ -335,6 +335,7 @@ entry->library[INJ_LIB_MAXLEN - 1] = '\0'; strlcpy(entry->function, function, sizeof(entry->function)); entry->function[INJ_FUNC_MAXLEN - 1] = '\0'; + memset(entry->private_data, 0, INJ_PRIVATE_MAXLEN); if (private_data != NULL) memcpy(entry->private_data, private_data, private_data_size); diff -Nru postgresql-17-17.9/src/backend/utils/mmgr/aset.c postgresql-17-17.10/src/backend/utils/mmgr/aset.c --- postgresql-17-17.9/src/backend/utils/mmgr/aset.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/mmgr/aset.c 2026-05-11 19:46:41.000000000 +0000 @@ -1125,7 +1125,26 @@ Assert(FreeListIdxIsValid(fidx)); link = GetFreeListLink(chunk); -#ifdef MEMORY_CONTEXT_CHECKING + /* + * It might seem odd that we use elevel ERROR for double-pfree but + * only WARNING for write-past-chunk-end. But the two conditions are + * not very comparable. In the double-pfree case we can prevent + * corruption before it happens; while if we let it go through, the + * result would be a corrupted freelist that allows this chunk to get + * re-allocated twice. Thus the original bug could cascade into + * hard-to-understand misbehavior that might manifest far away from + * the actual source of the problem. On the other hand, a write past + * chunk end can be relatively benign if just a few bytes too many + * were written: often, only padding or unused space gets affected. + * Moreover, whatever damage was done is already done, and we're just + * reporting after the fact with no ability to clean it up. So just + * warn, like AllocSetCheck would do if the chunk didn't get freed. + */ +#ifdef MEMORY_CONTEXT_CHECKING + /* Test for previously-freed chunk */ + if (unlikely(chunk->requested_size == InvalidAllocSize)) + elog(ERROR, "detected double pfree in %s %p", + set->header.name, chunk); /* Test for someone scribbling on unused space in chunk */ if (chunk->requested_size < GetChunkSizeFromFreeListIdx(fidx)) if (!sentinel_ok(pointer, chunk->requested_size)) @@ -1316,6 +1335,11 @@ oldchksize = GetChunkSizeFromFreeListIdx(fidx); #ifdef MEMORY_CONTEXT_CHECKING + /* See comments in AllocSetFree about uses of ERROR and WARNING here */ + /* Test for previously-freed chunk */ + if (unlikely(chunk->requested_size == InvalidAllocSize)) + elog(ERROR, "detected realloc of freed chunk in %s %p", + set->header.name, chunk); /* Test for someone scribbling on unused space in chunk */ if (chunk->requested_size < oldchksize) if (!sentinel_ok(pointer, chunk->requested_size)) diff -Nru postgresql-17-17.9/src/backend/utils/mmgr/dsa.c postgresql-17-17.10/src/backend/utils/mmgr/dsa.c --- postgresql-17-17.9/src/backend/utils/mmgr/dsa.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/mmgr/dsa.c 2026-05-11 19:46:41.000000000 +0000 @@ -2146,6 +2146,8 @@ /* See if that is enough... */ if (requested_pages > usable_pages) { + size_t total_requested_pages PG_USED_FOR_ASSERTS_ONLY; + /* * We'll make an odd-sized segment, working forward from the requested * number of pages. @@ -2156,10 +2158,37 @@ MAXALIGN(sizeof(FreePageManager)) + usable_pages * sizeof(dsa_pointer); + /* + * We must also account for pagemap entries needed to cover the + * metadata pages themselves. The pagemap must track all pages in the + * segment, including the pages occupied by metadata. + * + * This formula uses integer ceiling division to compute the exact + * number of additional entries needed. The divisor (FPM_PAGE_SIZE - + * sizeof(dsa_pointer)) accounts for the fact that each metadata page + * consumes one pagemap entry of sizeof(dsa_pointer) bytes, leaving + * only (FPM_PAGE_SIZE - sizeof(dsa_pointer)) net bytes per metadata + * page. + */ + metadata_bytes += + ((metadata_bytes + (FPM_PAGE_SIZE - sizeof(dsa_pointer)) - 1) / + (FPM_PAGE_SIZE - sizeof(dsa_pointer))) * + sizeof(dsa_pointer); + /* Add padding up to next page boundary. */ if (metadata_bytes % FPM_PAGE_SIZE != 0) metadata_bytes += FPM_PAGE_SIZE - (metadata_bytes % FPM_PAGE_SIZE); total_size = metadata_bytes + usable_pages * FPM_PAGE_SIZE; + total_requested_pages = total_size / FPM_PAGE_SIZE; + + /* + * Verify that we allocated enough pagemap entries for metadata and + * usable pages. This reverse-engineers the new calculation of + * "metadata_bytes" done based on the new "requested_pages" for an + * odd-sized segment. + */ + Assert((metadata_bytes - MAXALIGN(sizeof(dsa_segment_header)) - + MAXALIGN(sizeof(FreePageManager))) / sizeof(dsa_pointer) >= total_requested_pages); /* Is that too large for dsa_pointer's addressing scheme? */ if (total_size > DSA_MAX_SEGMENT_SIZE) diff -Nru postgresql-17-17.9/src/backend/utils/mmgr/generation.c postgresql-17-17.10/src/backend/utils/mmgr/generation.c --- postgresql-17-17.9/src/backend/utils/mmgr/generation.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/mmgr/generation.c 2026-05-11 19:46:41.000000000 +0000 @@ -733,6 +733,11 @@ } #ifdef MEMORY_CONTEXT_CHECKING + /* See comments in AllocSetFree about uses of ERROR and WARNING here */ + /* Test for previously-freed chunk */ + if (unlikely(chunk->requested_size == InvalidAllocSize)) + elog(ERROR, "detected double pfree in %s %p", + ((MemoryContext) block->context)->name, chunk); /* Test for someone scribbling on unused space in chunk */ Assert(chunk->requested_size < chunksize); if (!sentinel_ok(pointer, chunk->requested_size)) @@ -838,6 +843,11 @@ set = block->context; #ifdef MEMORY_CONTEXT_CHECKING + /* See comments in AllocSetFree about uses of ERROR and WARNING here */ + /* Test for previously-freed chunk */ + if (unlikely(chunk->requested_size == InvalidAllocSize)) + elog(ERROR, "detected realloc of freed chunk in %s %p", + ((MemoryContext) set)->name, chunk); /* Test for someone scribbling on unused space in chunk */ Assert(chunk->requested_size < oldsize); if (!sentinel_ok(pointer, chunk->requested_size)) diff -Nru postgresql-17-17.9/src/backend/utils/mmgr/mcxt.c postgresql-17-17.10/src/backend/utils/mmgr/mcxt.c --- postgresql-17-17.9/src/backend/utils/mmgr/mcxt.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/mmgr/mcxt.c 2026-05-11 19:46:41.000000000 +0000 @@ -21,6 +21,7 @@ #include "postgres.h" +#include "common/int.h" #include "mb/pg_wchar.h" #include "miscadmin.h" #include "utils/memdebug.h" @@ -169,6 +170,8 @@ static void MemoryContextStatsPrint(MemoryContext context, void *passthru, const char *stats_string, bool print_to_stderr); +static pg_noinline void add_size_error(Size s1, Size s2) pg_attribute_noreturn(); +static pg_noinline void mul_size_error(Size s1, Size s2) pg_attribute_noreturn(); /* * You should not do memory allocations within a critical section, because @@ -1652,6 +1655,132 @@ } /* + * Support for safe calculation of memory request sizes + * + * These functions perform the requested calculation, but throw error if the + * result overflows. + * + * An important property of these functions is that if an argument was a + * negative signed int before promotion (implying overflow in calculating it) + * we will detect that as an error. That happens because we reject results + * larger than SIZE_MAX / 2 later on, in the actual allocation step. + */ +Size +add_size(Size s1, Size s2) +{ + Size result; + + if (unlikely(pg_add_size_overflow(s1, s2, &result))) + add_size_error(s1, s2); + return result; +} + +static pg_noinline void +add_size_error(Size s1, Size s2) +{ + ereport(ERROR, + (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), + errmsg("invalid memory allocation request size %zu + %zu", + s1, s2))); +} + +Size +mul_size(Size s1, Size s2) +{ + Size result; + + if (unlikely(pg_mul_size_overflow(s1, s2, &result))) + mul_size_error(s1, s2); + return result; +} + +static pg_noinline void +mul_size_error(Size s1, Size s2) +{ + ereport(ERROR, + (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), + errmsg("invalid memory allocation request size %zu * %zu", + s1, s2))); +} + +/* + * palloc_mul + * Equivalent to palloc(mul_size(s1, s2)). + */ +void * +palloc_mul(Size s1, Size s2) +{ + /* inline mul_size() for efficiency */ + Size req; + + if (unlikely(pg_mul_size_overflow(s1, s2, &req))) + mul_size_error(s1, s2); + return palloc(req); +} + +/* + * palloc0_mul + * Equivalent to palloc0(mul_size(s1, s2)). + * + * This is comparable to standard calloc's behavior. + */ +void * +palloc0_mul(Size s1, Size s2) +{ + /* inline mul_size() for efficiency */ + Size req; + + if (unlikely(pg_mul_size_overflow(s1, s2, &req))) + mul_size_error(s1, s2); + return palloc0(req); +} + +/* + * palloc_mul_extended + * Equivalent to palloc_extended(mul_size(s1, s2), flags). + */ +void * +palloc_mul_extended(Size s1, Size s2, int flags) +{ + /* inline mul_size() for efficiency */ + Size req; + + if (unlikely(pg_mul_size_overflow(s1, s2, &req))) + mul_size_error(s1, s2); + return palloc_extended(req, flags); +} + +/* + * repalloc_mul + * Equivalent to repalloc(p, mul_size(s1, s2)). + */ +void * +repalloc_mul(void *p, Size s1, Size s2) +{ + /* inline mul_size() for efficiency */ + Size req; + + if (unlikely(pg_mul_size_overflow(s1, s2, &req))) + mul_size_error(s1, s2); + return repalloc(p, req); +} + +/* + * repalloc_mul_extended + * Equivalent to repalloc_extended(p, mul_size(s1, s2), flags). + */ +void * +repalloc_mul_extended(void *p, Size s1, Size s2, int flags) +{ + /* inline mul_size() for efficiency */ + Size req; + + if (unlikely(pg_mul_size_overflow(s1, s2, &req))) + mul_size_error(s1, s2); + return repalloc_extended(p, req, flags); +} + +/* * MemoryContextAllocHuge * Allocate (possibly-expansive) space within the specified context. * diff -Nru postgresql-17-17.9/src/backend/utils/mmgr/slab.c postgresql-17-17.10/src/backend/utils/mmgr/slab.c --- postgresql-17-17.9/src/backend/utils/mmgr/slab.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/mmgr/slab.c 2026-05-11 19:46:41.000000000 +0000 @@ -514,6 +514,7 @@ MemoryChunkSetHdrMask(chunk, block, MAXALIGN(slab->chunkSize), MCTX_SLAB_ID); #ifdef MEMORY_CONTEXT_CHECKING + chunk->requested_size = size; /* slab mark to catch clobber of "unused" space */ Assert(slab->chunkSize < (slab->fullChunkSize - Slab_CHUNKHDRSZ)); set_sentinel(MemoryChunkGetPointer(chunk), size); @@ -720,11 +721,18 @@ slab = block->slab; #ifdef MEMORY_CONTEXT_CHECKING + /* See comments in AllocSetFree about uses of ERROR and WARNING here */ + /* Test for previously-freed chunk */ + if (unlikely(chunk->requested_size == InvalidAllocSize)) + elog(ERROR, "detected double pfree in %s %p", + slab->header.name, chunk); /* Test for someone scribbling on unused space in chunk */ Assert(slab->chunkSize < (slab->fullChunkSize - Slab_CHUNKHDRSZ)); if (!sentinel_ok(pointer, slab->chunkSize)) elog(WARNING, "detected write past chunk end in %s %p", slab->header.name, chunk); + /* Reset requested_size to InvalidAllocSize in free chunks */ + chunk->requested_size = InvalidAllocSize; #endif /* push this chunk onto the head of the block's free list */ diff -Nru postgresql-17-17.9/src/backend/utils/sort/tuplestore.c postgresql-17-17.10/src/backend/utils/sort/tuplestore.c --- postgresql-17-17.9/src/backend/utils/sort/tuplestore.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/backend/utils/sort/tuplestore.c 2026-05-11 19:46:41.000000000 +0000 @@ -673,10 +673,10 @@ /* OK, do it */ FREEMEM(state, GetMemoryChunkSpace(state->memtuples)); - state->memtupsize = newmemtupsize; state->memtuples = (void **) repalloc_huge(state->memtuples, - state->memtupsize * sizeof(void *)); + newmemtupsize * sizeof(void *)); + state->memtupsize = newmemtupsize; USEMEM(state, GetMemoryChunkSpace(state->memtuples)); if (LACKMEM(state)) elog(ERROR, "unexpected out-of-memory situation in tuplestore"); @@ -1221,7 +1221,19 @@ if (i >= state->memtupcount) break; WRITETUP(state, state->memtuples[i]); + + /* + * Increase memtupdeleted to track the fact that we just deleted that + * tuple. Think not to remove this on the grounds that we'll reset + * memtupdeleted to zero below. We might not reach that if some later + * WRITETUP fails (e.g. due to overrunning temp_file_limit). If so, + * we'd error out leaving an effectively-corrupt tuplestore, which + * would be quite bad if it's a persistent data structure such as a + * Portal's holdStore. + */ + state->memtupdeleted++; } + /* Now we can reset memtupdeleted along with memtupcount */ state->memtupdeleted = 0; state->memtupcount = 0; } @@ -1408,8 +1420,10 @@ FREEMEM(state, GetMemoryChunkSpace(state->memtuples[i])); pfree(state->memtuples[i]); state->memtuples[i] = NULL; + /* As in dumptuples(), increment memtupdeleted synchronously */ + state->memtupdeleted++; } - state->memtupdeleted = nremove; + Assert(state->memtupdeleted == nremove); /* mark tuplestore as truncated (used for Assert crosschecks only) */ state->truncated = true; diff -Nru postgresql-17-17.9/src/bin/initdb/initdb.c postgresql-17-17.10/src/bin/initdb/initdb.c --- postgresql-17-17.9/src/bin/initdb/initdb.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/initdb/initdb.c 2026-05-11 19:46:41.000000000 +0000 @@ -2362,7 +2362,7 @@ /* validate that we can extract the language */ status = U_ZERO_ERROR; uloc_getLanguage(loc_str, lang, ULOC_LANG_CAPACITY, &status); - if (U_FAILURE(status)) + if (U_FAILURE(status) || status == U_STRING_NOT_TERMINATED_WARNING) { pg_fatal("could not get language from locale \"%s\": %s", loc_str, u_errorName(status)); @@ -2382,7 +2382,7 @@ status = U_ZERO_ERROR; uloc_getLanguage(otherloc, otherlang, ULOC_LANG_CAPACITY, &status); - if (U_FAILURE(status)) + if (U_FAILURE(status) || status == U_STRING_NOT_TERMINATED_WARNING) continue; if (strcmp(lang, otherlang) == 0) diff -Nru postgresql-17-17.9/src/bin/pg_basebackup/bbstreamer_file.c postgresql-17-17.10/src/bin/pg_basebackup/bbstreamer_file.c --- postgresql-17-17.9/src/bin/pg_basebackup/bbstreamer_file.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_basebackup/bbstreamer_file.c 2026-05-11 19:46:41.000000000 +0000 @@ -215,6 +215,10 @@ case BBSTREAMER_MEMBER_HEADER: Assert(mystreamer->file == NULL); + if (!path_is_safe_for_extraction(member->pathname)) + pg_fatal("tar member has unsafe path name: \"%s\"", + member->pathname); + /* Prepend basepath. */ snprintf(mystreamer->filename, sizeof(mystreamer->filename), "%s/%s", mystreamer->basepath, member->pathname); @@ -233,6 +237,14 @@ if (mystreamer->link_map) linktarget = mystreamer->link_map(linktarget); + + if (!is_absolute_path(linktarget) && + !path_is_safe_for_extraction(member->linktarget)) + { + pg_fatal("link target has unsafe path name: \"%s\"", + member->linktarget); + } + extract_link(mystreamer->filename, linktarget); } else @@ -263,7 +275,9 @@ case BBSTREAMER_MEMBER_TRAILER: if (mystreamer->file == NULL) break; - fclose(mystreamer->file); + if (fclose(mystreamer->file) != 0) + pg_fatal("could not close file \"%s\": %m", + mystreamer->filename); mystreamer->file = NULL; break; diff -Nru postgresql-17-17.9/src/bin/pg_basebackup/bbstreamer_gzip.c postgresql-17-17.10/src/bin/pg_basebackup/bbstreamer_gzip.c --- postgresql-17-17.9/src/bin/pg_basebackup/bbstreamer_gzip.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_basebackup/bbstreamer_gzip.c 2026-05-11 19:46:41.000000000 +0000 @@ -292,8 +292,9 @@ */ res = inflate(zs, Z_NO_FLUSH); - if (res == Z_STREAM_ERROR) - pg_log_error("could not decompress data: %s", zs->msg); + if (res != Z_OK && res != Z_STREAM_END && res != Z_BUF_ERROR) + pg_fatal("could not decompress data: %s", + zs->msg ? zs->msg : "unknown error"); mystreamer->bytes_written = mystreamer->base.bbs_buffer.maxlen - zs->avail_out; @@ -323,10 +324,11 @@ * End of the stream, if there is some pending data in output buffers then * we must forward it to next streamer. */ - bbstreamer_content(mystreamer->base.bbs_next, NULL, - mystreamer->base.bbs_buffer.data, - mystreamer->base.bbs_buffer.maxlen, - BBSTREAMER_UNKNOWN); + if (mystreamer->bytes_written > 0) + bbstreamer_content(mystreamer->base.bbs_next, NULL, + mystreamer->base.bbs_buffer.data, + mystreamer->bytes_written, + BBSTREAMER_UNKNOWN); bbstreamer_finalize(mystreamer->base.bbs_next); } @@ -337,7 +339,12 @@ static void bbstreamer_gzip_decompressor_free(bbstreamer *streamer) { + bbstreamer_gzip_decompressor *mystreamer; + + mystreamer = (bbstreamer_gzip_decompressor *) streamer; + bbstreamer_free(streamer->bbs_next); + inflateEnd(&mystreamer->zstream); pfree(streamer->bbs_buffer.data); pfree(streamer); } diff -Nru postgresql-17-17.9/src/bin/pg_basebackup/bbstreamer_lz4.c postgresql-17-17.10/src/bin/pg_basebackup/bbstreamer_lz4.c --- postgresql-17-17.9/src/bin/pg_basebackup/bbstreamer_lz4.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_basebackup/bbstreamer_lz4.c 2026-05-11 19:46:41.000000000 +0000 @@ -92,8 +92,8 @@ ctxError = LZ4F_createCompressionContext(&streamer->cctx, LZ4F_VERSION); if (LZ4F_isError(ctxError)) - pg_log_error("could not create lz4 compression context: %s", - LZ4F_getErrorName(ctxError)); + pg_fatal("could not create lz4 compression context: %s", + LZ4F_getErrorName(ctxError)); return &streamer->base; #else @@ -137,8 +137,8 @@ &mystreamer->prefs); if (LZ4F_isError(compressed_size)) - pg_log_error("could not write lz4 header: %s", - LZ4F_getErrorName(compressed_size)); + pg_fatal("could not write lz4 header: %s", + LZ4F_getErrorName(compressed_size)); mystreamer->bytes_written += compressed_size; mystreamer->header_written = true; @@ -186,8 +186,8 @@ next_in, len, NULL); if (LZ4F_isError(compressed_size)) - pg_log_error("could not compress data: %s", - LZ4F_getErrorName(compressed_size)); + pg_fatal("could not compress data: %s", + LZ4F_getErrorName(compressed_size)); mystreamer->bytes_written += compressed_size; } @@ -238,8 +238,8 @@ next_out, avail_out, NULL); if (LZ4F_isError(compressed_size)) - pg_log_error("could not end lz4 compression: %s", - LZ4F_getErrorName(compressed_size)); + pg_fatal("could not end lz4 compression: %s", + LZ4F_getErrorName(compressed_size)); mystreamer->bytes_written += compressed_size; @@ -351,18 +351,21 @@ next_in, &read_size, NULL); if (LZ4F_isError(ret)) - pg_log_error("could not decompress data: %s", - LZ4F_getErrorName(ret)); + pg_fatal("could not decompress data: %s", + LZ4F_getErrorName(ret)); /* Update input buffer based on number of bytes consumed */ avail_in -= read_size; next_in += read_size; + /* Update output buffer based on number of bytes produced */ + avail_out -= out_size; + next_out += out_size; mystreamer->bytes_written += out_size; /* * If output buffer is full then forward the content to next streamer - * and update the output buffer. + * and reset the output buffer. */ if (mystreamer->bytes_written >= mystreamer->base.bbs_buffer.maxlen) { @@ -372,13 +375,8 @@ context); avail_out = mystreamer->base.bbs_buffer.maxlen; - mystreamer->bytes_written = 0; next_out = (uint8 *) mystreamer->base.bbs_buffer.data; - } - else - { - avail_out = mystreamer->base.bbs_buffer.maxlen - mystreamer->bytes_written; - next_out += mystreamer->bytes_written; + mystreamer->bytes_written = 0; } } } @@ -397,10 +395,11 @@ * End of the stream, if there is some pending data in output buffers then * we must forward it to next streamer. */ - bbstreamer_content(mystreamer->base.bbs_next, NULL, - mystreamer->base.bbs_buffer.data, - mystreamer->base.bbs_buffer.maxlen, - BBSTREAMER_UNKNOWN); + if (mystreamer->bytes_written > 0) + bbstreamer_content(mystreamer->base.bbs_next, NULL, + mystreamer->base.bbs_buffer.data, + mystreamer->bytes_written, + BBSTREAMER_UNKNOWN); bbstreamer_finalize(mystreamer->base.bbs_next); } diff -Nru postgresql-17-17.9/src/bin/pg_basebackup/bbstreamer_tar.c postgresql-17-17.10/src/bin/pg_basebackup/bbstreamer_tar.c --- postgresql-17-17.9/src/bin/pg_basebackup/bbstreamer_tar.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_basebackup/bbstreamer_tar.c 2026-05-11 19:46:41.000000000 +0000 @@ -224,7 +224,8 @@ /* OK, now we can send it. */ bbstreamer_content(mystreamer->base.bbs_next, &mystreamer->member, - data, mystreamer->pad_bytes_expected, + mystreamer->base.bbs_buffer.data, + mystreamer->pad_bytes_expected, BBSTREAMER_MEMBER_TRAILER); /* Expect next file header. */ @@ -290,6 +291,9 @@ strlcpy(member->pathname, &buffer[TAR_OFFSET_NAME], MAXPGPATH); if (member->pathname[0] == '\0') pg_fatal("tar member has empty name"); + if (!path_is_safe_for_extraction(member->pathname)) + pg_fatal("tar member has unsafe path name: \"%s\"", + member->pathname); member->size = read_tar_number(&buffer[TAR_OFFSET_SIZE], 12); member->mode = read_tar_number(&buffer[TAR_OFFSET_MODE], 8); member->uid = read_tar_number(&buffer[TAR_OFFSET_UID], 8); @@ -342,6 +346,7 @@ { pfree(streamer->bbs_buffer.data); bbstreamer_free(streamer->bbs_next); + pfree(streamer); } /* diff -Nru postgresql-17-17.9/src/bin/pg_basebackup/bbstreamer_zstd.c postgresql-17-17.10/src/bin/pg_basebackup/bbstreamer_zstd.c --- postgresql-17-17.9/src/bin/pg_basebackup/bbstreamer_zstd.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_basebackup/bbstreamer_zstd.c 2026-05-11 19:46:41.000000000 +0000 @@ -112,11 +112,8 @@ ZSTD_c_enableLongDistanceMatching, compress->long_distance); if (ZSTD_isError(ret)) - { - pg_log_error("could not enable long-distance mode: %s", - ZSTD_getErrorName(ret)); - exit(1); - } + pg_fatal("could not enable long-distance mode: %s", + ZSTD_getErrorName(ret)); } /* Initialize the ZSTD output buffer. */ @@ -178,8 +175,8 @@ &inBuf, ZSTD_e_continue); if (ZSTD_isError(yet_to_flush)) - pg_log_error("could not compress data: %s", - ZSTD_getErrorName(yet_to_flush)); + pg_fatal("could not compress data: %s", + ZSTD_getErrorName(yet_to_flush)); } } @@ -220,8 +217,8 @@ &in, ZSTD_e_end); if (ZSTD_isError(yet_to_flush)) - pg_log_error("could not compress data: %s", - ZSTD_getErrorName(yet_to_flush)); + pg_fatal("could not compress data: %s", + ZSTD_getErrorName(yet_to_flush)); } while (yet_to_flush > 0); @@ -326,8 +323,8 @@ &mystreamer->zstd_outBuf, &inBuf); if (ZSTD_isError(ret)) - pg_log_error("could not decompress data: %s", - ZSTD_getErrorName(ret)); + pg_fatal("could not decompress data: %s", + ZSTD_getErrorName(ret)); } } @@ -346,7 +343,7 @@ if (mystreamer->zstd_outBuf.pos > 0) bbstreamer_content(mystreamer->base.bbs_next, NULL, mystreamer->base.bbs_buffer.data, - mystreamer->base.bbs_buffer.maxlen, + mystreamer->zstd_outBuf.pos, BBSTREAMER_UNKNOWN); bbstreamer_finalize(mystreamer->base.bbs_next); diff -Nru postgresql-17-17.9/src/bin/pg_basebackup/pg_createsubscriber.c postgresql-17-17.10/src/bin/pg_basebackup/pg_createsubscriber.c --- postgresql-17-17.9/src/bin/pg_basebackup/pg_createsubscriber.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_basebackup/pg_createsubscriber.c 2026-05-11 19:46:41.000000000 +0000 @@ -1063,18 +1063,23 @@ { PQExpBuffer query = createPQExpBuffer(); PGresult *res; + char *subname_esc; Assert(conn != NULL); + subname_esc = PQescapeIdentifier(conn, subname, strlen(subname)); + /* * Construct a query string. These commands are allowed to be executed * within a transaction. */ appendPQExpBuffer(query, "ALTER SUBSCRIPTION %s DISABLE;", - subname); + subname_esc); appendPQExpBuffer(query, " ALTER SUBSCRIPTION %s SET (slot_name = NONE);", - subname); - appendPQExpBuffer(query, " DROP SUBSCRIPTION %s;", subname); + subname_esc); + appendPQExpBuffer(query, " DROP SUBSCRIPTION %s;", subname_esc); + + PQfreemem(subname_esc); pg_log_info("dropping subscription \"%s\" in database \"%s\"", subname, dbname); diff -Nru postgresql-17-17.9/src/bin/pg_basebackup/po/ru.po postgresql-17-17.10/src/bin/pg_basebackup/po/ru.po --- postgresql-17-17.9/src/bin/pg_basebackup/po/ru.po 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_basebackup/po/ru.po 2026-05-11 19:46:41.000000000 +0000 @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: pg_basebackup (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-11-09 06:28+0200\n" +"POT-Creation-Date: 2026-05-10 08:01+0300\n" "PO-Revision-Date: 2025-11-09 08:45+0200\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -39,8 +39,8 @@ #: ../../common/compression.c:132 ../../common/compression.c:141 #: ../../common/compression.c:150 bbstreamer_gzip.c:116 bbstreamer_gzip.c:249 -#: bbstreamer_lz4.c:100 bbstreamer_lz4.c:298 bbstreamer_zstd.c:129 -#: bbstreamer_zstd.c:284 +#: bbstreamer_lz4.c:100 bbstreamer_lz4.c:298 bbstreamer_zstd.c:126 +#: bbstreamer_zstd.c:281 #, c-format msgid "this build does not support compression with %s" msgstr "эта сборка программы не поддерживает сжатие %s" @@ -110,7 +110,7 @@ msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %d из %zu)" #: ../../common/controldata_utils.c:132 ../../common/controldata_utils.c:280 -#: bbstreamer_file.c:138 pg_recvlogical.c:650 +#: bbstreamer_file.c:138 bbstreamer_file.c:267 pg_recvlogical.c:650 #, c-format msgid "could not close file \"%s\": %m" msgstr "не удалось закрыть файл \"%s\": %m" @@ -255,7 +255,7 @@ msgid "could not write to file \"%s\": %m" msgstr "не удалось записать в файл \"%s\": %m" -#: ../../fe_utils/recovery_gen.c:152 bbstreamer_file.c:93 bbstreamer_file.c:361 +#: ../../fe_utils/recovery_gen.c:152 bbstreamer_file.c:93 bbstreamer_file.c:363 #: pg_basebackup.c:1497 pg_basebackup.c:1706 #, c-format msgid "could not create file \"%s\": %m" @@ -274,28 +274,28 @@ msgstr "" "имя базы данных содержит символ новой строки или перевода каретки: \"%s\"\n" -#: bbstreamer_file.c:275 +#: bbstreamer_file.c:277 #, c-format msgid "unexpected state while extracting archive" msgstr "неожиданное состояние при извлечении архива" -#: bbstreamer_file.c:321 pg_basebackup.c:698 pg_basebackup.c:712 +#: bbstreamer_file.c:323 pg_basebackup.c:698 pg_basebackup.c:712 #: pg_basebackup.c:757 #, c-format msgid "could not create directory \"%s\": %m" msgstr "не удалось создать каталог \"%s\": %m" -#: bbstreamer_file.c:326 +#: bbstreamer_file.c:328 #, c-format msgid "could not set permissions on directory \"%s\": %m" msgstr "не удалось установить права для каталога \"%s\": %m" -#: bbstreamer_file.c:345 +#: bbstreamer_file.c:347 #, c-format msgid "could not create symbolic link from \"%s\" to \"%s\": %m" msgstr "не удалось создать символическую ссылку \"%s\" в \"%s\": %m" -#: bbstreamer_file.c:365 +#: bbstreamer_file.c:367 #, c-format msgid "could not set permissions on file \"%s\": %m" msgstr "не удалось установить права доступа для файла \"%s\": %m" @@ -335,7 +335,7 @@ msgid "could not initialize compression library" msgstr "не удалось инициализировать библиотеку сжатия" -#: bbstreamer_gzip.c:296 bbstreamer_lz4.c:354 bbstreamer_zstd.c:329 +#: bbstreamer_gzip.c:296 bbstreamer_lz4.c:354 bbstreamer_zstd.c:326 #, c-format msgid "could not decompress data: %s" msgstr "не удалось распаковать данные: %s" @@ -355,7 +355,7 @@ msgid "could not write lz4 header: %s" msgstr "не удалось записать заголовок lz4: %s" -#: bbstreamer_lz4.c:189 bbstreamer_zstd.c:181 bbstreamer_zstd.c:223 +#: bbstreamer_lz4.c:189 bbstreamer_zstd.c:178 bbstreamer_zstd.c:220 #, c-format msgid "could not compress data: %s" msgstr "не удалось сжать данные: %s" @@ -370,22 +370,22 @@ msgid "could not initialize compression library: %s" msgstr "не удалось инициализировать библиотеку сжатия: %s" -#: bbstreamer_tar.c:244 +#: bbstreamer_tar.c:245 #, c-format msgid "tar file trailer exceeds 2 blocks" msgstr "окончание файла tar занимает больше 2 блоков" -#: bbstreamer_tar.c:249 +#: bbstreamer_tar.c:250 #, c-format msgid "unexpected state while parsing tar archive" msgstr "неожиданное состояние при разборе архива tar" -#: bbstreamer_tar.c:292 +#: bbstreamer_tar.c:293 #, c-format msgid "tar member has empty name" msgstr "пустое имя у компонента tar" -#: bbstreamer_tar.c:326 +#: bbstreamer_tar.c:327 #, c-format msgid "COPY stream ended before last file was finished" msgstr "поток COPY закончился до завершения последнего файла" @@ -405,12 +405,12 @@ msgid "could not set compression worker count to %d: %s" msgstr "не удалось установить число потоков сжатия %d: %s" -#: bbstreamer_zstd.c:116 +#: bbstreamer_zstd.c:115 #, c-format msgid "could not enable long-distance mode: %s" msgstr "не удалось включить режим большой дистанции: %s" -#: bbstreamer_zstd.c:275 +#: bbstreamer_zstd.c:272 #, c-format msgid "could not create zstd decompression context" msgstr "не удалось создать контекст распаковки zstd" diff -Nru postgresql-17-17.9/src/bin/pg_combinebackup/po/ru.po postgresql-17-17.10/src/bin/pg_combinebackup/po/ru.po --- postgresql-17-17.9/src/bin/pg_combinebackup/po/ru.po 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_combinebackup/po/ru.po 2026-05-11 19:46:41.000000000 +0000 @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: pg_combinebackup (PostgreSQL) 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2026-02-07 11:39+0200\n" +"POT-Creation-Date: 2026-05-10 08:01+0300\n" "PO-Revision-Date: 2026-02-07 09:22+0200\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -165,91 +165,91 @@ msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "не удалось переименовать файл \"%s\" в \"%s\": %m" -#: ../../common/jsonapi.c:2124 +#: ../../common/jsonapi.c:2175 msgid "Recursive descent parser cannot use incremental lexer." msgstr "" "Инкрементальный лексический анализатор не подходит для нисходящего " "рекурсивного разбора." -#: ../../common/jsonapi.c:2126 +#: ../../common/jsonapi.c:2177 msgid "Incremental parser requires incremental lexer." msgstr "" "Для инкрементального разбора требуется инкрементальный лексический " "анализатор." -#: ../../common/jsonapi.c:2128 +#: ../../common/jsonapi.c:2179 msgid "JSON nested too deep, maximum permitted depth is 6400." msgstr "" "Слишком большая вложенность JSON, максимальная допустимая глубина: 6400." -#: ../../common/jsonapi.c:2130 +#: ../../common/jsonapi.c:2181 #, c-format msgid "Escape sequence \"\\%.*s\" is invalid." msgstr "Неверная спецпоследовательность: \"\\%.*s\"." -#: ../../common/jsonapi.c:2134 +#: ../../common/jsonapi.c:2185 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Символ с кодом 0x%02x необходимо экранировать." -#: ../../common/jsonapi.c:2138 +#: ../../common/jsonapi.c:2189 #, c-format msgid "Expected end of input, but found \"%.*s\"." msgstr "Ожидался конец текста, но обнаружено продолжение \"%.*s\"." -#: ../../common/jsonapi.c:2141 +#: ../../common/jsonapi.c:2192 #, c-format msgid "Expected array element or \"]\", but found \"%.*s\"." msgstr "Ожидался элемент массива или \"]\", но обнаружено \"%.*s\"." -#: ../../common/jsonapi.c:2144 +#: ../../common/jsonapi.c:2195 #, c-format msgid "Expected \",\" or \"]\", but found \"%.*s\"." msgstr "Ожидалась \",\" или \"]\", но обнаружено \"%.*s\"." -#: ../../common/jsonapi.c:2147 +#: ../../common/jsonapi.c:2198 #, c-format msgid "Expected \":\", but found \"%.*s\"." msgstr "Ожидалось \":\", но обнаружено \"%.*s\"." -#: ../../common/jsonapi.c:2150 +#: ../../common/jsonapi.c:2201 #, c-format msgid "Expected JSON value, but found \"%.*s\"." msgstr "Ожидалось значение JSON, но обнаружено \"%.*s\"." -#: ../../common/jsonapi.c:2153 +#: ../../common/jsonapi.c:2204 msgid "The input string ended unexpectedly." msgstr "Неожиданный конец входной строки." -#: ../../common/jsonapi.c:2155 +#: ../../common/jsonapi.c:2206 #, c-format msgid "Expected string or \"}\", but found \"%.*s\"." msgstr "Ожидалась строка или \"}\", но обнаружено \"%.*s\"." -#: ../../common/jsonapi.c:2158 +#: ../../common/jsonapi.c:2209 #, c-format msgid "Expected \",\" or \"}\", but found \"%.*s\"." msgstr "Ожидалась \",\" или \"}\", но обнаружено \"%.*s\"." -#: ../../common/jsonapi.c:2161 +#: ../../common/jsonapi.c:2212 #, c-format msgid "Expected string, but found \"%.*s\"." msgstr "Ожидалась строка, но обнаружено \"%.*s\"." -#: ../../common/jsonapi.c:2164 +#: ../../common/jsonapi.c:2215 #, c-format msgid "Token \"%.*s\" is invalid." msgstr "Ошибочный элемент \"%.*s\"." -#: ../../common/jsonapi.c:2167 +#: ../../common/jsonapi.c:2218 msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 нельзя преобразовать в текст." -#: ../../common/jsonapi.c:2169 +#: ../../common/jsonapi.c:2220 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "За \"\\u\" должны следовать четыре шестнадцатеричные цифры." -#: ../../common/jsonapi.c:2172 +#: ../../common/jsonapi.c:2223 msgid "" "Unicode escape values cannot be used for code point values above 007F when " "the encoding is not UTF8." @@ -257,18 +257,18 @@ "Спецкоды Unicode для значений выше 007F можно использовать только с " "кодировкой UTF8." -#: ../../common/jsonapi.c:2181 +#: ../../common/jsonapi.c:2232 #, c-format msgid "" "Unicode escape value could not be translated to the server's encoding %s." msgstr "Спецкод Unicode нельзя преобразовать в серверную кодировку %s." -#: ../../common/jsonapi.c:2188 +#: ../../common/jsonapi.c:2239 msgid "Unicode high surrogate must not follow a high surrogate." msgstr "" "Старшее слово суррогата Unicode не может следовать за другим старшим словом." -#: ../../common/jsonapi.c:2190 +#: ../../common/jsonapi.c:2241 msgid "Unicode low surrogate must follow a high surrogate." msgstr "Младшее слово суррогата Unicode должно следовать за старшим словом." diff -Nru postgresql-17-17.9/src/bin/pg_combinebackup/t/011_ib_truncation.pl postgresql-17-17.10/src/bin/pg_combinebackup/t/011_ib_truncation.pl --- postgresql-17-17.9/src/bin/pg_combinebackup/t/011_ib_truncation.pl 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_combinebackup/t/011_ib_truncation.pl 2026-05-11 19:46:41.000000000 +0000 @@ -1,7 +1,8 @@ # Copyright (c) 2025-2026, PostgreSQL Global Development Group # -# This test aims to validate that the calculated truncation block never exceeds -# the segment size. +# This test aims to validate two things: (1) that the calculated truncation +# block never exceeds the segment size and (2) that the correct limit block +# length is calculated for the VM fork. use strict; use warnings FATAL => 'all'; @@ -39,7 +40,7 @@ CREATE TABLE t ( id int, data text STORAGE PLAIN - ); + ) WITH (autovacuum_enabled = false); }); # The tuple size should be enough to prevent two tuples from being on the same @@ -83,6 +84,23 @@ $primary->backup('incr', backup_options => [ '--incremental', "$full_backup/backup_manifest" ]); +# We used to have a bug where the wrong limit block was calculated for the +# VM fork, so verify that the WAL summary records the correct VM fork +# truncation limit. We can't just check whether the restored VM fork is +# the right size on disk, because it's so small that the incremental backup +# code will send the entire file. +my $relfilenode = $primary->safe_psql('postgres', + "SELECT pg_relation_filenode('t');"); +my $vm_limits = $primary->safe_psql('postgres', + "SELECT string_agg(relblocknumber::text, ',') + FROM pg_available_wal_summaries() s, + pg_wal_summary_contents(s.tli, s.start_lsn, s.end_lsn) c + WHERE c.relfilenode = $relfilenode + AND c.relforknumber = 2 + AND c.is_limit_block;"); +is($vm_limits, '1', + 'WAL summary has correct VM fork truncation limit'); + # Combine full and incremental backups. Before the fix, this failed because # the INCREMENTAL file header contained an incorrect truncation_block value. my $restored = PostgreSQL::Test::Cluster->new('node2'); diff -Nru postgresql-17-17.9/src/bin/pg_dump/compress_lz4.c postgresql-17-17.10/src/bin/pg_dump/compress_lz4.c --- postgresql-17-17.9/src/bin/pg_dump/compress_lz4.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_dump/compress_lz4.c 2026-05-11 19:46:41.000000000 +0000 @@ -677,6 +677,7 @@ LZ4State *state = (LZ4State *) CFH->private_data; size_t status; int ret; + bool success = true; fp = state->fp; if (state->inited) @@ -688,6 +689,7 @@ { pg_log_error("could not end compression: %s", LZ4F_getErrorName(status)); + success = false; } else { @@ -696,20 +698,27 @@ { errno = (errno) ? errno : ENOSPC; pg_log_error("could not write to output file: %m"); + success = false; } } status = LZ4F_freeCompressionContext(state->ctx); if (LZ4F_isError(status)) + { pg_log_error("could not end compression: %s", LZ4F_getErrorName(status)); + success = false; + } } else { status = LZ4F_freeDecompressionContext(state->dtx); if (LZ4F_isError(status)) + { pg_log_error("could not end decompression: %s", LZ4F_getErrorName(status)); + success = false; + } pg_free(state->overflowbuf); } @@ -724,10 +733,10 @@ if (ret != 0) { pg_log_error("could not close file: %m"); - return false; + success = false; } - return true; + return success; } static bool diff -Nru postgresql-17-17.9/src/bin/pg_dump/pg_dumpall.c postgresql-17-17.10/src/bin/pg_dump/pg_dumpall.c --- postgresql-17-17.9/src/bin/pg_dump/pg_dumpall.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_dump/pg_dumpall.c 2026-05-11 19:46:41.000000000 +0000 @@ -1023,7 +1023,7 @@ * that no longer exist. If we find such cases, print a warning and skip * the entry. */ - dump_grantors = (PQserverVersion(conn) >= 160000); + dump_grantors = (server_version >= 160000); /* * Previous versions of PostgreSQL also did not have grant-level options. @@ -1088,7 +1088,7 @@ if (PQgetisnull(res, start, i_role)) { /* translator: %s represents a numeric role OID */ - pg_log_warning("found orphaned pg_auth_members entry for role %s", + pg_log_warning("ignoring role grant for missing role with OID %s", PQgetvalue(res, start, i_roleid)); break; } @@ -1105,6 +1105,11 @@ remaining = end - start; done = pg_malloc0(remaining * sizeof(bool)); + + /* + * We use a hashtable to track the member names that have been granted + * admin option. Usually a hashtable is overkill, but sometimes not. + */ ht = rolename_create(remaining, NULL); /* @@ -1132,50 +1137,56 @@ for (i = start; i < end; ++i) { char *member; - char *admin_option; char *grantorid; - char *grantor; + char *grantor = NULL; + bool dump_this_grantor = dump_grantors; char *set_option = "true"; + char *admin_option; bool found; /* If we already did this grant, don't do it again. */ if (done[i - start]) continue; - /* Complain about, then ignore, entries with orphaned OIDs. */ + /* Complain about, then ignore, entries for unknown members. */ if (PQgetisnull(res, i, i_member)) { /* translator: %s represents a numeric role OID */ - pg_log_warning("found orphaned pg_auth_members entry for role %s", + pg_log_warning("ignoring role grant to missing role with OID %s", PQgetvalue(res, i, i_memberid)); done[i - start] = true; --remaining; continue; } - if (PQgetisnull(res, i, i_grantor)) + member = PQgetvalue(res, i, i_member); + + /* If the grantor is unknown, complain and dump without it. */ + grantorid = PQgetvalue(res, i, i_grantorid); + if (dump_this_grantor) { - /* translator: %s represents a numeric role OID */ - pg_log_warning("found orphaned pg_auth_members entry for role %s", - PQgetvalue(res, i, i_grantorid)); - done[i - start] = true; - --remaining; - continue; + if (PQgetisnull(res, i, i_grantor)) + { + /* translator: %s represents a numeric role OID */ + pg_log_warning("grant of role \"%s\" to \"%s\" has invalid grantor OID %s", + role, member, grantorid); + pg_log_warning_detail("This grant will be dumped without GRANTED BY."); + dump_this_grantor = false; + } + else + grantor = PQgetvalue(res, i, i_grantor); } - member = PQgetvalue(res, i, i_member); - grantor = PQgetvalue(res, i, i_grantor); - grantorid = PQgetvalue(res, i, i_grantorid); admin_option = PQgetvalue(res, i, i_admin_option); if (dump_grant_options) set_option = PQgetvalue(res, i, i_set_option); /* - * If we're not dumping grantors or if the grantor is the + * If we're not dumping the grantor or if the grantor is the * bootstrap superuser, it's fine to dump this now. Otherwise, * it's got to be someone who has already been granted ADMIN * OPTION. */ - if (dump_grantors && + if (dump_this_grantor && atooid(grantorid) != BOOTSTRAP_SUPERUSERID && rolename_lookup(ht, grantor) == NULL) continue; @@ -1216,7 +1227,7 @@ } if (optbuf->data[0] != '\0') fprintf(OPF, " WITH %s", optbuf->data); - if (dump_grantors) + if (dump_this_grantor) fprintf(OPF, " GRANTED BY %s", fmtId(grantor)); fprintf(OPF, ";\n"); } diff -Nru postgresql-17-17.9/src/bin/pg_dump/po/de.po postgresql-17-17.10/src/bin/pg_dump/po/de.po --- postgresql-17-17.9/src/bin/pg_dump/po/de.po 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_dump/po/de.po 2026-05-11 19:46:41.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-11-05 08:38+0000\n" +"POT-Creation-Date: 2026-05-05 10:30+0000\n" "PO-Revision-Date: 2025-03-11 08:50+0100\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" @@ -39,7 +39,7 @@ #: ../../common/compression.c:132 ../../common/compression.c:141 #: ../../common/compression.c:150 compress_gzip.c:441 compress_gzip.c:448 -#: compress_io.c:109 compress_lz4.c:800 compress_lz4.c:807 compress_zstd.c:26 +#: compress_io.c:109 compress_lz4.c:809 compress_lz4.c:816 compress_zstd.c:26 #: compress_zstd.c:32 #, c-format msgid "this build does not support compression with %s" @@ -535,7 +535,7 @@ msgid "could not free LZ4 decompression context: %s" msgstr "konnte LZ4-Dekomprimierungskontext nicht freigeben: %s" -#: compress_lz4.c:260 compress_lz4.c:267 compress_lz4.c:689 compress_lz4.c:704 +#: compress_lz4.c:260 compress_lz4.c:267 compress_lz4.c:690 compress_lz4.c:708 #, c-format msgid "could not end compression: %s" msgstr "konnte Komprimierung nicht beenden: %s" @@ -560,17 +560,17 @@ msgid "error during writing: %m" msgstr "Fehler beim Schreiben: %m" -#: compress_lz4.c:698 +#: compress_lz4.c:700 #, c-format msgid "could not write to output file: %m" msgstr "konnte nicht in Ausgabedatei schreiben: %m" -#: compress_lz4.c:711 +#: compress_lz4.c:718 #, c-format msgid "could not end decompression: %s" msgstr "konnte Dekomprimierung nicht beenden: %s" -#: compress_lz4.c:726 compress_none.c:156 +#: compress_lz4.c:735 compress_none.c:156 #, c-format msgid "could not close file: %m" msgstr "konnte Datei nicht schließen: %m" @@ -1245,12 +1245,12 @@ msgid "could not get server_version from libpq" msgstr "konnte server_version nicht von libpq ermitteln" -#: pg_backup_db.c:53 pg_dumpall.c:1924 +#: pg_backup_db.c:53 pg_dumpall.c:1935 #, c-format msgid "aborting because of server version mismatch" msgstr "Abbruch wegen unpassender Serverversion" -#: pg_backup_db.c:54 pg_dumpall.c:1925 +#: pg_backup_db.c:54 pg_dumpall.c:1936 #, c-format msgid "server version: %s; %s version: %s" msgstr "Version des Servers: %s; Version von %s: %s" @@ -1260,7 +1260,7 @@ msgid "already connected to a database" msgstr "bereits mit einer Datenbank verbunden" -#: pg_backup_db.c:128 pg_backup_db.c:178 pg_dumpall.c:1771 pg_dumpall.c:1873 +#: pg_backup_db.c:128 pg_backup_db.c:178 pg_dumpall.c:1782 pg_dumpall.c:1884 msgid "Password: " msgstr "Passwort: " @@ -1274,18 +1274,18 @@ msgid "reconnection failed: %s" msgstr "Wiederverbindung fehlgeschlagen: %s" -#: pg_backup_db.c:190 pg_backup_db.c:264 pg_dump.c:808 pg_dump_sort.c:1440 -#: pg_dump_sort.c:1460 pg_dumpall.c:1798 pg_dumpall.c:1882 +#: pg_backup_db.c:190 pg_backup_db.c:264 pg_dump.c:808 pg_dump_sort.c:1451 +#: pg_dump_sort.c:1471 pg_dumpall.c:1809 pg_dumpall.c:1893 #, c-format msgid "%s" msgstr "%s" -#: pg_backup_db.c:271 pg_dumpall.c:1987 pg_dumpall.c:2010 +#: pg_backup_db.c:271 pg_dumpall.c:1998 pg_dumpall.c:2021 #, c-format msgid "query failed: %s" msgstr "Anfrage fehlgeschlagen: %s" -#: pg_backup_db.c:273 pg_dumpall.c:1988 pg_dumpall.c:2011 +#: pg_backup_db.c:273 pg_dumpall.c:1999 pg_dumpall.c:2022 #, c-format msgid "Query was: %s" msgstr "Anfrage war: %s" @@ -2075,7 +2075,7 @@ msgid "invalid output format \"%s\" specified" msgstr "ungültiges Ausgabeformat »%s« angegeben" -#: pg_dump.c:1481 pg_dump.c:1537 pg_dump.c:1590 pg_dumpall.c:1558 +#: pg_dump.c:1481 pg_dump.c:1537 pg_dump.c:1590 pg_dumpall.c:1569 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "falscher qualifizierter Name (zu viele Namensteile): %s" @@ -2502,45 +2502,45 @@ msgid "no referenced object %u %u" msgstr "kein referenziertes Objekt %u %u" -#: pg_dump.c:19086 pg_dump.c:19124 pg_dumpall.c:2056 pg_restore.c:573 +#: pg_dump.c:19086 pg_dump.c:19124 pg_dumpall.c:2067 pg_restore.c:573 #: pg_restore.c:619 #, c-format msgid "%s filter for \"%s\" is not allowed" msgstr "%s-Filter für »%s« ist nicht erlaubt" -#: pg_dump_sort.c:648 +#: pg_dump_sort.c:659 #, c-format msgid "invalid dumpId %d" msgstr "ungültige dumpId %d" -#: pg_dump_sort.c:654 +#: pg_dump_sort.c:665 #, c-format msgid "invalid dependency %d" msgstr "ungültige Abhängigkeit %d" -#: pg_dump_sort.c:818 +#: pg_dump_sort.c:829 #, c-format msgid "could not identify dependency loop" msgstr "konnte Abhängigkeitsschleife nicht bestimmen" -#: pg_dump_sort.c:1436 +#: pg_dump_sort.c:1447 #, c-format msgid "there are circular foreign-key constraints on this table:" msgid_plural "there are circular foreign-key constraints among these tables:" msgstr[0] "Es gibt zirkuläre Fremdschlüssel-Constraints für diese Tabelle:" msgstr[1] "Es gibt zirkuläre Fremdschlüssel-Constraints zwischen diesen Tabellen:" -#: pg_dump_sort.c:1441 +#: pg_dump_sort.c:1452 #, c-format msgid "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints." msgstr "Möglicherweise kann der Dump nur wiederhergestellt werden, wenn --disable-triggers verwendet wird oder die Constraints vorübergehend entfernt werden." -#: pg_dump_sort.c:1442 +#: pg_dump_sort.c:1453 #, c-format msgid "Consider using a full dump instead of a --data-only dump to avoid this problem." msgstr "Führen Sie einen vollen Dump statt eines Dumps mit --data-only durch, um dieses Problem zu vermeiden." -#: pg_dump_sort.c:1454 +#: pg_dump_sort.c:1465 #, c-format msgid "could not resolve dependency loop among these items:" msgstr "konnte Abhängigkeitsschleife zwischen diesen Elementen nicht auflösen:" @@ -2575,7 +2575,7 @@ msgid "options -r/--roles-only and -t/--tablespaces-only cannot be used together" msgstr "Optionen -r/--roles-only und -t/--tablespaces-only können nicht zusammen verwendet werden" -#: pg_dumpall.c:493 pg_dumpall.c:1865 +#: pg_dumpall.c:493 pg_dumpall.c:1876 #, c-format msgid "could not connect to database \"%s\"" msgstr "konnte nicht mit der Datenbank »%s« verbinden" @@ -2692,67 +2692,84 @@ msgstr "mit »pg_« anfangender Rollenname übersprungen (%s)" #. translator: %s represents a numeric role OID -#: pg_dumpall.c:1091 pg_dumpall.c:1149 pg_dumpall.c:1158 +#: pg_dumpall.c:1091 #, c-format -msgid "found orphaned pg_auth_members entry for role %s" -msgstr "verwaister pg_auth_members-Eintrag für Rolle %s gefunden" +msgid "ignoring role grant for missing role with OID %s" +msgstr "Rollen-Grant für fehlende Rolle mit OID %s wird ignoriert" -#: pg_dumpall.c:1124 +#: pg_dumpall.c:1129 #, c-format msgid "could not find a legal dump ordering for memberships in role \"%s\"" msgstr "konnte keine legale Dump-Reihenfolge für Mitgliedschaften in Rolle »%s« finden" -#: pg_dumpall.c:1279 +#. translator: %s represents a numeric role OID +#: pg_dumpall.c:1155 +#, c-format +msgid "ignoring role grant to missing role with OID %s" +msgstr "Rollen-Grant an fehlende Rolle mit OID %s wird ignoriert" + +#. translator: %s represents a numeric role OID +#: pg_dumpall.c:1170 +#, c-format +msgid "grant of role \"%s\" to \"%s\" has invalid grantor OID %s" +msgstr "Grant von Rolle »%s« an »%s« hat ungültige Grantor-OID %s" + +#: pg_dumpall.c:1172 +#, c-format +msgid "This grant will be dumped without GRANTED BY." +msgstr "Dieser Grant wird ohne GRANTED BY ausgegeben werden." + +#: pg_dumpall.c:1290 #, c-format msgid "could not parse ACL list (%s) for parameter \"%s\"" msgstr "konnte ACL-Zeichenkette (%s) für Parameter »%s« nicht interpretieren" -#: pg_dumpall.c:1406 +#: pg_dumpall.c:1417 #, c-format msgid "could not parse ACL list (%s) for tablespace \"%s\"" msgstr "konnte ACL-Zeichenkette (%s) für Tablespace »%s« nicht interpretieren" -#: pg_dumpall.c:1620 +#: pg_dumpall.c:1631 #, c-format msgid "excluding database \"%s\"" msgstr "Datenbank »%s« übersprungen" -#: pg_dumpall.c:1624 +#: pg_dumpall.c:1635 #, c-format msgid "dumping database \"%s\"" msgstr "Ausgabe der Datenbank »%s«" -#: pg_dumpall.c:1657 +#: pg_dumpall.c:1668 #, c-format msgid "pg_dump failed on database \"%s\", exiting" msgstr "pg_dump für Datenbank »%s« fehlgeschlagen; beende" -#: pg_dumpall.c:1663 +#: pg_dumpall.c:1674 #, c-format msgid "could not re-open the output file \"%s\": %m" msgstr "konnte die Ausgabedatei »%s« nicht neu öffnen: %m" -#: pg_dumpall.c:1707 +#: pg_dumpall.c:1718 #, c-format msgid "running \"%s\"" msgstr "führe »%s« aus" -#: pg_dumpall.c:1908 +#: pg_dumpall.c:1919 #, c-format msgid "could not get server version" msgstr "konnte Version des Servers nicht ermitteln" -#: pg_dumpall.c:1911 +#: pg_dumpall.c:1922 #, c-format msgid "could not parse server version \"%s\"" msgstr "konnte Versionszeichenkette »%s« nicht entziffern" -#: pg_dumpall.c:1981 pg_dumpall.c:2004 +#: pg_dumpall.c:1992 pg_dumpall.c:2015 #, c-format msgid "executing %s" msgstr "führe %s aus" -#: pg_dumpall.c:2076 +#: pg_dumpall.c:2087 msgid "unsupported filter object" msgstr "nicht unterstütztes Filterobjekt" diff -Nru postgresql-17-17.9/src/bin/pg_dump/po/fr.po postgresql-17-17.10/src/bin/pg_dump/po/fr.po --- postgresql-17-17.9/src/bin/pg_dump/po/fr.po 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_dump/po/fr.po 2026-05-11 19:46:41.000000000 +0000 @@ -12,8 +12,8 @@ msgstr "" "Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-09-19 19:08+0000\n" -"PO-Revision-Date: 2025-09-20 10:57+0200\n" +"POT-Creation-Date: 2026-04-24 02:58+0000\n" +"PO-Revision-Date: 2026-04-24 17:55+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: French \n" "Language: fr\n" @@ -21,7 +21,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 3.7\n" +"X-Generator: Poedit 3.9\n" #: ../../../src/common/logging.c:276 #, c-format @@ -44,8 +44,8 @@ msgstr "astuce : " #: ../../common/compression.c:132 ../../common/compression.c:141 -#: ../../common/compression.c:150 compress_gzip.c:428 compress_gzip.c:435 -#: compress_io.c:109 compress_lz4.c:800 compress_lz4.c:807 compress_zstd.c:26 +#: ../../common/compression.c:150 compress_gzip.c:441 compress_gzip.c:448 +#: compress_io.c:109 compress_lz4.c:809 compress_lz4.c:816 compress_zstd.c:26 #: compress_zstd.c:32 #, c-format msgid "this build does not support compression with %s" @@ -478,48 +478,48 @@ msgid "could not parse numeric array \"%s\": invalid character in number" msgstr "n'a pas pu analyser le tableau numérique « %s » : caractère invalide dans le nombre" -#: compress_gzip.c:69 compress_gzip.c:183 +#: compress_gzip.c:78 compress_gzip.c:192 #, c-format msgid "could not initialize compression library: %s" msgstr "n'a pas pu initialiser la bibliothèque de compression : %s" -#: compress_gzip.c:93 +#: compress_gzip.c:102 #, c-format msgid "could not close compression stream: %s" msgstr "n'a pas pu fermer le flux de compression : %s" -#: compress_gzip.c:113 compress_lz4.c:228 compress_zstd.c:110 +#: compress_gzip.c:122 compress_lz4.c:228 compress_zstd.c:110 #, c-format msgid "could not compress data: %s" msgstr "n'a pas pu compresser les données : %s" -#: compress_gzip.c:199 compress_gzip.c:214 +#: compress_gzip.c:208 compress_gzip.c:223 #, c-format msgid "could not uncompress data: %s" msgstr "n'a pas pu décompresser les données : %s" -#: compress_gzip.c:221 +#: compress_gzip.c:230 #, c-format msgid "could not close compression library: %s" msgstr "n'a pas pu fermer la bibliothèque de compression : %s" -#: compress_gzip.c:277 compress_lz4.c:513 compress_lz4.c:616 compress_lz4.c:633 +#: compress_gzip.c:290 compress_lz4.c:513 compress_lz4.c:616 compress_lz4.c:633 #, c-format msgid "could not read from input file: %s" msgstr "n'a pas pu lire à partir du fichier en entrée : %s" -#: compress_gzip.c:294 compress_zstd.c:381 +#: compress_gzip.c:307 compress_zstd.c:381 #, c-format msgid "could not write to file: %s" msgstr "n'a pas pu écrire dans le fichier : %s" -#: compress_gzip.c:310 compress_lz4.c:494 compress_none.c:94 +#: compress_gzip.c:323 compress_lz4.c:494 compress_none.c:94 #: compress_none.c:135 compress_zstd.c:314 pg_backup_custom.c:651 #, c-format msgid "could not read from input file: %m" msgstr "n'a pas pu lire à partir du fichier en entrée : %m" -#: compress_gzip.c:312 compress_lz4.c:635 compress_none.c:137 +#: compress_gzip.c:325 compress_lz4.c:635 compress_none.c:137 #: compress_zstd.c:399 pg_backup_custom.c:649 pg_backup_directory.c:547 #: pg_backup_tar.c:740 pg_backup_tar.c:763 #, c-format @@ -541,7 +541,7 @@ msgid "could not free LZ4 decompression context: %s" msgstr "n'a pas pu libérer le contexte de décompression LZ4 : %s" -#: compress_lz4.c:260 compress_lz4.c:267 compress_lz4.c:689 compress_lz4.c:704 +#: compress_lz4.c:260 compress_lz4.c:267 compress_lz4.c:690 compress_lz4.c:708 #, c-format msgid "could not end compression: %s" msgstr "n'a pas pu terminer la compression : %s" @@ -566,17 +566,17 @@ msgid "error during writing: %m" msgstr "erreur lors de l'écriture : %m" -#: compress_lz4.c:698 +#: compress_lz4.c:700 #, c-format msgid "could not write to output file: %m" msgstr "n'a pas pu écrire dans le fichier en sortie : %m" -#: compress_lz4.c:711 +#: compress_lz4.c:718 #, c-format msgid "could not end decompression: %s" msgstr "n'a pas pu terminer la décompression : %s" -#: compress_lz4.c:726 compress_none.c:156 +#: compress_lz4.c:735 compress_none.c:156 #, c-format msgid "could not close file: %m" msgstr "n'a pas pu fermer le fichier : %m" @@ -1255,12 +1255,12 @@ msgid "could not get server_version from libpq" msgstr "n'a pas pu obtenir server_version de libpq" -#: pg_backup_db.c:53 pg_dumpall.c:1924 +#: pg_backup_db.c:53 pg_dumpall.c:1935 #, c-format msgid "aborting because of server version mismatch" msgstr "annulation à cause de la différence des versions" -#: pg_backup_db.c:54 pg_dumpall.c:1925 +#: pg_backup_db.c:54 pg_dumpall.c:1936 #, c-format msgid "server version: %s; %s version: %s" msgstr "version du serveur : %s ; %s version : %s" @@ -1270,7 +1270,7 @@ msgid "already connected to a database" msgstr "déjà connecté à une base de données" -#: pg_backup_db.c:128 pg_backup_db.c:178 pg_dumpall.c:1771 pg_dumpall.c:1873 +#: pg_backup_db.c:128 pg_backup_db.c:178 pg_dumpall.c:1782 pg_dumpall.c:1884 msgid "Password: " msgstr "Mot de passe : " @@ -1284,18 +1284,18 @@ msgid "reconnection failed: %s" msgstr "échec de la reconnexion : %s" -#: pg_backup_db.c:190 pg_backup_db.c:264 pg_dump.c:808 pg_dump_sort.c:1439 -#: pg_dump_sort.c:1459 pg_dumpall.c:1798 pg_dumpall.c:1882 +#: pg_backup_db.c:190 pg_backup_db.c:264 pg_dump.c:808 pg_dump_sort.c:1451 +#: pg_dump_sort.c:1471 pg_dumpall.c:1809 pg_dumpall.c:1893 #, c-format msgid "%s" msgstr "%s" -#: pg_backup_db.c:271 pg_dumpall.c:1987 pg_dumpall.c:2010 +#: pg_backup_db.c:271 pg_dumpall.c:1998 pg_dumpall.c:2021 #, c-format msgid "query failed: %s" msgstr "échec de la requête : %s" -#: pg_backup_db.c:273 pg_dumpall.c:1988 pg_dumpall.c:2011 +#: pg_backup_db.c:273 pg_dumpall.c:1999 pg_dumpall.c:2022 #, c-format msgid "Query was: %s" msgstr "La requête était : %s" @@ -2111,7 +2111,7 @@ msgid "invalid output format \"%s\" specified" msgstr "format de sortie « %s » invalide" -#: pg_dump.c:1481 pg_dump.c:1537 pg_dump.c:1590 pg_dumpall.c:1558 +#: pg_dump.c:1481 pg_dump.c:1537 pg_dump.c:1590 pg_dumpall.c:1569 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "mauvaise qualification du nom (trop de points entre les noms) : %s" @@ -2538,45 +2538,45 @@ msgid "no referenced object %u %u" msgstr "pas d'objet référencé %u %u" -#: pg_dump.c:19086 pg_dump.c:19124 pg_dumpall.c:2056 pg_restore.c:573 +#: pg_dump.c:19086 pg_dump.c:19124 pg_dumpall.c:2067 pg_restore.c:573 #: pg_restore.c:619 #, c-format msgid "%s filter for \"%s\" is not allowed" msgstr "filtre %s pour « %s » n'est pas autorisé" -#: pg_dump_sort.c:647 +#: pg_dump_sort.c:659 #, c-format msgid "invalid dumpId %d" msgstr "dumpId %d invalide" -#: pg_dump_sort.c:653 +#: pg_dump_sort.c:665 #, c-format msgid "invalid dependency %d" msgstr "dépendance invalide %d" -#: pg_dump_sort.c:817 +#: pg_dump_sort.c:829 #, c-format msgid "could not identify dependency loop" msgstr "n'a pas pu identifier la boucle de dépendance" -#: pg_dump_sort.c:1435 +#: pg_dump_sort.c:1447 #, c-format msgid "there are circular foreign-key constraints on this table:" msgid_plural "there are circular foreign-key constraints among these tables:" msgstr[0] "NOTE : il existe des contraintes de clés étrangères circulaires sur cette table :" msgstr[1] "NOTE : il existe des contraintes de clés étrangères circulaires sur ces tables :" -#: pg_dump_sort.c:1440 +#: pg_dump_sort.c:1452 #, c-format msgid "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints." msgstr "Il est possible de restaurer la sauvegarde sans utiliser --disable-triggers ou sans supprimer temporairement les contraintes." -#: pg_dump_sort.c:1441 +#: pg_dump_sort.c:1453 #, c-format msgid "Consider using a full dump instead of a --data-only dump to avoid this problem." msgstr "Considérez l'utilisation d'une sauvegarde complète au lieu d'une sauvegarde des données seulement pour éviter ce problème." -#: pg_dump_sort.c:1453 +#: pg_dump_sort.c:1465 #, c-format msgid "could not resolve dependency loop among these items:" msgstr "n'a pas pu résoudre la boucle de dépendances parmi ces éléments :" @@ -2611,7 +2611,7 @@ msgid "options -r/--roles-only and -t/--tablespaces-only cannot be used together" msgstr "les options « -r/--roles-only » et « -t/--tablespaces-only » ne peuvent pas être utilisées ensemble" -#: pg_dumpall.c:493 pg_dumpall.c:1865 +#: pg_dumpall.c:493 pg_dumpall.c:1876 #, c-format msgid "could not connect to database \"%s\"" msgstr "n'a pas pu se connecter à la base de données « %s »" @@ -2731,67 +2731,84 @@ msgstr "nom de rôle commençant par « pg_ » ignoré (« %s »)" #. translator: %s represents a numeric role OID -#: pg_dumpall.c:1091 pg_dumpall.c:1149 pg_dumpall.c:1158 +#: pg_dumpall.c:1091 #, c-format -msgid "found orphaned pg_auth_members entry for role %s" -msgstr "a trouvé une entrée orpheline dans pg_auth_members pour le rôle %s" +msgid "ignoring role grant for missing role with OID %s" +msgstr "ignore la restitution du rôle pour le rôle manquant d'OID %s" -#: pg_dumpall.c:1124 +#: pg_dumpall.c:1129 #, c-format msgid "could not find a legal dump ordering for memberships in role \"%s\"" msgstr "n'a pas pu trouver un ordre de sauvegarde correct pour les appartenances au rôle « %s »" -#: pg_dumpall.c:1279 +#. translator: %s represents a numeric role OID +#: pg_dumpall.c:1155 +#, c-format +msgid "ignoring role grant to missing role with OID %s" +msgstr "ignore la restitution du rôle vers le rôle manquant d'OID %s" + +#. translator: %s represents a numeric role OID +#: pg_dumpall.c:1170 +#, c-format +msgid "grant of role \"%s\" to \"%s\" has invalid grantor OID %s" +msgstr "la restitution du rôle « %s » à « %s » a un OID invalide pour le rôle donneur %s" + +#: pg_dumpall.c:1172 +#, c-format +msgid "This grant will be dumped without GRANTED BY." +msgstr "Cette restitution de droit sera sauvegardée sans GRANTED BY." + +#: pg_dumpall.c:1290 #, c-format msgid "could not parse ACL list (%s) for parameter \"%s\"" msgstr "n'a pas pu analyser la liste d'ACL (%s) pour le paramètre « %s »" -#: pg_dumpall.c:1406 +#: pg_dumpall.c:1417 #, c-format msgid "could not parse ACL list (%s) for tablespace \"%s\"" msgstr "n'a pas pu analyser la liste d'ACL (%s) pour le tablespace « %s »" -#: pg_dumpall.c:1620 +#: pg_dumpall.c:1631 #, c-format msgid "excluding database \"%s\"" msgstr "exclusion de la base de données « %s »" -#: pg_dumpall.c:1624 +#: pg_dumpall.c:1635 #, c-format msgid "dumping database \"%s\"" msgstr "sauvegarde de la base de données « %s »" -#: pg_dumpall.c:1657 +#: pg_dumpall.c:1668 #, c-format msgid "pg_dump failed on database \"%s\", exiting" msgstr "échec de pg_dump sur la base de données « %s », quitte" -#: pg_dumpall.c:1663 +#: pg_dumpall.c:1674 #, c-format msgid "could not re-open the output file \"%s\": %m" msgstr "n'a pas pu ré-ouvrir le fichier de sortie « %s » : %m" -#: pg_dumpall.c:1707 +#: pg_dumpall.c:1718 #, c-format msgid "running \"%s\"" msgstr "exécute « %s »" -#: pg_dumpall.c:1908 +#: pg_dumpall.c:1919 #, c-format msgid "could not get server version" msgstr "n'a pas pu obtenir la version du serveur" -#: pg_dumpall.c:1911 +#: pg_dumpall.c:1922 #, c-format msgid "could not parse server version \"%s\"" msgstr "n'a pas pu analyser la version du serveur « %s »" -#: pg_dumpall.c:1981 pg_dumpall.c:2004 +#: pg_dumpall.c:1992 pg_dumpall.c:2015 #, c-format msgid "executing %s" msgstr "exécution %s" -#: pg_dumpall.c:2076 +#: pg_dumpall.c:2087 msgid "unsupported filter object" msgstr "objet de filtre non supporté" @@ -3081,5 +3098,9 @@ #~ msgstr "n'a pas pu écrire dans le fichier TOC des Large Objects : %s" #, c-format +#~ msgid "found orphaned pg_auth_members entry for role %s" +#~ msgstr "a trouvé une entrée orpheline dans pg_auth_members pour le rôle %s" + +#, c-format #~ msgid "unhandled mode \"%s\"" #~ msgstr "mode « %s » non géré" diff -Nru postgresql-17-17.9/src/bin/pg_dump/po/ru.po postgresql-17-17.10/src/bin/pg_dump/po/ru.po --- postgresql-17-17.9/src/bin/pg_dump/po/ru.po 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_dump/po/ru.po 2026-05-11 19:46:41.000000000 +0000 @@ -10,8 +10,8 @@ msgstr "" "Project-Id-Version: pg_dump (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2026-02-07 11:39+0200\n" -"PO-Revision-Date: 2025-09-04 22:18+0300\n" +"POT-Creation-Date: 2026-05-10 08:01+0300\n" +"PO-Revision-Date: 2026-05-10 08:53+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -43,7 +43,7 @@ #: ../../common/compression.c:132 ../../common/compression.c:141 #: ../../common/compression.c:150 compress_gzip.c:441 compress_gzip.c:448 -#: compress_io.c:109 compress_lz4.c:800 compress_lz4.c:807 compress_zstd.c:26 +#: compress_io.c:109 compress_lz4.c:809 compress_lz4.c:816 compress_zstd.c:26 #: compress_zstd.c:32 #, c-format msgid "this build does not support compression with %s" @@ -548,7 +548,7 @@ msgid "could not free LZ4 decompression context: %s" msgstr "не удалось освободить контекст распаковки LZ4: %s" -#: compress_lz4.c:260 compress_lz4.c:267 compress_lz4.c:689 compress_lz4.c:704 +#: compress_lz4.c:260 compress_lz4.c:267 compress_lz4.c:690 compress_lz4.c:708 #, c-format msgid "could not end compression: %s" msgstr "не удалось завершить сжатие: %s" @@ -573,17 +573,17 @@ msgid "error during writing: %m" msgstr "ошибка при записи: %m" -#: compress_lz4.c:698 +#: compress_lz4.c:700 #, c-format msgid "could not write to output file: %m" msgstr "не удалось записать в выходной файл: %m" -#: compress_lz4.c:711 +#: compress_lz4.c:718 #, c-format msgid "could not end decompression: %s" msgstr "не удалось завершить распаковку: %s" -#: compress_lz4.c:726 compress_none.c:156 +#: compress_lz4.c:735 compress_none.c:156 #, c-format msgid "could not close file: %m" msgstr "не удалось закрыть файл: %m" @@ -1292,12 +1292,12 @@ msgid "could not get server_version from libpq" msgstr "не удалось получить версию сервера из libpq" -#: pg_backup_db.c:53 pg_dumpall.c:1924 +#: pg_backup_db.c:53 pg_dumpall.c:1935 #, c-format msgid "aborting because of server version mismatch" msgstr "продолжение работы с другой версией сервера невозможно" -#: pg_backup_db.c:54 pg_dumpall.c:1925 +#: pg_backup_db.c:54 pg_dumpall.c:1936 #, c-format msgid "server version: %s; %s version: %s" msgstr "версия сервера: %s; версия %s: %s" @@ -1307,7 +1307,7 @@ msgid "already connected to a database" msgstr "подключение к базе данных уже установлено" -#: pg_backup_db.c:128 pg_backup_db.c:178 pg_dumpall.c:1771 pg_dumpall.c:1873 +#: pg_backup_db.c:128 pg_backup_db.c:178 pg_dumpall.c:1782 pg_dumpall.c:1884 msgid "Password: " msgstr "Пароль: " @@ -1322,17 +1322,17 @@ msgstr "переподключиться не удалось: %s" #: pg_backup_db.c:190 pg_backup_db.c:264 pg_dump.c:808 pg_dump_sort.c:1451 -#: pg_dump_sort.c:1471 pg_dumpall.c:1798 pg_dumpall.c:1882 +#: pg_dump_sort.c:1471 pg_dumpall.c:1809 pg_dumpall.c:1893 #, c-format msgid "%s" msgstr "%s" -#: pg_backup_db.c:271 pg_dumpall.c:1987 pg_dumpall.c:2010 +#: pg_backup_db.c:271 pg_dumpall.c:1998 pg_dumpall.c:2021 #, c-format msgid "query failed: %s" msgstr "ошибка при выполнении запроса: %s" -#: pg_backup_db.c:273 pg_dumpall.c:1988 pg_dumpall.c:2011 +#: pg_backup_db.c:273 pg_dumpall.c:1999 pg_dumpall.c:2022 #, c-format msgid "Query was: %s" msgstr "Выполнялся запрос: %s" @@ -2223,7 +2223,7 @@ msgid "invalid output format \"%s\" specified" msgstr "указан неверный формат вывода: \"%s\"" -#: pg_dump.c:1481 pg_dump.c:1537 pg_dump.c:1590 pg_dumpall.c:1558 +#: pg_dump.c:1481 pg_dump.c:1537 pg_dump.c:1590 pg_dumpall.c:1569 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "неверное полное имя (слишком много компонентов): %s" @@ -2696,7 +2696,7 @@ msgid "no referenced object %u %u" msgstr "нет вышестоящего объекта %u %u" -#: pg_dump.c:19086 pg_dump.c:19124 pg_dumpall.c:2056 pg_restore.c:573 +#: pg_dump.c:19086 pg_dump.c:19124 pg_dumpall.c:2067 pg_restore.c:573 #: pg_restore.c:619 #, c-format msgid "%s filter for \"%s\" is not allowed" @@ -2789,7 +2789,7 @@ "options -r/--roles-only and -t/--tablespaces-only cannot be used together" msgstr "параметры -r/--roles-only и -t/--tablespaces-only исключают друг друга" -#: pg_dumpall.c:493 pg_dumpall.c:1865 +#: pg_dumpall.c:493 pg_dumpall.c:1876 #, c-format msgid "could not connect to database \"%s\"" msgstr "не удалось подключиться к базе данных: \"%s\"" @@ -2915,69 +2915,86 @@ msgstr "имя роли, начинающееся с \"pg_\", пропущено (%s)" #. translator: %s represents a numeric role OID -#: pg_dumpall.c:1091 pg_dumpall.c:1149 pg_dumpall.c:1158 +#: pg_dumpall.c:1091 #, c-format -msgid "found orphaned pg_auth_members entry for role %s" -msgstr "обнаружена потерянная запись pg_auth_members для роли %s" +msgid "ignoring role grant for missing role with OID %s" +msgstr "назначение прав для отсутствующей роли с OID %s игнорируется" -#: pg_dumpall.c:1124 +#: pg_dumpall.c:1129 #, c-format msgid "could not find a legal dump ordering for memberships in role \"%s\"" msgstr "не удалось найти подходящий порядок выгрузки для членов роли \"%s\"" -#: pg_dumpall.c:1279 +#. translator: %s represents a numeric role OID +#: pg_dumpall.c:1155 +#, c-format +msgid "ignoring role grant to missing role with OID %s" +msgstr "назначение прав отсутствующей роли с OID %s игнорируется" + +#. translator: %s represents a numeric role OID +#: pg_dumpall.c:1170 +#, c-format +msgid "grant of role \"%s\" to \"%s\" has invalid grantor OID %s" +msgstr "роль \"%s\" назначена \"%s\" с некорректным OID праводателя %s" + +#: pg_dumpall.c:1172 +#, c-format +msgid "This grant will be dumped without GRANTED BY." +msgstr "Это назначение будет выгружено без GRANTED BY." + +#: pg_dumpall.c:1290 #, c-format msgid "could not parse ACL list (%s) for parameter \"%s\"" msgstr "не удалось разобрать список ACL (%s) для параметра \"%s\"" -#: pg_dumpall.c:1406 +#: pg_dumpall.c:1417 #, c-format msgid "could not parse ACL list (%s) for tablespace \"%s\"" msgstr "" "не удалось разобрать список управления доступом (%s) для табл. пространства " "\"%s\"" -#: pg_dumpall.c:1620 +#: pg_dumpall.c:1631 #, c-format msgid "excluding database \"%s\"" msgstr "база данных \"%s\" исключается" -#: pg_dumpall.c:1624 +#: pg_dumpall.c:1635 #, c-format msgid "dumping database \"%s\"" msgstr "выгрузка базы данных \"%s\"" -#: pg_dumpall.c:1657 +#: pg_dumpall.c:1668 #, c-format msgid "pg_dump failed on database \"%s\", exiting" msgstr "ошибка при обработке базы \"%s\", pg_dump завершается" -#: pg_dumpall.c:1663 +#: pg_dumpall.c:1674 #, c-format msgid "could not re-open the output file \"%s\": %m" msgstr "не удалось повторно открыть выходной файл \"%s\": %m" -#: pg_dumpall.c:1707 +#: pg_dumpall.c:1718 #, c-format msgid "running \"%s\"" msgstr "выполняется \"%s\"" -#: pg_dumpall.c:1908 +#: pg_dumpall.c:1919 #, c-format msgid "could not get server version" msgstr "не удалось узнать версию сервера" -#: pg_dumpall.c:1911 +#: pg_dumpall.c:1922 #, c-format msgid "could not parse server version \"%s\"" msgstr "не удалось разобрать строку версии сервера \"%s\"" -#: pg_dumpall.c:1981 pg_dumpall.c:2004 +#: pg_dumpall.c:1992 pg_dumpall.c:2015 #, c-format msgid "executing %s" msgstr "выполняется %s" -#: pg_dumpall.c:2076 +#: pg_dumpall.c:2087 msgid "unsupported filter object" msgstr "неподдерживаемый объект фильтра" @@ -3290,6 +3307,10 @@ "\n" #, c-format +#~ msgid "found orphaned pg_auth_members entry for role %s" +#~ msgstr "обнаружена потерянная запись pg_auth_members для роли %s" + +#, c-format #~ msgid "unhandled mode \"%s\"" #~ msgstr "необрабатываемый режим \"%s\"" diff -Nru postgresql-17-17.9/src/bin/pg_rewind/file_ops.c postgresql-17-17.10/src/bin/pg_rewind/file_ops.c --- postgresql-17-17.9/src/bin/pg_rewind/file_ops.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_rewind/file_ops.c 2026-05-11 19:46:41.000000000 +0000 @@ -48,6 +48,9 @@ { int mode; + if (!path_is_safe_for_extraction(path)) + pg_fatal("target file path is unsafe for open: \"%s\"", path); + if (dry_run) return; @@ -188,6 +191,9 @@ { char dstpath[MAXPGPATH]; + if (!path_is_safe_for_extraction(path)) + pg_fatal("target file path is unsafe for removal: \"%s\"", path); + if (dry_run) return; @@ -208,6 +214,9 @@ char dstpath[MAXPGPATH]; int fd; + if (!path_is_safe_for_extraction(path)) + pg_fatal("target file path is unsafe for truncation: \"%s\"", path); + if (dry_run) return; @@ -230,6 +239,10 @@ { char dstpath[MAXPGPATH]; + if (!path_is_safe_for_extraction(path)) + pg_fatal("target directory path is unsafe for directory creation: \"%s\"", + path); + if (dry_run) return; @@ -244,6 +257,10 @@ { char dstpath[MAXPGPATH]; + if (!path_is_safe_for_extraction(path)) + pg_fatal("target directory path is unsafe for directory removal: \"%s\"", + path); + if (dry_run) return; @@ -258,6 +275,9 @@ { char dstpath[MAXPGPATH]; + if (!path_is_safe_for_extraction(path)) + pg_fatal("target symlink path is unsafe for creation: \"%s\"", path); + if (dry_run) return; @@ -272,6 +292,9 @@ { char dstpath[MAXPGPATH]; + if (!path_is_safe_for_extraction(path)) + pg_fatal("target symlink path is unsafe for removal: \"%s\"", path); + if (dry_run) return; diff -Nru postgresql-17-17.9/src/bin/pg_test_fsync/po/ru.po postgresql-17-17.10/src/bin/pg_test_fsync/po/ru.po --- postgresql-17-17.9/src/bin/pg_test_fsync/po/ru.po 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_test_fsync/po/ru.po 2026-05-11 19:46:41.000000000 +0000 @@ -101,7 +101,7 @@ #, c-format msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n" msgstr "" -"O_DIRECT на этой платформе не поддерживается для open_datasync и open_sync.\n" +"O_DIRECT на этой платформе поддерживается для open_datasync и open_sync.\n" #: pg_test_fsync.c:224 #, c-format diff -Nru postgresql-17-17.9/src/bin/pg_test_timing/pg_test_timing.c postgresql-17-17.10/src/bin/pg_test_timing/pg_test_timing.c --- postgresql-17-17.9/src/bin/pg_test_timing/pg_test_timing.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_test_timing/pg_test_timing.c 2026-05-11 19:46:41.000000000 +0000 @@ -149,7 +149,7 @@ if (diff < 0) { fprintf(stderr, _("Detected clock going backwards in time.\n")); - fprintf(stderr, _("Time warp: %d ms\n"), diff); + fprintf(stderr, _("Time warp: %d us\n"), diff); exit(1); } diff -Nru postgresql-17-17.9/src/bin/pg_test_timing/po/de.po postgresql-17-17.10/src/bin/pg_test_timing/po/de.po --- postgresql-17-17.9/src/bin/pg_test_timing/po/de.po 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_test_timing/po/de.po 2026-05-11 19:46:41.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: pg_test_timing (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-06-16 07:51+0000\n" +"POT-Creation-Date: 2026-05-05 10:29+0000\n" "PO-Revision-Date: 2021-04-12 16:37+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" @@ -68,8 +68,8 @@ #: pg_test_timing.c:152 #, c-format -msgid "Time warp: %d ms\n" -msgstr "Zeitdifferenz: %d ms\n" +msgid "Time warp: %d us\n" +msgstr "Zeitdifferenz: %d µs\n" #: pg_test_timing.c:175 #, c-format diff -Nru postgresql-17-17.9/src/bin/pg_test_timing/po/fr.po postgresql-17-17.10/src/bin/pg_test_timing/po/fr.po --- postgresql-17-17.9/src/bin/pg_test_timing/po/fr.po 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_test_timing/po/fr.po 2026-05-11 19:46:41.000000000 +0000 @@ -10,8 +10,8 @@ msgstr "" "Project-Id-Version: PostgreSQL 17\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-08-22 10:20+0000\n" -"PO-Revision-Date: 2024-09-16 16:28+0200\n" +"POT-Creation-Date: 2026-04-24 02:57+0000\n" +"PO-Revision-Date: 2026-04-24 17:51+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: French \n" "Language: fr\n" @@ -19,7 +19,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 3.5\n" +"X-Generator: Poedit 3.9\n" #: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 #: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:161 @@ -71,8 +71,8 @@ #: pg_test_timing.c:152 #, c-format -msgid "Time warp: %d ms\n" -msgstr "Décalage de temps : %d ms\n" +msgid "Time warp: %d us\n" +msgstr "Décalage de temps : %d us\n" #: pg_test_timing.c:175 #, c-format diff -Nru postgresql-17-17.9/src/bin/pg_test_timing/po/ru.po postgresql-17-17.10/src/bin/pg_test_timing/po/ru.po --- postgresql-17-17.9/src/bin/pg_test_timing/po/ru.po 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_test_timing/po/ru.po 2026-05-11 19:46:41.000000000 +0000 @@ -1,13 +1,13 @@ # Russian message translation file for pg_test_timing # Copyright (C) 2017 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Alexander Lakhin , 2017, 2021, 2024. +# SPDX-FileCopyrightText: 2017, 2021, 2024, 2026 Alexander Lakhin msgid "" msgstr "" "Project-Id-Version: pg_test_timing (PostgreSQL) 10\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-09-02 09:29+0300\n" -"PO-Revision-Date: 2024-09-04 19:59+0300\n" +"POT-Creation-Date: 2026-05-10 08:01+0300\n" +"PO-Revision-Date: 2026-05-10 08:31+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -68,8 +68,8 @@ #: pg_test_timing.c:152 #, c-format -msgid "Time warp: %d ms\n" -msgstr "Сдвиг времени: %d мс\n" +msgid "Time warp: %d us\n" +msgstr "Сдвиг времени: %d мкс\n" #: pg_test_timing.c:175 #, c-format diff -Nru postgresql-17-17.9/src/bin/pg_upgrade/dump.c postgresql-17-17.10/src/bin/pg_upgrade/dump.c --- postgresql-17-17.9/src/bin/pg_upgrade/dump.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_upgrade/dump.c 2026-05-11 19:46:41.000000000 +0000 @@ -21,9 +21,10 @@ /* run new pg_dumpall binary for globals */ exec_prog(UTILITY_LOG_FILE, NULL, true, true, - "\"%s/pg_dumpall\" %s --globals-only --quote-all-identifiers " + "\"%s/pg_dumpall\" %s%s --globals-only --quote-all-identifiers " "--binary-upgrade %s -f \"%s/%s\"", new_cluster.bindir, cluster_conn_opts(&old_cluster), + protocol_negotiation_supported(&old_cluster) ? "" : " -d \"max_protocol_version=3.0\"", log_opts.verbose ? "--verbose" : "", log_opts.dumpdir, GLOBALS_DUMP_FILE); @@ -43,6 +44,9 @@ initPQExpBuffer(&connstr); appendPQExpBufferStr(&connstr, "dbname="); appendConnStrVal(&connstr, old_db->db_name); + if (!protocol_negotiation_supported(&old_cluster)) + appendPQExpBufferStr(&connstr, " max_protocol_version=3.0"); + initPQExpBuffer(&escaped_connstr); appendShellString(&escaped_connstr, connstr.data); termPQExpBuffer(&connstr); diff -Nru postgresql-17-17.9/src/bin/pg_upgrade/pg_upgrade.h postgresql-17-17.10/src/bin/pg_upgrade/pg_upgrade.h --- postgresql-17-17.9/src/bin/pg_upgrade/pg_upgrade.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_upgrade/pg_upgrade.h 2026-05-11 19:46:41.000000000 +0000 @@ -482,6 +482,7 @@ /* version.c */ bool jsonb_9_4_check_applicable(ClusterInfo *cluster); +bool protocol_negotiation_supported(const ClusterInfo *cluster); void old_9_6_invalidate_hash_indexes(ClusterInfo *cluster, bool check_mode); diff -Nru postgresql-17-17.9/src/bin/pg_upgrade/po/ru.po postgresql-17-17.10/src/bin/pg_upgrade/po/ru.po --- postgresql-17-17.9/src/bin/pg_upgrade/po/ru.po 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_upgrade/po/ru.po 2026-05-11 19:46:41.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: pg_upgrade (PostgreSQL) 10\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-08-09 07:11+0300\n" +"POT-Creation-Date: 2026-05-10 08:01+0300\n" "PO-Revision-Date: 2025-08-09 07:24+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -267,7 +267,7 @@ #: check.c:496 check.c:971 check.c:1144 check.c:1259 check.c:1353 check.c:1481 #: check.c:1557 check.c:1634 check.c:1700 check.c:1773 check.c:1952 #: check.c:1971 check.c:2040 check.c:2092 file.c:378 file.c:415 function.c:189 -#: option.c:493 version.c:79 version.c:177 +#: option.c:493 version.c:110 version.c:208 #, c-format msgid "could not open file \"%s\": %m" msgstr "не удалось открыть файл \"%s\": %m" @@ -835,7 +835,7 @@ msgid "The target cluster lacks cluster state information:" msgstr "В целевом кластере не хватает информации о состоянии кластера:" -#: controldata.c:213 dump.c:50 exec.c:118 pg_upgrade.c:558 pg_upgrade.c:598 +#: controldata.c:213 dump.c:54 exec.c:118 pg_upgrade.c:558 pg_upgrade.c:598 #: pg_upgrade.c:947 relfilenumber.c:233 server.c:34 util.c:337 #, c-format msgid "%s" @@ -1103,7 +1103,7 @@ msgid "Creating dump of global objects" msgstr "Формирование выгрузки глобальных объектов" -#: dump.c:32 +#: dump.c:33 #, c-format msgid "Creating dump of database schemas" msgstr "Формирование выгрузки схем базы данных" @@ -2077,17 +2077,17 @@ msgid "linking \"%s\" to \"%s\"" msgstr "создание ссылки на \"%s\" в \"%s\"" -#: server.c:39 server.c:143 util.c:248 util.c:278 +#: server.c:39 server.c:145 util.c:248 util.c:278 #, c-format msgid "Failure, exiting\n" msgstr "Ошибка, выполняется выход\n" -#: server.c:133 +#: server.c:135 #, c-format msgid "executing: %s" msgstr "выполняется: %s" -#: server.c:139 +#: server.c:141 #, c-format msgid "" "SQL command failed\n" @@ -2098,17 +2098,17 @@ "%s\n" "%s" -#: server.c:169 +#: server.c:171 #, c-format msgid "could not open version file \"%s\": %m" msgstr "не удалось открыть файл с версией \"%s\": %m" -#: server.c:173 +#: server.c:175 #, c-format msgid "could not parse version file \"%s\"" msgstr "не удалось разобрать файл с версией \"%s\"" -#: server.c:299 +#: server.c:301 #, c-format msgid "" "\n" @@ -2117,7 +2117,7 @@ "\n" "%s" -#: server.c:303 +#: server.c:305 #, c-format msgid "" "could not connect to source postmaster started with the command:\n" @@ -2127,7 +2127,7 @@ "командой:\n" "%s" -#: server.c:307 +#: server.c:309 #, c-format msgid "" "could not connect to target postmaster started with the command:\n" @@ -2137,26 +2137,26 @@ "командой:\n" "%s" -#: server.c:321 +#: server.c:323 #, c-format msgid "pg_ctl failed to start the source server, or connection failed" msgstr "" "программа pg_ctl не смогла запустить исходный сервер, либо к нему не удалось " "подключиться" -#: server.c:323 +#: server.c:325 #, c-format msgid "pg_ctl failed to start the target server, or connection failed" msgstr "" "программа pg_ctl не смогла запустить целевой сервер, либо к нему не удалось " "подключиться" -#: server.c:368 +#: server.c:370 #, c-format msgid "out of memory" msgstr "нехватка памяти" -#: server.c:381 +#: server.c:383 #, c-format msgid "libpq environment variable %s has a non-local server value: %s" msgstr "" @@ -2202,17 +2202,17 @@ msgid "ok" msgstr "ок" -#: version.c:44 +#: version.c:75 #, c-format msgid "Checking for hash indexes" msgstr "Проверка хеш-индексов" -#: version.c:121 +#: version.c:152 #, c-format msgid "warning" msgstr "предупреждение" -#: version.c:123 +#: version.c:154 #, c-format msgid "" "\n" @@ -2227,7 +2227,7 @@ "перестроить с помощью команды REINDEX. По завершении обновления вы получите\n" "инструкции по выполнению REINDEX." -#: version.c:129 +#: version.c:160 #, c-format msgid "" "\n" @@ -2246,17 +2246,17 @@ "будучи выполненным администратором БД в psql, пересоздаст все неправильные\n" "индексы; до этого никакие хеш-индексы не будут использоваться." -#: version.c:153 +#: version.c:184 #, c-format msgid "Checking for extension updates" msgstr "Проверка обновлённых расширений" -#: version.c:200 +#: version.c:231 #, c-format msgid "notice" msgstr "замечание" -#: version.c:201 +#: version.c:232 #, c-format msgid "" "\n" diff -Nru postgresql-17-17.9/src/bin/pg_upgrade/server.c postgresql-17-17.10/src/bin/pg_upgrade/server.c --- postgresql-17-17.9/src/bin/pg_upgrade/server.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_upgrade/server.c 2026-05-11 19:46:41.000000000 +0000 @@ -71,6 +71,8 @@ appendPQExpBufferStr(&conn_opts, " host="); appendConnStrVal(&conn_opts, cluster->sockdir); } + if (!protocol_negotiation_supported(cluster)) + appendPQExpBufferStr(&conn_opts, " max_protocol_version=3.0"); conn = PQconnectdb(conn_opts.data); termPQExpBuffer(&conn_opts); diff -Nru postgresql-17-17.9/src/bin/pg_upgrade/version.c postgresql-17-17.10/src/bin/pg_upgrade/version.c --- postgresql-17-17.9/src/bin/pg_upgrade/version.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_upgrade/version.c 2026-05-11 19:46:41.000000000 +0000 @@ -29,6 +29,37 @@ } /* + * Older servers can't support newer protocol versions, so their connection + * strings will need to lock max_protocol_version to 3.0. + */ +bool +protocol_negotiation_supported(const ClusterInfo *cluster) +{ + /* + * Back-branch-specific complication: in libpq versions prior to PG18, + * max_protocol_version isn't supported. But we also don't need to worry + * about newer protocol versions being used in that case, so just lie and + * return true. + * + * (Checking for a libpq version that's newer than this branch looks very + * strange, but distributions are allowed to link older pg_upgrade + * binaries against the newest release of libpq.) + */ + if (PQlibVersion() < 180000) + return true; + + /* + * The February 2018 patch release (9.3.21, 9.4.16, 9.5.11, 9.6.7, and + * 10.2) added support for NegotiateProtocolVersion. But ClusterInfo only + * has information about the major version number. To ensure we can still + * upgrade older unpatched servers, just assume anything prior to PG11 + * can't negotiate. It's not possible for those servers to make use of + * newer protocols anyway, so nothing is lost. + */ + return (GET_MAJOR_VERSION(cluster->major_version) >= 1100); +} + +/* * old_9_6_invalidate_hash_indexes() * 9.6 -> 10 * Hash index binary format has changed from 9.6->10.0 diff -Nru postgresql-17-17.9/src/bin/pg_verifybackup/po/ru.po postgresql-17-17.10/src/bin/pg_verifybackup/po/ru.po --- postgresql-17-17.9/src/bin/pg_verifybackup/po/ru.po 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_verifybackup/po/ru.po 2026-05-11 19:46:41.000000000 +0000 @@ -1,9 +1,9 @@ -# SPDX-FileCopyrightText: 2020, 2021, 2022, 2023, 2024, 2025 Alexander Lakhin +# SPDX-FileCopyrightText: 2020, 2021, 2022, 2023, 2024, 2025, 2026 Alexander Lakhin msgid "" msgstr "" "Project-Id-Version: pg_verifybackup (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-08-02 11:37+0300\n" +"POT-Creation-Date: 2026-05-10 08:01+0300\n" "PO-Revision-Date: 2024-09-07 09:48+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -121,91 +121,91 @@ msgid "cannot duplicate null pointer (internal error)\n" msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" -#: ../../common/jsonapi.c:2124 +#: ../../common/jsonapi.c:2175 msgid "Recursive descent parser cannot use incremental lexer." msgstr "" "Инкрементальный лексический анализатор не подходит для нисходящего " "рекурсивного разбора." -#: ../../common/jsonapi.c:2126 +#: ../../common/jsonapi.c:2177 msgid "Incremental parser requires incremental lexer." msgstr "" "Для инкрементального разбора требуется инкрементальный лексический " "анализатор." -#: ../../common/jsonapi.c:2128 +#: ../../common/jsonapi.c:2179 msgid "JSON nested too deep, maximum permitted depth is 6400." msgstr "" "Слишком большая вложенность JSON, максимальная допустимая глубина: 6400." -#: ../../common/jsonapi.c:2130 +#: ../../common/jsonapi.c:2181 #, c-format msgid "Escape sequence \"\\%.*s\" is invalid." msgstr "Неверная спецпоследовательность: \"\\%.*s\"." -#: ../../common/jsonapi.c:2134 +#: ../../common/jsonapi.c:2185 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Символ с кодом 0x%02x необходимо экранировать." -#: ../../common/jsonapi.c:2138 +#: ../../common/jsonapi.c:2189 #, c-format msgid "Expected end of input, but found \"%.*s\"." msgstr "Ожидался конец текста, но обнаружено продолжение \"%.*s\"." -#: ../../common/jsonapi.c:2141 +#: ../../common/jsonapi.c:2192 #, c-format msgid "Expected array element or \"]\", but found \"%.*s\"." msgstr "Ожидался элемент массива или \"]\", но обнаружено \"%.*s\"." -#: ../../common/jsonapi.c:2144 +#: ../../common/jsonapi.c:2195 #, c-format msgid "Expected \",\" or \"]\", but found \"%.*s\"." msgstr "Ожидалась \",\" или \"]\", но обнаружено \"%.*s\"." -#: ../../common/jsonapi.c:2147 +#: ../../common/jsonapi.c:2198 #, c-format msgid "Expected \":\", but found \"%.*s\"." msgstr "Ожидалось \":\", но обнаружено \"%.*s\"." -#: ../../common/jsonapi.c:2150 +#: ../../common/jsonapi.c:2201 #, c-format msgid "Expected JSON value, but found \"%.*s\"." msgstr "Ожидалось значение JSON, но обнаружено \"%.*s\"." -#: ../../common/jsonapi.c:2153 +#: ../../common/jsonapi.c:2204 msgid "The input string ended unexpectedly." msgstr "Неожиданный конец входной строки." -#: ../../common/jsonapi.c:2155 +#: ../../common/jsonapi.c:2206 #, c-format msgid "Expected string or \"}\", but found \"%.*s\"." msgstr "Ожидалась строка или \"}\", но обнаружено \"%.*s\"." -#: ../../common/jsonapi.c:2158 +#: ../../common/jsonapi.c:2209 #, c-format msgid "Expected \",\" or \"}\", but found \"%.*s\"." msgstr "Ожидалась \",\" или \"}\", но обнаружено \"%.*s\"." -#: ../../common/jsonapi.c:2161 +#: ../../common/jsonapi.c:2212 #, c-format msgid "Expected string, but found \"%.*s\"." msgstr "Ожидалась строка, но обнаружено \"%.*s\"." -#: ../../common/jsonapi.c:2164 +#: ../../common/jsonapi.c:2215 #, c-format msgid "Token \"%.*s\" is invalid." msgstr "Ошибочный элемент \"%.*s\"." -#: ../../common/jsonapi.c:2167 +#: ../../common/jsonapi.c:2218 msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 нельзя преобразовать в текст." -#: ../../common/jsonapi.c:2169 +#: ../../common/jsonapi.c:2220 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "За \"\\u\" должны следовать четыре шестнадцатеричные цифры." -#: ../../common/jsonapi.c:2172 +#: ../../common/jsonapi.c:2223 msgid "" "Unicode escape values cannot be used for code point values above 007F when " "the encoding is not UTF8." @@ -213,18 +213,18 @@ "Спецкоды Unicode для значений выше 007F можно использовать только с " "кодировкой UTF8." -#: ../../common/jsonapi.c:2181 +#: ../../common/jsonapi.c:2232 #, c-format msgid "" "Unicode escape value could not be translated to the server's encoding %s." msgstr "Спецкод Unicode нельзя преобразовать в серверную кодировку %s." -#: ../../common/jsonapi.c:2188 +#: ../../common/jsonapi.c:2239 msgid "Unicode high surrogate must not follow a high surrogate." msgstr "" "Старшее слово суррогата Unicode не может следовать за другим старшим словом." -#: ../../common/jsonapi.c:2190 +#: ../../common/jsonapi.c:2241 msgid "Unicode low surrogate must follow a high surrogate." msgstr "Младшее слово суррогата Unicode должно следовать за старшим словом." diff -Nru postgresql-17-17.9/src/bin/pg_waldump/pg_waldump.c postgresql-17-17.10/src/bin/pg_waldump/pg_waldump.c --- postgresql-17-17.9/src/bin/pg_waldump/pg_waldump.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pg_waldump/pg_waldump.c 2026-05-11 19:46:41.000000000 +0000 @@ -160,7 +160,7 @@ static void split_path(const char *path, char **dir, char **fname) { - char *sep; + const char *sep; /* split filepath into directory & filename */ sep = strrchr(path, '/'); diff -Nru postgresql-17-17.9/src/bin/pgbench/pgbench.c postgresql-17-17.10/src/bin/pgbench/pgbench.c --- postgresql-17-17.9/src/bin/pgbench/pgbench.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/bin/pgbench/pgbench.c 2026-05-11 19:46:41.000000000 +0000 @@ -6229,7 +6229,7 @@ static int parseScriptWeight(const char *option, char **script) { - char *sep; + const char *sep; int weight; if ((sep = strrchr(option, WSEP))) diff -Nru postgresql-17-17.9/src/common/blkreftable.c postgresql-17-17.10/src/common/blkreftable.c --- postgresql-17-17.9/src/common/blkreftable.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/common/blkreftable.c 2026-05-11 19:46:41.000000000 +0000 @@ -497,7 +497,7 @@ /* Extract entries into serializable format and sort them. */ sdata = - palloc(brtab->hash->members * sizeof(BlockRefTableSerializedEntry)); + palloc_array(BlockRefTableSerializedEntry, brtab->hash->members); blockreftable_start_iterate(brtab->hash, &it); while ((brtentry = blockreftable_iterate(brtab->hash, &it)) != NULL) { @@ -657,10 +657,24 @@ return false; } + /* + * Sanity-check the nchunks value. In the backend, palloc_array would + * enforce this anyway (with a more generic error message); but in + * frontend it would not, potentially allowing BlockRefTableRead's length + * parameter to overflow. + */ + if (sentry.nchunks > MaxAllocSize / sizeof(uint16)) + { + reader->error_callback(reader->error_callback_arg, + "file \"%s\" has oversized chunk size array", + reader->error_filename); + return false; + } + /* Read chunk size array. */ if (reader->chunk_size != NULL) pfree(reader->chunk_size); - reader->chunk_size = palloc(sentry.nchunks * sizeof(uint16)); + reader->chunk_size = palloc_array(uint16, sentry.nchunks); BlockRefTableRead(reader, reader->chunk_size, sentry.nchunks * sizeof(uint16)); @@ -997,10 +1011,9 @@ if (entry->nchunks == 0) { - entry->chunk_size = palloc0(sizeof(uint16) * max_chunks); - entry->chunk_usage = palloc0(sizeof(uint16) * max_chunks); - entry->chunk_data = - palloc0(sizeof(BlockRefTableChunk) * max_chunks); + entry->chunk_size = palloc0_array(uint16, max_chunks); + entry->chunk_usage = palloc0_array(uint16, max_chunks); + entry->chunk_data = palloc0_array(BlockRefTableChunk, max_chunks); } else { @@ -1029,7 +1042,7 @@ if (entry->chunk_size[chunkno] == 0) { entry->chunk_data[chunkno] = - palloc(sizeof(uint16) * INITIAL_ENTRIES_PER_CHUNK); + palloc_array(uint16, INITIAL_ENTRIES_PER_CHUNK); entry->chunk_size[chunkno] = INITIAL_ENTRIES_PER_CHUNK; entry->chunk_data[chunkno][0] = chunkoffset; entry->chunk_usage[chunkno] = 1; diff -Nru postgresql-17-17.9/src/common/compression.c postgresql-17-17.10/src/common/compression.c --- postgresql-17-17.9/src/common/compression.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/common/compression.c 2026-05-11 19:46:41.000000000 +0000 @@ -425,7 +425,7 @@ void parse_compress_options(const char *option, char **algorithm, char **detail) { - char *sep; + const char *sep; char *endp; long result; diff -Nru postgresql-17-17.9/src/common/encnames.c postgresql-17-17.10/src/common/encnames.c --- postgresql-17-17.9/src/common/encnames.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/common/encnames.c 2026-05-11 19:46:41.000000000 +0000 @@ -61,8 +61,9 @@ * Japanese, standard OSF */ { "euckr", PG_EUC_KR - }, /* EUC-KR; Extended Unix Code for Korean , KS - * X 1001 standard */ + }, /* EUC-KR; Extended Unix Code for Korean + * precomposed (Wansung) encoding, standard KS + * X 1001 */ { "euctw", PG_EUC_TW }, /* EUC-TW; Extended Unix Code for @@ -119,8 +120,8 @@ }, /* ISO-8859-9; RFC1345,KXS2 */ { "johab", PG_JOHAB - }, /* JOHAB; Extended Unix Code for simplified - * Chinese */ + }, /* JOHAB; Korean combining (Johab) encoding, + * standard KS X 1001 annex 3 */ { "koi8", PG_KOI8R }, /* _dirty_ alias for KOI8-R (backward @@ -189,7 +190,9 @@ }, /* alias for WIN1258 */ { "uhc", PG_UHC - }, /* UHC; Korean Windows CodePage 949 */ + }, /* UHC; Unified Hangul Code, Microsoft Windows + * CodePage 949; superset of EUC-KR covering + * all 11,172 precomposed Hangul syllables */ { "unicode", PG_UTF8 }, /* alias for UTF8 */ diff -Nru postgresql-17-17.9/src/common/fe_memutils.c postgresql-17-17.10/src/common/fe_memutils.c --- postgresql-17-17.9/src/common/fe_memutils.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/common/fe_memutils.c 2026-05-11 19:46:41.000000000 +0000 @@ -19,6 +19,12 @@ #include "postgres_fe.h" +#include "common/int.h" + +static pg_noinline void add_size_error(Size s1, Size s2) pg_attribute_noreturn(); +static pg_noinline void mul_size_error(Size s1, Size s2) pg_attribute_noreturn(); + + static inline void * pg_malloc_internal(size_t size, int flags) { @@ -173,3 +179,185 @@ { return pg_realloc(pointer, size); } + +/* + * Support for safe calculation of memory request sizes + * + * These functions perform the requested calculation, but throw error if the + * result overflows. + * + * An important property of these functions is that if an argument was a + * negative signed int before promotion (implying overflow in calculating it) + * we will detect that as an error. That happens because we reject results + * larger than SIZE_MAX / 2. In the backend we rely on later checks to do + * that, but in frontend we must do it here. + */ +Size +add_size(Size s1, Size s2) +{ + Size result; + + if (unlikely(pg_add_size_overflow(s1, s2, &result) || + result > (SIZE_MAX / 2))) + add_size_error(s1, s2); + return result; +} + +static pg_noinline void +add_size_error(Size s1, Size s2) +{ + fprintf(stderr, _("invalid memory allocation request size %zu + %zu\n"), + s1, s2); + exit(EXIT_FAILURE); +} + +Size +mul_size(Size s1, Size s2) +{ + Size result; + + if (unlikely(pg_mul_size_overflow(s1, s2, &result) || + result > (SIZE_MAX / 2))) + mul_size_error(s1, s2); + return result; +} + +static pg_noinline void +mul_size_error(Size s1, Size s2) +{ + fprintf(stderr, _("invalid memory allocation request size %zu * %zu\n"), + s1, s2); + exit(EXIT_FAILURE); +} + +/* + * pg_malloc_mul + * Equivalent to pg_malloc(mul_size(s1, s2)). + */ +void * +pg_malloc_mul(Size s1, Size s2) +{ + /* inline mul_size() for efficiency */ + Size req; + + if (unlikely(pg_mul_size_overflow(s1, s2, &req) || + req > (SIZE_MAX / 2))) + mul_size_error(s1, s2); + return pg_malloc(req); +} + +/* + * pg_malloc0_mul + * Equivalent to pg_malloc0(mul_size(s1, s2)). + * + * This is comparable to standard calloc's behavior. + */ +void * +pg_malloc0_mul(Size s1, Size s2) +{ + /* inline mul_size() for efficiency */ + Size req; + + if (unlikely(pg_mul_size_overflow(s1, s2, &req) || + req > (SIZE_MAX / 2))) + mul_size_error(s1, s2); + return pg_malloc0(req); +} + +/* + * pg_malloc_mul_extended + * Equivalent to pg_malloc_extended(mul_size(s1, s2), flags). + */ +void * +pg_malloc_mul_extended(Size s1, Size s2, int flags) +{ + /* inline mul_size() for efficiency */ + Size req; + + if (unlikely(pg_mul_size_overflow(s1, s2, &req) || + req > (SIZE_MAX / 2))) + mul_size_error(s1, s2); + return pg_malloc_extended(req, flags); +} + +/* + * pg_realloc_mul + * Equivalent to pg_realloc(p, mul_size(s1, s2)). + */ +void * +pg_realloc_mul(void *p, Size s1, Size s2) +{ + /* inline mul_size() for efficiency */ + Size req; + + if (unlikely(pg_mul_size_overflow(s1, s2, &req) || + req > (SIZE_MAX / 2))) + mul_size_error(s1, s2); + return pg_realloc(p, req); +} + +/* + * palloc_mul + * Equivalent to palloc(mul_size(s1, s2)). + */ +void * +palloc_mul(Size s1, Size s2) +{ + /* inline mul_size() for efficiency */ + Size req; + + if (unlikely(pg_mul_size_overflow(s1, s2, &req) || + req > (SIZE_MAX / 2))) + mul_size_error(s1, s2); + return palloc(req); +} + +/* + * palloc0_mul + * Equivalent to palloc0(mul_size(s1, s2)). + * + * This is comparable to standard calloc's behavior. + */ +void * +palloc0_mul(Size s1, Size s2) +{ + /* inline mul_size() for efficiency */ + Size req; + + if (unlikely(pg_mul_size_overflow(s1, s2, &req) || + req > (SIZE_MAX / 2))) + mul_size_error(s1, s2); + return palloc0(req); +} + +/* + * palloc_mul_extended + * Equivalent to palloc_extended(mul_size(s1, s2), flags). + */ +void * +palloc_mul_extended(Size s1, Size s2, int flags) +{ + /* inline mul_size() for efficiency */ + Size req; + + if (unlikely(pg_mul_size_overflow(s1, s2, &req) || + req > (SIZE_MAX / 2))) + mul_size_error(s1, s2); + return palloc_extended(req, flags); +} + +/* + * repalloc_mul + * Equivalent to repalloc(p, mul_size(s1, s2)). + */ +void * +repalloc_mul(void *p, Size s1, Size s2) +{ + /* inline mul_size() for efficiency */ + Size req; + + if (unlikely(pg_mul_size_overflow(s1, s2, &req) || + req > (SIZE_MAX / 2))) + mul_size_error(s1, s2); + return repalloc(p, req); +} diff -Nru postgresql-17-17.9/src/common/jsonapi.c postgresql-17-17.10/src/common/jsonapi.c --- postgresql-17-17.9/src/common/jsonapi.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/common/jsonapi.c 2026-05-11 19:46:41.000000000 +0000 @@ -1378,9 +1378,31 @@ if (c == '-' || (c >= '0' && c <= '9')) { - /* for numbers look for possible numeric continuations */ - + /* + * Accumulate numeric continuations, respecting JSON number + * grammar: -? int [frac] [exp] + * + * We must track what parts of the number we've already seen + * so we don't over-consume. '.' is valid only once and not + * after 'e'/'E'; 'e'/'E' is valid only once; '+'/'-' are + * valid only immediately after 'e'/'E'. + */ bool numend = false; + bool seen_dot = false; + bool seen_exp = false; + char prev; + + /* Scan existing partial token for state */ + for (int j = 0; j < ptok->len; j++) + { + char pc = ptok->data[j]; + + if (pc == '.') + seen_dot = true; + else if (pc == 'e' || pc == 'E') + seen_exp = true; + } + prev = ptok->data[ptok->len - 1]; for (size_t i = 0; i < lex->input_length && !numend; i++) { @@ -1390,8 +1412,35 @@ { case '+': case '-': + if (prev != 'e' && prev != 'E') + { + numend = true; + break; + } + appendStringInfoCharMacro(ptok, cc); + added++; + break; + case '.': + if (seen_dot || seen_exp) + { + numend = true; + break; + } + seen_dot = true; + appendStringInfoCharMacro(ptok, cc); + added++; + break; case 'e': case 'E': + if (seen_exp) + { + numend = true; + break; + } + seen_exp = true; + appendStringInfoCharMacro(ptok, cc); + added++; + break; case '0': case '1': case '2': @@ -1410,6 +1459,8 @@ default: numend = true; } + if (!numend) + prev = cc; } } diff -Nru postgresql-17-17.9/src/common/pg_lzcompress.c postgresql-17-17.10/src/common/pg_lzcompress.c --- postgresql-17-17.9/src/common/pg_lzcompress.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/common/pg_lzcompress.c 2026-05-11 19:46:41.000000000 +0000 @@ -727,22 +727,33 @@ int32 len; int32 off; + /* + * A match tag is at least 2 bytes; if the length nibble is + * 0x0f the tag is 3 bytes (extended length). Verify we have + * enough source data before reading them. + */ + if (unlikely(sp + 2 > srcend)) + return -1; + len = (sp[0] & 0x0f) + 3; off = ((sp[0] & 0xf0) << 4) | sp[1]; sp += 2; if (len == 18) + { + if (unlikely(sp >= srcend)) + return -1; len += *sp++; + } /* - * Check for corrupt data: if we fell off the end of the - * source, or if we obtained off = 0, or if off is more than - * the distance back to the buffer start, we have problems. - * (We must check for off = 0, else we risk an infinite loop - * below in the face of corrupt data. Likewise, the upper - * limit on off prevents accessing outside the buffer - * boundaries.) + * Check for corrupt data: if we obtained off = 0, or if off + * is more than the distance back to the buffer start, we have + * problems. (We must check for off = 0, else we risk an + * infinite loop below in the face of corrupt data. Likewise, + * the upper limit on off prevents accessing outside the + * buffer boundaries.) */ - if (unlikely(sp > srcend || off == 0 || + if (unlikely(off == 0 || off > (dp - (unsigned char *) dest))) return -1; diff -Nru postgresql-17-17.9/src/common/protocol_openssl.c postgresql-17-17.10/src/common/protocol_openssl.c --- postgresql-17-17.9/src/common/protocol_openssl.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/common/protocol_openssl.c 2026-05-11 19:46:41.000000000 +0000 @@ -114,4 +114,10 @@ return 1; /* success */ } -#endif /* !SSL_CTX_set_min_proto_version */ +#else /* !SSL_CTX_set_min_proto_version */ + +/* prevent linker complaints about empty module */ +extern int protocol_openssl_dummy_variable; +int protocol_openssl_dummy_variable = 0; + +#endif /* SSL_CTX_set_min_proto_version */ diff -Nru postgresql-17-17.9/src/common/psprintf.c postgresql-17-17.10/src/common/psprintf.c --- postgresql-17-17.9/src/common/psprintf.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/common/psprintf.c 2026-05-11 19:46:41.000000000 +0000 @@ -24,9 +24,6 @@ #include "postgres_fe.h" -/* It's possible we could use a different value for this in frontend code */ -#define MaxAllocSize ((Size) 0x3fffffff) /* 1 gigabyte - 1 */ - #endif diff -Nru postgresql-17-17.9/src/common/saslprep.c postgresql-17-17.10/src/common/saslprep.c --- postgresql-17-17.9/src/common/saslprep.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/common/saslprep.c 2026-05-11 19:46:41.000000000 +0000 @@ -24,10 +24,6 @@ #include "utils/memutils.h" #else #include "postgres_fe.h" - -/* It's possible we could use a different value for this in frontend code */ -#define MaxAllocSize ((Size) 0x3fffffff) /* 1 gigabyte - 1 */ - #endif #include "common/saslprep.h" diff -Nru postgresql-17-17.9/src/common/stringinfo.c postgresql-17-17.10/src/common/stringinfo.c --- postgresql-17-17.9/src/common/stringinfo.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/common/stringinfo.c 2026-05-11 19:46:41.000000000 +0000 @@ -24,9 +24,6 @@ #include "postgres_fe.h" -/* It's possible we could use a different value for this in frontend code */ -#define MaxAllocSize ((Size) 0x3fffffff) /* 1 gigabyte - 1 */ - #endif #include "lib/stringinfo.h" diff -Nru postgresql-17-17.9/src/common/unicode_norm.c postgresql-17-17.10/src/common/unicode_norm.c --- postgresql-17-17.9/src/common/unicode_norm.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/common/unicode_norm.c 2026-05-11 19:46:41.000000000 +0000 @@ -23,6 +23,7 @@ #include "common/unicode_norm_hashfunc.h" #include "common/unicode_normprops_table.h" #include "port/pg_bswap.h" +#include "utils/memutils.h" #else #include "common/unicode_norm_table.h" #endif @@ -420,10 +421,28 @@ /* * Calculate how many characters long the decomposed version will be. + * + * Some characters decompose to quite a few code points, so that the + * decomposed version's size could overrun MaxAllocSize, and even 32-bit + * size_t, even though the input string presumably fits in that. In + * frontend we want to just return NULL in that case, so monitor the sum + * and exit early once we'd need more than MaxAllocSize bytes. */ decomp_size = 0; for (p = input; *p; p++) + { decomp_size += get_decomposed_size(*p, compat); + if (unlikely(decomp_size > MaxAllocSize / sizeof(pg_wchar))) + { +#ifndef FRONTEND + /* Exit loop and let palloc() throw error below */ + break; +#else + /* Just return NULL with no explicit error */ + return NULL; +#endif + } + } decomp_chars = (pg_wchar *) ALLOC((decomp_size + 1) * sizeof(pg_wchar)); if (decomp_chars == NULL) diff -Nru postgresql-17-17.9/src/include/access/slru.h postgresql-17-17.10/src/include/access/slru.h --- postgresql-17-17.9/src/include/access/slru.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/include/access/slru.h 2026-05-11 19:46:41.000000000 +0000 @@ -110,9 +110,7 @@ /* * latest_page_number is the page number of the current end of the log; * this is not critical data, since we use it only to avoid swapping out - * the latest page. (An exception: an accurate latest_page_number is - * needed on pg_multixact/offsets to replay WAL generated with older minor - * versions correctly. See RecordNewMultiXact().) + * the latest page. */ pg_atomic_uint64 latest_page_number; diff -Nru postgresql-17-17.9/src/include/access/visibilitymap.h postgresql-17-17.10/src/include/access/visibilitymap.h --- postgresql-17-17.9/src/include/access/visibilitymap.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/include/access/visibilitymap.h 2026-05-11 19:46:41.000000000 +0000 @@ -38,5 +38,6 @@ extern void visibilitymap_count(Relation rel, BlockNumber *all_visible, BlockNumber *all_frozen); extern BlockNumber visibilitymap_prepare_truncate(Relation rel, BlockNumber nheapblocks); +extern BlockNumber visibilitymap_truncation_length(BlockNumber nheapblocks); #endif /* VISIBILITYMAP_H */ diff -Nru postgresql-17-17.9/src/include/access/xlog.h postgresql-17-17.10/src/include/access/xlog.h --- postgresql-17-17.9/src/include/access/xlog.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/include/access/xlog.h 2026-05-11 19:46:41.000000000 +0000 @@ -224,6 +224,7 @@ extern RecoveryState GetRecoveryState(void); extern bool XLogInsertAllowed(void); extern XLogRecPtr GetXLogInsertRecPtr(void); +extern XLogRecPtr GetXLogInsertEndRecPtr(void); extern XLogRecPtr GetXLogWriteRecPtr(void); extern uint64 GetSystemIdentifier(void); diff -Nru postgresql-17-17.9/src/include/c.h postgresql-17-17.10/src/include/c.h --- postgresql-17-17.9/src/include/c.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/include/c.h 2026-05-11 19:46:41.000000000 +0000 @@ -182,6 +182,16 @@ #define PG_USED_FOR_ASSERTS_ONLY pg_attribute_unused() #endif +/* + * Our C and C++ compilers may have different ideas about which printf + * archetype best represents what src/port/snprintf.c can do. + */ +#ifndef __cplusplus +#define PG_PRINTF_ATTRIBUTE PG_C_PRINTF_ATTRIBUTE +#else +#define PG_PRINTF_ATTRIBUTE PG_CXX_PRINTF_ATTRIBUTE +#endif + /* GCC supports format attributes */ #if defined(__GNUC__) #define pg_attribute_format_arg(a) __attribute__((format_arg(a))) diff -Nru postgresql-17-17.9/src/include/common/fe_memutils.h postgresql-17-17.10/src/include/common/fe_memutils.h --- postgresql-17-17.9/src/include/common/fe_memutils.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/include/common/fe_memutils.h 2026-05-11 19:46:41.000000000 +0000 @@ -10,6 +10,18 @@ #define FE_MEMUTILS_H /* + * Assumed maximum size for allocation requests. + * + * We don't enforce this, so the actual maximum is the platform's SIZE_MAX. + * But it's useful to have it defined in frontend builds, so that common + * code can check for oversized requests without having frontend-vs-backend + * differences. Also, some code relies on MaxAllocSize being no more than + * INT_MAX/2, so rather than setting this to SIZE_MAX, make it the same as + * the backend's value. + */ +#define MaxAllocSize ((Size) 0x3fffffff) /* 1 gigabyte - 1 */ + +/* * Flags for pg_malloc_extended and palloc_extended, deliberately named * the same as the backend flags. */ @@ -30,6 +42,16 @@ extern void pg_free(void *ptr); /* + * Support for safe calculation of memory request sizes + */ +extern Size add_size(Size s1, Size s2); +extern Size mul_size(Size s1, Size s2); +extern void *pg_malloc_mul(Size s1, Size s2); +extern void *pg_malloc0_mul(Size s1, Size s2); +extern void *pg_malloc_mul_extended(Size s1, Size s2, int flags); +extern void *pg_realloc_mul(void *p, Size s1, Size s2); + +/* * Variants with easier notation and more type safety */ @@ -42,14 +64,15 @@ /* * Allocate space for "count" objects of type "type" */ -#define pg_malloc_array(type, count) ((type *) pg_malloc(sizeof(type) * (count))) -#define pg_malloc0_array(type, count) ((type *) pg_malloc0(sizeof(type) * (count))) +#define pg_malloc_array(type, count) ((type *) pg_malloc_mul(sizeof(type), count)) +#define pg_malloc0_array(type, count) ((type *) pg_malloc0_mul(sizeof(type), count)) +#define pg_malloc_array_extended(type, count, flags) ((type *) pg_malloc_mul_extended(sizeof(type), count, flags)) /* * Change size of allocation pointed to by "pointer" to have space for "count" * objects of type "type" */ -#define pg_realloc_array(pointer, type, count) ((type *) pg_realloc(pointer, sizeof(type) * (count))) +#define pg_realloc_array(pointer, type, count) ((type *) pg_realloc_mul(pointer, sizeof(type), count)) /* Equivalent functions, deliberately named the same as backend functions */ extern char *pstrdup(const char *in); @@ -59,12 +82,17 @@ extern void *palloc_extended(Size size, int flags); extern void *repalloc(void *pointer, Size size); extern void pfree(void *pointer); +extern void *palloc_mul(Size s1, Size s2); +extern void *palloc0_mul(Size s1, Size s2); +extern void *palloc_mul_extended(Size s1, Size s2, int flags); +extern void *repalloc_mul(void *p, Size s1, Size s2); #define palloc_object(type) ((type *) palloc(sizeof(type))) #define palloc0_object(type) ((type *) palloc0(sizeof(type))) -#define palloc_array(type, count) ((type *) palloc(sizeof(type) * (count))) -#define palloc0_array(type, count) ((type *) palloc0(sizeof(type) * (count))) -#define repalloc_array(pointer, type, count) ((type *) repalloc(pointer, sizeof(type) * (count))) +#define palloc_array(type, count) ((type *) palloc_mul(sizeof(type), count)) +#define palloc0_array(type, count) ((type *) palloc0_mul(sizeof(type), count)) +#define palloc_array_extended(type, count, flags) ((type *) palloc_mul_extended(sizeof(type), count, flags)) +#define repalloc_array(pointer, type, count) ((type *) repalloc_mul(pointer, sizeof(type), count)) /* sprintf into a palloc'd buffer --- these are in psprintf.c */ extern char *psprintf(const char *fmt,...) pg_attribute_printf(1, 2); diff -Nru postgresql-17-17.9/src/include/common/int.h postgresql-17-17.10/src/include/common/int.h --- postgresql-17-17.9/src/include/common/int.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/include/common/int.h 2026-05-11 19:46:41.000000000 +0000 @@ -438,6 +438,73 @@ #endif } +/* + * size_t + */ +static inline bool +pg_add_size_overflow(size_t a, size_t b, size_t *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_add_overflow(a, b, result); +#else + size_t res = a + b; + + if (res < a) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = res; + return false; +#endif +} + +static inline bool +pg_sub_size_overflow(size_t a, size_t b, size_t *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_sub_overflow(a, b, result); +#else + if (b > a) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = a - b; + return false; +#endif +} + +static inline bool +pg_mul_size_overflow(size_t a, size_t b, size_t *result) +{ +#if defined(HAVE__BUILTIN_OP_OVERFLOW) + return __builtin_mul_overflow(a, b, result); +#else + size_t res = a * b; + + if (a != 0 && b != res / a) + { + *result = 0x5EED; /* to avoid spurious warnings */ + return true; + } + *result = res; + return false; +#endif +} + +/* + * pg_neg_size_overflow is currently omitted, to avoid having to reason about + * the portability of SSIZE_MIN/_MAX before a use case exists. + */ +/* + * static inline bool + * pg_neg_size_overflow(size_t a, ssize_t *result) + * { + * ... + * } + */ + /*------------------------------------------------------------------------ * * Comparison routines for integer types. diff -Nru postgresql-17-17.9/src/include/executor/execExpr.h postgresql-17-17.10/src/include/executor/execExpr.h --- postgresql-17-17.9/src/include/executor/execExpr.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/include/executor/execExpr.h 2026-05-11 19:46:41.000000000 +0000 @@ -588,6 +588,10 @@ { bool has_nulls; bool inclause; /* true for IN and false for NOT IN */ + bool null_lhs_result; /* for non-strict lookups, we + * cache what looking up NULL + * returns. */ + bool null_lhs_isnull; struct ScalarArrayOpExprHashTable *elements_tab; FmgrInfo *finfo; /* function's lookup data */ FunctionCallInfo fcinfo_data; /* arguments etc */ diff -Nru postgresql-17-17.9/src/include/jit/SectionMemoryManager.h postgresql-17-17.10/src/include/jit/SectionMemoryManager.h --- postgresql-17-17.9/src/include/jit/SectionMemoryManager.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/include/jit/SectionMemoryManager.h 2026-05-11 19:46:41.000000000 +0000 @@ -1,5 +1,5 @@ /* - * This is a copy LLVM source code modified by the PostgreSQL project. + * This is a copy of LLVM source code modified by the PostgreSQL project. * See SectionMemoryManager.cpp for notes on provenance and license. */ diff -Nru postgresql-17-17.9/src/include/jit/llvmjit_backport.h postgresql-17-17.10/src/include/jit/llvmjit_backport.h --- postgresql-17-17.9/src/include/jit/llvmjit_backport.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/include/jit/llvmjit_backport.h 2026-05-11 19:46:41.000000000 +0000 @@ -8,7 +8,7 @@ #include /* - * LLVM's RuntimeDyld can produce code that crashes on larger memory ARM + * Pre-LLVM 22 RuntimeDyld can produce code that crashes on large memory ARM * systems, because llvm::SectionMemoryManager allocates multiple pieces of * memory that can be placed too far apart for the generated code. See * src/backend/jit/llvm/SectionMemoryManager.cpp for the patched replacement @@ -18,7 +18,7 @@ * We have adjusted it to compile against a range of LLVM versions, but not * further back than 12 for now. */ -#if defined(__aarch64__) && LLVM_VERSION_MAJOR > 11 +#if defined(__aarch64__) && LLVM_VERSION_MAJOR > 11 && LLVM_VERSION_MAJOR < 22 #define USE_LLVM_BACKPORT_SECTION_MEMORY_MANAGER #endif diff -Nru postgresql-17-17.9/src/include/pg_config.h.in postgresql-17-17.10/src/include/pg_config.h.in --- postgresql-17-17.9/src/include/pg_config.h.in 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/include/pg_config.h.in 2026-05-11 19:46:41.000000000 +0000 @@ -135,6 +135,10 @@ don't. */ #undef HAVE_DECL_STRNLEN +/* Define to 1 if you have the declaration of `timingsafe_bcmp', and to 0 if + you don't. */ +#undef HAVE_DECL_TIMINGSAFE_BCMP + /* Define to 1 if you have the header file. */ #undef HAVE_EDITLINE_HISTORY_H @@ -467,6 +471,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_TERMIOS_H +/* Define to 1 if you have the `timingsafe_bcmp' function. */ +#undef HAVE_TIMINGSAFE_BCMP + /* Define to 1 if your compiler understands `typeof' or something similar. */ #undef HAVE_TYPEOF @@ -603,6 +610,14 @@ /* Define to the version of this package. */ #undef PACKAGE_VERSION +/* Define to best C++ printf format archetype, usually gnu_printf if + available. */ +#undef PG_CXX_PRINTF_ATTRIBUTE + +/* Define to best C printf format archetype, usually gnu_printf if available. + */ +#undef PG_C_PRINTF_ATTRIBUTE + /* Define to the name of a signed 128-bit integer type. */ #undef PG_INT128_TYPE @@ -622,9 +637,6 @@ /* PostgreSQL minor version number */ #undef PG_MINORVERSION_NUM -/* Define to best printf format archetype, usually gnu_printf if available. */ -#undef PG_PRINTF_ATTRIBUTE - /* Define to 1 to use to define type bool. */ #undef PG_USE_STDBOOL diff -Nru postgresql-17-17.9/src/include/port.h postgresql-17-17.10/src/include/port.h --- postgresql-17-17.9/src/include/port.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/include/port.h 2026-05-11 19:46:41.000000000 +0000 @@ -58,6 +58,7 @@ extern void cleanup_path(char *path); extern bool path_contains_parent_reference(const char *path); extern bool path_is_relative_and_below_cwd(const char *path); +extern bool path_is_safe_for_extraction(const char *path); extern bool path_is_prefix_of_path(const char *path1, const char *path2); extern char *make_absolute_path(const char *path); extern const char *get_progname(const char *argv0); @@ -465,6 +466,10 @@ extern bool pg_get_user_home_dir(uid_t user_id, char *buffer, size_t buflen); #endif +#if !HAVE_DECL_TIMINGSAFE_BCMP +extern int timingsafe_bcmp(const void *b1, const void *b2, size_t len); +#endif + /* * Callers should use the qsort() macro defined below instead of calling * pg_qsort() directly. diff -Nru postgresql-17-17.9/src/include/regex/regcustom.h postgresql-17-17.10/src/include/regex/regcustom.h --- postgresql-17-17.9/src/include/regex/regcustom.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/include/regex/regcustom.h 2026-05-11 19:46:41.000000000 +0000 @@ -52,6 +52,8 @@ #define MALLOC(n) palloc_extended((n), MCXT_ALLOC_NO_OOM) #define FREE(p) pfree(VS(p)) #define REALLOC(p,n) repalloc_extended(VS(p),(n), MCXT_ALLOC_NO_OOM) +#define MALLOC_ARRAY(type, n) palloc_array_extended(type, n, MCXT_ALLOC_NO_OOM) +#define REALLOC_ARRAY(p, type, n) repalloc_array_extended(p, type, n, MCXT_ALLOC_NO_OOM) #define INTERRUPT(re) CHECK_FOR_INTERRUPTS() #define assert(x) Assert(x) diff -Nru postgresql-17-17.9/src/include/regex/regguts.h postgresql-17-17.10/src/include/regex/regguts.h --- postgresql-17-17.9/src/include/regex/regguts.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/include/regex/regguts.h 2026-05-11 19:46:41.000000000 +0000 @@ -76,6 +76,14 @@ #ifndef FREE #define FREE(p) free(VS(p)) #endif +#ifndef MALLOC_ARRAY +/* we don't depend on calloc's zeroing behavior, we do need overflow check */ +#define MALLOC_ARRAY(type, n) ((type *) calloc(sizeof(type), n)) +#endif +#ifndef REALLOC_ARRAY +/* XXX this definition does not provide the desired overflow check */ +#define REALLOC_ARRAY(p, type, n) ((type *) REALLOC(p, sizeof(type) * (n))) +#endif /* interruption */ #ifndef INTERRUPT @@ -446,6 +454,11 @@ * (the compacted NFA and the colormap). * The scaling here is based on an empirical measurement that very large * NFAs tend to have about 4 arcs/state. + * + * Do not raise this so high as to allow more than INT_MAX/8 states or arcs, + * or you risk integer overflows in various space allocation requests. + * (We could be more defensive in those places, but that's so far beyond the + * practical range of NFA sizes that it doesn't seem worth additional code.) */ #ifndef REG_MAX_COMPILE_SPACE #define REG_MAX_COMPILE_SPACE \ diff -Nru postgresql-17-17.9/src/include/replication/slotsync.h postgresql-17-17.10/src/include/replication/slotsync.h --- postgresql-17-17.9/src/include/replication/slotsync.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/include/replication/slotsync.h 2026-05-11 19:46:41.000000000 +0000 @@ -12,10 +12,15 @@ #ifndef SLOTSYNC_H #define SLOTSYNC_H +#include + #include "replication/walreceiver.h" extern PGDLLIMPORT bool sync_replication_slots; +/* Interrupt flag set by HandleSlotSyncMessageInterrupt() */ +extern PGDLLIMPORT volatile sig_atomic_t SlotSyncShutdownPending; + /* * GUCs needed by slot sync worker to connect to the primary * server and carry on with slots synchronization. @@ -34,5 +39,7 @@ extern Size SlotSyncShmemSize(void); extern void SlotSyncShmemInit(void); extern void SyncReplicationSlots(WalReceiverConn *wrconn); +extern void HandleSlotSyncMessageInterrupt(void); +extern void ProcessSlotSyncMessage(void); #endif /* SLOTSYNC_H */ diff -Nru postgresql-17-17.9/src/include/storage/proc.h postgresql-17-17.10/src/include/storage/proc.h --- postgresql-17-17.9/src/include/storage/proc.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/include/storage/proc.h 2026-05-11 19:46:41.000000000 +0000 @@ -442,6 +442,8 @@ */ #define NUM_AUXILIARY_PROCS 6 +#define FIRST_PREPARED_XACT_PROC_NUMBER (MaxBackends + NUM_AUXILIARY_PROCS) + /* configurable options */ extern PGDLLIMPORT int DeadlockTimeout; extern PGDLLIMPORT int StatementTimeout; diff -Nru postgresql-17-17.9/src/include/storage/procsignal.h postgresql-17-17.10/src/include/storage/procsignal.h --- postgresql-17-17.9/src/include/storage/procsignal.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/include/storage/procsignal.h 2026-05-11 19:46:41.000000000 +0000 @@ -48,6 +48,8 @@ PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK, PROCSIG_RECOVERY_CONFLICT_LAST = PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK, + PROCSIG_SLOTSYNC_MESSAGE, /* ask slot synchronization to stop */ + NUM_PROCSIGNALS /* Must be last! */ } ProcSignalReason; diff -Nru postgresql-17-17.9/src/include/storage/shmem.h postgresql-17-17.10/src/include/storage/shmem.h --- postgresql-17-17.9/src/include/storage/shmem.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/include/storage/shmem.h 2026-05-11 19:46:41.000000000 +0000 @@ -35,8 +35,6 @@ extern HTAB *ShmemInitHash(const char *name, long init_size, long max_size, HASHCTL *infoP, int hash_flags); extern void *ShmemInitStruct(const char *name, Size size, bool *foundPtr); -extern Size add_size(Size s1, Size s2); -extern Size mul_size(Size s1, Size s2); /* ipci.c */ extern void RequestAddinShmemSpace(Size size); diff -Nru postgresql-17-17.9/src/include/utils/lsyscache.h postgresql-17-17.10/src/include/utils/lsyscache.h --- postgresql-17-17.9/src/include/utils/lsyscache.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/include/utils/lsyscache.h 2026-05-11 19:46:41.000000000 +0000 @@ -86,6 +86,7 @@ extern List *get_op_btree_interpretation(Oid opno); extern bool equality_ops_are_compatible(Oid opno1, Oid opno2); extern bool comparison_ops_are_compatible(Oid opno1, Oid opno2); +extern bool collations_agree_on_equality(Oid coll1, Oid coll2); extern Oid get_opfamily_proc(Oid opfamily, Oid lefttype, Oid righttype, int16 procnum); extern char *get_attname(Oid relid, AttrNumber attnum, bool missing_ok); diff -Nru postgresql-17-17.9/src/include/utils/memutils.h postgresql-17-17.10/src/include/utils/memutils.h --- postgresql-17-17.9/src/include/utils/memutils.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/include/utils/memutils.h 2026-05-11 19:46:41.000000000 +0000 @@ -41,7 +41,7 @@ #define AllocSizeIsValid(size) ((Size) (size) <= MaxAllocSize) -/* Must be less than SIZE_MAX */ +/* Do not make this any bigger; see add_size() and mul_size() */ #define MaxAllocHugeSize (SIZE_MAX / 2) #define InvalidAllocSize SIZE_MAX diff -Nru postgresql-17-17.9/src/include/utils/palloc.h postgresql-17-17.10/src/include/utils/palloc.h --- postgresql-17-17.9/src/include/utils/palloc.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/include/utils/palloc.h 2026-05-11 19:46:41.000000000 +0000 @@ -86,6 +86,18 @@ extern void pfree(void *pointer); /* + * Support for safe calculation of memory request sizes + */ +extern Size add_size(Size s1, Size s2); +extern Size mul_size(Size s1, Size s2); +extern void *palloc_mul(Size s1, Size s2); +extern void *palloc0_mul(Size s1, Size s2); +extern void *palloc_mul_extended(Size s1, Size s2, int flags); +pg_nodiscard extern void *repalloc_mul(void *p, Size s1, Size s2); +pg_nodiscard extern void *repalloc_mul_extended(void *p, Size s1, Size s2, + int flags); + +/* * Variants with easier notation and more type safety */ @@ -98,15 +110,17 @@ /* * Allocate space for "count" objects of type "type" */ -#define palloc_array(type, count) ((type *) palloc(sizeof(type) * (count))) -#define palloc0_array(type, count) ((type *) palloc0(sizeof(type) * (count))) +#define palloc_array(type, count) ((type *) palloc_mul(sizeof(type), count)) +#define palloc0_array(type, count) ((type *) palloc0_mul(sizeof(type), count)) +#define palloc_array_extended(type, count, flags) ((type *) palloc_mul_extended(sizeof(type), count, flags)) /* * Change size of allocation pointed to by "pointer" to have space for "count" * objects of type "type" */ -#define repalloc_array(pointer, type, count) ((type *) repalloc(pointer, sizeof(type) * (count))) -#define repalloc0_array(pointer, type, oldcount, count) ((type *) repalloc0(pointer, sizeof(type) * (oldcount), sizeof(type) * (count))) +#define repalloc_array(pointer, type, count) ((type *) repalloc_mul(pointer, sizeof(type), count)) +#define repalloc0_array(pointer, type, oldcount, count) ((type *) repalloc0(pointer, mul_size(sizeof(type), oldcount), mul_size(sizeof(type), count))) +#define repalloc_array_extended(pointer, type, count, flags) ((type *) repalloc_mul_extended(pointer, sizeof(type), count, flags)) /* Higher-limit allocators. */ extern void *MemoryContextAllocHuge(MemoryContext context, Size size); diff -Nru postgresql-17-17.9/src/interfaces/ecpg/ecpglib/descriptor.c postgresql-17-17.10/src/interfaces/ecpg/ecpglib/descriptor.c --- postgresql-17-17.9/src/interfaces/ecpg/ecpglib/descriptor.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/interfaces/ecpg/ecpglib/descriptor.c 2026-05-11 19:46:41.000000000 +0000 @@ -475,6 +475,16 @@ memset(&stmt, 0, sizeof stmt); stmt.lineno = lineno; + /* desperate try to guess something sensible */ + stmt.connection = ecpg_get_connection(NULL); + if (stmt.connection == NULL) + { + ecpg_raise(lineno, ECPG_NO_CONN, ECPG_SQLSTATE_CONNECTION_DOES_NOT_EXIST, + ecpg_gettext("NULL")); + va_end(args); + return false; + } + /* Make sure we do NOT honor the locale for numeric input */ /* since the database gives the standard decimal point */ /* (see comments in execute.c) */ @@ -497,8 +507,6 @@ setlocale(LC_NUMERIC, "C"); #endif - /* desperate try to guess something sensible */ - stmt.connection = ecpg_get_connection(NULL); ecpg_store_result(ECPGresult, index, &stmt, &data_var); #ifdef HAVE_USELOCALE diff -Nru postgresql-17-17.9/src/interfaces/ecpg/ecpglib/po/ru.po postgresql-17-17.10/src/interfaces/ecpg/ecpglib/po/ru.po --- postgresql-17-17.9/src/interfaces/ecpg/ecpglib/po/ru.po 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/interfaces/ecpg/ecpglib/po/ru.po 2026-05-11 19:46:41.000000000 +0000 @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: ecpglib (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-08-02 11:37+0300\n" +"POT-Creation-Date: 2026-05-10 08:01+0300\n" "PO-Revision-Date: 2019-09-09 13:30+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -25,7 +25,7 @@ msgid "" msgstr "<ПО_УМОЛЧАНИЮ>" -#: descriptor.c:866 misc.c:88 +#: descriptor.c:483 descriptor.c:874 misc.c:88 msgid "NULL" msgstr "NULL" diff -Nru postgresql-17-17.9/src/interfaces/ecpg/ecpglib/prepare.c postgresql-17-17.10/src/interfaces/ecpg/ecpglib/prepare.c --- postgresql-17-17.9/src/interfaces/ecpg/ecpglib/prepare.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/interfaces/ecpg/ecpglib/prepare.c 2026-05-11 19:46:41.000000000 +0000 @@ -349,8 +349,12 @@ bool ECPGdeallocate_all(int lineno, int compat, const char *connection_name) { - return ecpg_deallocate_all_conn(lineno, compat, - ecpg_get_connection(connection_name)); + struct connection *con = ecpg_get_connection(connection_name); + + if (!ecpg_init(con, connection_name, lineno)) + return false; + + return ecpg_deallocate_all_conn(lineno, compat, con); } char * @@ -363,13 +367,15 @@ } /* return the prepared statement */ -/* lineno is not used here, but kept in to not break API */ char * ECPGprepared_statement(const char *connection_name, const char *name, int lineno) { - (void) lineno; /* keep the compiler quiet */ + struct connection *con = ecpg_get_connection(connection_name); + + if (!ecpg_init(con, connection_name, lineno)) + return NULL; - return ecpg_prepared(name, ecpg_get_connection(connection_name)); + return ecpg_prepared(name, con); } /* @@ -466,10 +472,18 @@ con = ecpg_get_connection(entry->connection); - /* free the 'prepared_statement' list entry */ - this = ecpg_find_prepared_statement(entry->stmtID, con, &prev); - if (this && !deallocate_one(lineno, compat, con, prev, this)) - return -1; + /* + * If the connection is gone, the prepared_statement list it owned is + * already unreachable, so just skip that cleanup. We must still clear + * the cache slot below so it can be reused. + */ + if (con) + { + /* free the 'prepared_statement' list entry */ + this = ecpg_find_prepared_statement(entry->stmtID, con, &prev); + if (this && !deallocate_one(lineno, compat, con, prev, this)) + return -1; + } entry->stmtID[0] = '\0'; diff -Nru postgresql-17-17.9/src/interfaces/ecpg/pgtypeslib/datetime.c postgresql-17-17.10/src/interfaces/ecpg/pgtypeslib/datetime.c --- postgresql-17-17.9/src/interfaces/ecpg/pgtypeslib/datetime.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/interfaces/ecpg/pgtypeslib/datetime.c 2026-05-11 19:46:41.000000000 +0000 @@ -335,8 +335,8 @@ */ int token[3][2]; int token_values[3] = {-1, -1, -1}; - char *fmt_token_order; - char *fmt_ystart, + const char *fmt_token_order; + const char *fmt_ystart, *fmt_mstart, *fmt_dstart; unsigned int i; diff -Nru postgresql-17-17.9/src/interfaces/ecpg/test/connect/.gitignore postgresql-17-17.10/src/interfaces/ecpg/test/connect/.gitignore --- postgresql-17-17.9/src/interfaces/ecpg/test/connect/.gitignore 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/interfaces/ecpg/test/connect/.gitignore 2026-05-11 19:46:41.000000000 +0000 @@ -8,3 +8,5 @@ /test4.c /test5 /test5.c +/test6 +/test6.c diff -Nru postgresql-17-17.9/src/interfaces/ecpg/test/connect/Makefile postgresql-17-17.10/src/interfaces/ecpg/test/connect/Makefile --- postgresql-17-17.9/src/interfaces/ecpg/test/connect/Makefile 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/interfaces/ecpg/test/connect/Makefile 2026-05-11 19:46:41.000000000 +0000 @@ -7,6 +7,7 @@ test2 test2.c \ test3 test3.c \ test4 test4.c \ - test5 test5.c + test5 test5.c \ + test6 test6.c all: $(TESTS) diff -Nru postgresql-17-17.9/src/interfaces/ecpg/test/connect/meson.build postgresql-17-17.10/src/interfaces/ecpg/test/connect/meson.build --- postgresql-17-17.9/src/interfaces/ecpg/test/connect/meson.build 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/interfaces/ecpg/test/connect/meson.build 2026-05-11 19:46:41.000000000 +0000 @@ -6,6 +6,7 @@ 'test3', 'test4', 'test5', + 'test6', ] foreach pgc_file : pgc_files diff -Nru postgresql-17-17.9/src/interfaces/ecpg/test/connect/test6.pgc postgresql-17-17.10/src/interfaces/ecpg/test/connect/test6.pgc --- postgresql-17-17.9/src/interfaces/ecpg/test/connect/test6.pgc 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/interfaces/ecpg/test/connect/test6.pgc 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,68 @@ +/* + * This test verifies that ecpg functions properly handle NULL connections + * (i.e., when a connection name doesn't exist or has been disconnected). + * Before the fix, these operations would cause a segmentation fault. + */ + +#include +#include +#include + +exec sql include ../regression; + +int +main(void) +{ +exec sql begin declare section; + int val1output = 2; + int val1 = 1; + char val2[6] = "data1"; + char *stmt1 = "SELECT * from test1 where a = $1 and b = $2"; +exec sql end declare section; + + ECPGdebug(1, stderr); + + /* Connect to the database */ + exec sql connect to REGRESSDB1 as myconn; + + /* Test 1: Try to get descriptor on a disconnected connection */ + printf("Test 1: Try to get descriptor on a disconnected connection\n"); + exec sql create table test1 (a int, b text); + exec sql insert into test1 (a,b) values (1, 'data1'); + + exec sql allocate descriptor indesc; + exec sql allocate descriptor outdesc; + + exec sql prepare foo2 from :stmt1; + + exec sql set descriptor indesc value 1 DATA = :val1; + exec sql set descriptor indesc value 2 DATA = :val2; + + exec sql execute foo2 using sql descriptor indesc into sql descriptor outdesc; + + exec sql rollback; + exec sql disconnect; + exec sql get descriptor outdesc value 1 :val1output = DATA; + printf("sqlca.sqlcode = %ld\n", sqlca.sqlcode); + + /* Test 2: Try to deallocate all on a non-existent connection */ + printf("Test 2: deallocate all with non-existent connection\n"); + exec sql at nonexistent deallocate all; + printf("sqlca.sqlcode = %ld\n", sqlca.sqlcode); + + /* Test 3: deallocate on disconnected connection */ + printf("Test 3: deallocate all on disconnected connection\n"); + exec sql deallocate all; + printf("sqlca.sqlcode = %ld\n", sqlca.sqlcode); + + /* Test 4: Use prepared statement from non-existent connection */ + printf("Test 4: Use prepared statement from non-existent connection\n"); + exec sql at nonexistent prepare stmt1 FROM "SELECT 1"; + exec sql at nonexistent declare cur1 cursor for stmt1; + exec sql at nonexistent open cur1; + printf("sqlca.sqlcode = %ld\n", sqlca.sqlcode); + + printf("All tests completed !\n"); + + return 0; +} diff -Nru postgresql-17-17.9/src/interfaces/ecpg/test/ecpg_schedule postgresql-17-17.10/src/interfaces/ecpg/test/ecpg_schedule --- postgresql-17-17.9/src/interfaces/ecpg/test/ecpg_schedule 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/interfaces/ecpg/test/ecpg_schedule 2026-05-11 19:46:41.000000000 +0000 @@ -13,6 +13,7 @@ test: connect/test3 test: connect/test4 test: connect/test5 +test: connect/test6 test: pgtypeslib/dt_test test: pgtypeslib/dt_test2 test: pgtypeslib/num_test diff -Nru postgresql-17-17.9/src/interfaces/ecpg/test/expected/connect-test6.c postgresql-17-17.10/src/interfaces/ecpg/test/expected/connect-test6.c --- postgresql-17-17.9/src/interfaces/ecpg/test/expected/connect-test6.c 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/interfaces/ecpg/test/expected/connect-test6.c 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,146 @@ +/* Processed by ecpg (regression mode) */ +/* These include files are added by the preprocessor */ +#include +#include +#include +/* End of automatic include section */ +#define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y)) + +#line 1 "test6.pgc" +/* + * This test verifies that ecpg functions properly handle NULL connections + * (i.e., when a connection name doesn't exist or has been disconnected). + * Before the fix, these operations would cause a segmentation fault. + */ + +#include +#include +#include + + +#line 1 "regression.h" + + + + + + +#line 11 "test6.pgc" + + +int +main(void) +{ +/* exec sql begin declare section */ + + + + + +#line 17 "test6.pgc" + int val1output = 2 ; + +#line 18 "test6.pgc" + int val1 = 1 ; + +#line 19 "test6.pgc" + char val2 [ 6 ] = "data1" ; + +#line 20 "test6.pgc" + char * stmt1 = "SELECT * from test1 where a = $1 and b = $2" ; +/* exec sql end declare section */ +#line 21 "test6.pgc" + + + ECPGdebug(1, stderr); + + /* Connect to the database */ + { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , "myconn", 0); } +#line 26 "test6.pgc" + + + /* Test 1: Try to get descriptor on a disconnected connection */ + printf("Test 1: Try to get descriptor on a disconnected connection\n"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table test1 ( a int , b text )", ECPGt_EOIT, ECPGt_EORT);} +#line 30 "test6.pgc" + + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into test1 ( a , b ) values ( 1 , 'data1' )", ECPGt_EOIT, ECPGt_EORT);} +#line 31 "test6.pgc" + + + ECPGallocate_desc(__LINE__, "indesc"); +#line 33 "test6.pgc" + + ECPGallocate_desc(__LINE__, "outdesc"); +#line 34 "test6.pgc" + + + { ECPGprepare(__LINE__, NULL, 0, "foo2", stmt1);} +#line 36 "test6.pgc" + + + { ECPGset_desc(__LINE__, "indesc", 1,ECPGd_data, + ECPGt_int,&(val1),(long)1,(long)1,sizeof(int), ECPGd_EODT); +} +#line 38 "test6.pgc" + + { ECPGset_desc(__LINE__, "indesc", 2,ECPGd_data, + ECPGt_char,(val2),(long)6,(long)1,(6)*sizeof(char), ECPGd_EODT); +} +#line 39 "test6.pgc" + + + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_execute, "foo2", + ECPGt_descriptor, "indesc", 1L, 1L, 1L, + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_descriptor, "outdesc", 1L, 1L, 1L, + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);} +#line 41 "test6.pgc" + + + { ECPGtrans(__LINE__, NULL, "rollback");} +#line 43 "test6.pgc" + + { ECPGdisconnect(__LINE__, "CURRENT");} +#line 44 "test6.pgc" + + { ECPGget_desc(__LINE__, "outdesc", 1,ECPGd_data, + ECPGt_int,&(val1output),(long)1,(long)1,sizeof(int), ECPGd_EODT); +} +#line 45 "test6.pgc" + + printf("sqlca.sqlcode = %ld\n", sqlca.sqlcode); + + /* Test 2: Try to deallocate all on a non-existent connection */ + printf("Test 2: deallocate all with non-existent connection\n"); + { ECPGdeallocate_all(__LINE__, 0, "nonexistent");} +#line 50 "test6.pgc" + + printf("sqlca.sqlcode = %ld\n", sqlca.sqlcode); + + /* Test 3: deallocate on disconnected connection */ + printf("Test 3: deallocate all on disconnected connection\n"); + { ECPGdeallocate_all(__LINE__, 0, NULL);} +#line 55 "test6.pgc" + + printf("sqlca.sqlcode = %ld\n", sqlca.sqlcode); + + /* Test 4: Use prepared statement from non-existent connection */ + printf("Test 4: Use prepared statement from non-existent connection\n"); + { ECPGprepare(__LINE__, "nonexistent", 0, "stmt1", "SELECT 1");} +#line 60 "test6.pgc" + + /* declare cur1 cursor for $1 */ +#line 61 "test6.pgc" + + { ECPGdo(__LINE__, 0, 1, "nonexistent", 0, ECPGst_normal, "declare cur1 cursor for $1", + ECPGt_char_variable,(ECPGprepared_statement("nonexistent", "stmt1", __LINE__)),(long)1,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);} +#line 62 "test6.pgc" + + printf("sqlca.sqlcode = %ld\n", sqlca.sqlcode); + + printf("All tests completed !\n"); + + return 0; +} diff -Nru postgresql-17-17.9/src/interfaces/ecpg/test/expected/connect-test6.stderr postgresql-17-17.10/src/interfaces/ecpg/test/expected/connect-test6.stderr --- postgresql-17-17.9/src/interfaces/ecpg/test/expected/connect-test6.stderr 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/interfaces/ecpg/test/expected/connect-test6.stderr 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,50 @@ +[NO_PID]: ECPGdebug: set to 1 +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ECPGconnect: opening database ecpg1_regression on port +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute on line 30: query: create table test1 ( a int , b text ); with 0 parameter(s) on connection myconn +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute on line 30: using PQexec +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_process_output on line 30: OK: CREATE TABLE +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute on line 31: query: insert into test1 ( a , b ) values ( 1 , 'data1' ); with 0 parameter(s) on connection myconn +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute on line 31: using PQexec +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_process_output on line 31: OK: INSERT 0 1 +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: prepare_common on line 36: name foo2; query: "SELECT * from test1 where a = $1 and b = $2" +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute on line 41: query: SELECT * from test1 where a = $1 and b = $2; with 2 parameter(s) on connection myconn +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute on line 41: using PQexecPrepared for "SELECT * from test1 where a = $1 and b = $2" +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_free_params on line 41: parameter 1 = 1 +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_free_params on line 41: parameter 2 = data1 +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_process_output on line 41: correctly got 1 tuples with 2 fields +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_process_output on line 41: putting result (1 tuples) into descriptor outdesc +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ECPGtrans on line 43: action "rollback"; connection "myconn" +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: deallocate_one on line 0: name foo2 +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_finish: connection myconn closed +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ECPGget_desc: reading items for tuple 1 +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: raising sqlcode -220 on line 45: connection "NULL" does not exist on line 45 +[NO_PID]: sqlca: code: -220, state: 08003 +[NO_PID]: raising sqlcode -220 on line 50: connection "nonexistent" does not exist on line 50 +[NO_PID]: sqlca: code: -220, state: 08003 +[NO_PID]: raising sqlcode -220 on line 55: connection "NULL" does not exist on line 55 +[NO_PID]: sqlca: code: -220, state: 08003 +[NO_PID]: raising sqlcode -220 on line 60: connection "nonexistent" does not exist on line 60 +[NO_PID]: sqlca: code: -220, state: 08003 +[NO_PID]: raising sqlcode -220 on line 63: connection "nonexistent" does not exist on line 63 +[NO_PID]: sqlca: code: -220, state: 08003 +[NO_PID]: raising sqlcode -220 on line 62: connection "nonexistent" does not exist on line 62 +[NO_PID]: sqlca: code: -220, state: 08003 diff -Nru postgresql-17-17.9/src/interfaces/ecpg/test/expected/connect-test6.stdout postgresql-17-17.10/src/interfaces/ecpg/test/expected/connect-test6.stdout --- postgresql-17-17.9/src/interfaces/ecpg/test/expected/connect-test6.stdout 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/interfaces/ecpg/test/expected/connect-test6.stdout 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,9 @@ +Test 1: Try to get descriptor on a disconnected connection +sqlca.sqlcode = -220 +Test 2: deallocate all with non-existent connection +sqlca.sqlcode = -220 +Test 3: deallocate all on disconnected connection +sqlca.sqlcode = -220 +Test 4: Use prepared statement from non-existent connection +sqlca.sqlcode = -220 +All tests completed ! diff -Nru postgresql-17-17.9/src/interfaces/libpq/fe-auth-scram.c postgresql-17-17.10/src/interfaces/libpq/fe-auth-scram.c --- postgresql-17-17.9/src/interfaces/libpq/fe-auth-scram.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/interfaces/libpq/fe-auth-scram.c 2026-05-11 19:46:41.000000000 +0000 @@ -626,7 +626,7 @@ /* Verify immediately that the server used our part of the nonce */ if (strlen(nonce) < strlen(state->client_nonce) || - memcmp(nonce, state->client_nonce, strlen(state->client_nonce)) != 0) + timingsafe_bcmp(nonce, state->client_nonce, strlen(state->client_nonce)) != 0) { libpq_append_conn_error(conn, "invalid SCRAM response (nonce mismatch)"); return false; @@ -873,8 +873,8 @@ pg_hmac_free(ctx); /* signature processed, so now check after it */ - if (memcmp(expected_ServerSignature, state->ServerSignature, - state->key_length) != 0) + if (timingsafe_bcmp(expected_ServerSignature, state->ServerSignature, + state->key_length) != 0) *match = false; else *match = true; diff -Nru postgresql-17-17.9/src/interfaces/libpq/fe-exec.c postgresql-17-17.10/src/interfaces/libpq/fe-exec.c --- postgresql-17-17.9/src/interfaces/libpq/fe-exec.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/interfaces/libpq/fe-exec.c 2026-05-11 19:46:41.000000000 +0000 @@ -24,6 +24,7 @@ #include #endif +#include "common/int.h" #include "libpq-fe.h" #include "libpq-int.h" #include "mb/pg_wchar.h" @@ -2990,6 +2991,20 @@ const PQArgBlock *args, int nargs) { + return PQnfn(conn, fnid, result_buf, -1, result_len, + result_is_int, args, nargs); +} + +/* + * PQnfn + * Private version of PQfn() with verification that returned data fits in + * result_buf when result_is_int == 0. Setting buf_size to -1 disables + * this verification. + */ +PGresult * +PQnfn(PGconn *conn, int fnid, int *result_buf, int buf_size, int *result_len, + int result_is_int, const PQArgBlock *args, int nargs) +{ *result_len = 0; if (!conn) @@ -3017,7 +3032,7 @@ } return pqFunctionCall3(conn, fnid, - result_buf, result_len, + result_buf, buf_size, result_len, result_is_int, args, nargs); } @@ -4210,27 +4225,6 @@ /* - * Frontend version of the backend's add_size(), intended to be API-compatible - * with the pg_add_*_overflow() helpers. Stores the result into *dst on success. - * Returns true instead if the addition overflows. - * - * TODO: move to common/int.h - */ -static bool -add_size_overflow(size_t s1, size_t s2, size_t *dst) -{ - size_t result; - - result = s1 + s2; - if (result < s1 || result < s2) - return true; - - *dst = result; - return false; -} - - -/* * Escape arbitrary strings. If as_ident is true, we escape the result * as an identifier; if false, as a literal. The result is returned in * a newly allocated buffer. If we fail due to an encoding violation or out @@ -4313,14 +4307,14 @@ * Allocate output buffer. Protect against overflow, in case the caller * has allocated a large fraction of the available size_t. */ - if (add_size_overflow(input_len, num_quotes, &result_size) || - add_size_overflow(result_size, 3, &result_size)) /* two quotes plus a NUL */ + if (pg_add_size_overflow(input_len, num_quotes, &result_size) || + pg_add_size_overflow(result_size, 3, &result_size)) /* two quotes plus a NUL */ goto overflow; if (!as_ident && num_backslashes > 0) { - if (add_size_overflow(result_size, num_backslashes, &result_size) || - add_size_overflow(result_size, 2, &result_size)) /* for " E" prefix */ + if (pg_add_size_overflow(result_size, num_backslashes, &result_size) || + pg_add_size_overflow(result_size, 2, &result_size)) /* for " E" prefix */ goto overflow; } @@ -4482,9 +4476,9 @@ if (use_hex) { /* We prepend "\x" and double each input character. */ - if (add_size_overflow(len, bslash_len + 1, &len) || - add_size_overflow(len, from_length, &len) || - add_size_overflow(len, from_length, &len)) + if (pg_add_size_overflow(len, bslash_len + 1, &len) || + pg_add_size_overflow(len, from_length, &len) || + pg_add_size_overflow(len, from_length, &len)) goto overflow; } else @@ -4494,22 +4488,22 @@ { if (*vp < 0x20 || *vp > 0x7e) { - if (add_size_overflow(len, bslash_len + 3, &len)) /* octal "\ooo" */ + if (pg_add_size_overflow(len, bslash_len + 3, &len)) /* octal "\ooo" */ goto overflow; } else if (*vp == '\'') { - if (add_size_overflow(len, 2, &len)) /* double each quote */ + if (pg_add_size_overflow(len, 2, &len)) /* double each quote */ goto overflow; } else if (*vp == '\\') { - if (add_size_overflow(len, bslash_len * 2, &len)) /* double each backslash */ + if (pg_add_size_overflow(len, bslash_len * 2, &len)) /* double each backslash */ goto overflow; } else { - if (add_size_overflow(len, 1, &len)) + if (pg_add_size_overflow(len, 1, &len)) goto overflow; } } diff -Nru postgresql-17-17.9/src/interfaces/libpq/fe-lobj.c postgresql-17-17.10/src/interfaces/libpq/fe-lobj.c --- postgresql-17-17.9/src/interfaces/libpq/fe-lobj.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/interfaces/libpq/fe-lobj.c 2026-05-11 19:46:41.000000000 +0000 @@ -271,8 +271,8 @@ argv[1].len = 4; argv[1].u.integer = (int) len; - res = PQfn(conn, conn->lobjfuncs->fn_lo_read, - (void *) buf, &result_len, 0, argv, 2); + res = PQnfn(conn, conn->lobjfuncs->fn_lo_read, + (void *) buf, len, &result_len, 0, argv, 2); if (PQresultStatus(res) == PGRES_COMMAND_OK) { PQclear(res); @@ -412,8 +412,8 @@ argv[2].len = 4; argv[2].u.integer = whence; - res = PQfn(conn, conn->lobjfuncs->fn_lo_lseek64, - (void *) &retval, &result_len, 0, argv, 3); + res = PQnfn(conn, conn->lobjfuncs->fn_lo_lseek64, + (void *) &retval, sizeof(retval), &result_len, 0, argv, 3); if (PQresultStatus(res) == PGRES_COMMAND_OK && result_len == 8) { PQclear(res); @@ -566,8 +566,8 @@ argv[0].len = 4; argv[0].u.integer = fd; - res = PQfn(conn, conn->lobjfuncs->fn_lo_tell64, - (void *) &retval, &result_len, 0, argv, 1); + res = PQnfn(conn, conn->lobjfuncs->fn_lo_tell64, + (void *) &retval, sizeof(retval), &result_len, 0, argv, 1); if (PQresultStatus(res) == PGRES_COMMAND_OK && result_len == 8) { PQclear(res); diff -Nru postgresql-17-17.9/src/interfaces/libpq/fe-print.c postgresql-17-17.10/src/interfaces/libpq/fe-print.c --- postgresql-17-17.9/src/interfaces/libpq/fe-print.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/interfaces/libpq/fe-print.c 2026-05-11 19:46:41.000000000 +0000 @@ -33,6 +33,7 @@ #endif #endif +#include "common/int.h" #include "libpq-fe.h" #include "libpq-int.h" @@ -451,27 +452,6 @@ } -/* - * Frontend version of the backend's add_size(), intended to be API-compatible - * with the pg_add_*_overflow() helpers. Stores the result into *dst on success. - * Returns true instead if the addition overflows. - * - * TODO: move to common/int.h - */ -static bool -add_size_overflow(size_t s1, size_t s2, size_t *dst) -{ - size_t result; - - result = s1 + s2; - if (result < s1 || result < s2) - return true; - - *dst = result; - return false; -} - - static char * do_header(FILE *fout, const PQprintOpt *po, const int nFields, int *fieldMax, const char **fieldNames, unsigned char *fieldNotNum, @@ -492,20 +472,20 @@ for (; n < nFields; n++) { /* Field plus separator, plus 2 extra '-' in standard format. */ - if (add_size_overflow(tot, fieldMax[n], &tot) || - add_size_overflow(tot, fs_len, &tot) || - (po->standard && add_size_overflow(tot, 2, &tot))) + if (pg_add_size_overflow(tot, fieldMax[n], &tot) || + pg_add_size_overflow(tot, fs_len, &tot) || + (po->standard && pg_add_size_overflow(tot, 2, &tot))) goto overflow; } if (po->standard) { /* An extra separator at the front and back. */ - if (add_size_overflow(tot, fs_len, &tot) || - add_size_overflow(tot, fs_len, &tot) || - add_size_overflow(tot, 2, &tot)) + if (pg_add_size_overflow(tot, fs_len, &tot) || + pg_add_size_overflow(tot, fs_len, &tot) || + pg_add_size_overflow(tot, 2, &tot)) goto overflow; } - if (add_size_overflow(tot, 1, &tot)) /* terminator */ + if (pg_add_size_overflow(tot, 1, &tot)) /* terminator */ goto overflow; border = malloc(tot); diff -Nru postgresql-17-17.9/src/interfaces/libpq/fe-protocol3.c postgresql-17-17.10/src/interfaces/libpq/fe-protocol3.c --- postgresql-17-17.9/src/interfaces/libpq/fe-protocol3.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/interfaces/libpq/fe-protocol3.c 2026-05-11 19:46:41.000000000 +0000 @@ -25,6 +25,7 @@ #include #endif +#include "common/int.h" #include "libpq-fe.h" #include "libpq-int.h" #include "mb/pg_wchar.h" @@ -2021,7 +2022,7 @@ */ PGresult * pqFunctionCall3(PGconn *conn, Oid fnid, - int *result_buf, int *actual_result_len, + int *result_buf, int buf_size, int *actual_result_len, int result_is_int, const PQArgBlock *args, int nargs) { @@ -2155,6 +2156,17 @@ } else { + /* + * If the server returned too much data for the + * buffer, something fishy is going on. Abandon ship. + */ + if (buf_size != -1 && *actual_result_len > buf_size) + { + libpq_append_conn_error(conn, "server returned too much data"); + handleSyncLoss(conn, id, *actual_result_len); + return pqPrepareAsyncResult(conn); + } + if (pqGetnchar((char *) result_buf, *actual_result_len, conn)) @@ -2270,26 +2282,6 @@ } /* - * Frontend version of the backend's add_size(), intended to be API-compatible - * with the pg_add_*_overflow() helpers. Stores the result into *dst on success. - * Returns true instead if the addition overflows. - * - * TODO: move to common/int.h - */ -static bool -add_size_overflow(size_t s1, size_t s2, size_t *dst) -{ - size_t result; - - result = s1 + s2; - if (result < s1 || result < s2) - return true; - - *dst = result; - return false; -} - -/* * Build a startup packet given a filled-in PGconn structure. * * We need to figure out how much space is needed, then fill it in. @@ -2321,11 +2313,11 @@ do { \ if (packet) \ strcpy(packet + packet_len, optname); \ - if (add_size_overflow(packet_len, strlen(optname) + 1, &packet_len)) \ + if (pg_add_size_overflow(packet_len, strlen(optname) + 1, &packet_len)) \ return 0; \ if (packet) \ strcpy(packet + packet_len, optval); \ - if (add_size_overflow(packet_len, strlen(optval) + 1, &packet_len)) \ + if (pg_add_size_overflow(packet_len, strlen(optval) + 1, &packet_len)) \ return 0; \ } while(0) @@ -2361,7 +2353,7 @@ /* Add trailing terminator */ if (packet) packet[packet_len] = '\0'; - if (add_size_overflow(packet_len, 1, &packet_len)) + if (pg_add_size_overflow(packet_len, 1, &packet_len)) return 0; return packet_len; diff -Nru postgresql-17-17.9/src/interfaces/libpq/libpq-int.h postgresql-17-17.10/src/interfaces/libpq/libpq-int.h --- postgresql-17-17.9/src/interfaces/libpq/libpq-int.h 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/interfaces/libpq/libpq-int.h 2026-05-11 19:46:41.000000000 +0000 @@ -721,6 +721,9 @@ extern void pqCommandQueueAdvance(PGconn *conn, bool isReadyForQuery, bool gotSync); extern int PQsendQueryContinue(PGconn *conn, const char *query); +extern PGresult *PQnfn(PGconn *conn, int fnid, int *result_buf, int buf_size, + int *result_len, int result_is_int, + const PQArgBlock *args, int nargs); /* === in fe-protocol3.c === */ @@ -736,7 +739,8 @@ extern int pqGetlineAsync3(PGconn *conn, char *buffer, int bufsize); extern int pqEndcopy3(PGconn *conn); extern PGresult *pqFunctionCall3(PGconn *conn, Oid fnid, - int *result_buf, int *actual_result_len, + int *result_buf, int buf_size, + int *actual_result_len, int result_is_int, const PQArgBlock *args, int nargs); diff -Nru postgresql-17-17.9/src/pl/plperl/GNUmakefile postgresql-17-17.10/src/pl/plperl/GNUmakefile --- postgresql-17-17.9/src/pl/plperl/GNUmakefile 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/pl/plperl/GNUmakefile 2026-05-11 19:46:41.000000000 +0000 @@ -62,7 +62,7 @@ REGRESS_OPTS = --dbname=$(PL_TESTDB) --dlpath=$(top_builddir)/src/test/regress REGRESS = plperl_setup plperl plperl_lc plperl_trigger plperl_shared \ - plperl_elog plperl_util plperl_init plperlu plperl_array \ + plperl_elog plperl_unicode plperl_util plperl_init plperlu plperl_array \ plperl_call plperl_transaction plperl_env # if Perl can support two interpreters in one backend, # test plperl-and-plperlu cases diff -Nru postgresql-17-17.9/src/pl/plperl/expected/plperl_elog.out postgresql-17-17.10/src/pl/plperl/expected/plperl_elog.out --- postgresql-17-17.9/src/pl/plperl/expected/plperl_elog.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/pl/plperl/expected/plperl_elog.out 2026-05-11 19:46:41.000000000 +0000 @@ -97,16 +97,3 @@ 2 (1 row) --- Test non-ASCII error messages --- --- Note: this test case is known to fail if the database encoding is --- EUC_CN, EUC_JP, EUC_KR, or EUC_TW, for lack of any equivalent to --- U+00A0 (no-break space) in those encodings. However, testing with --- plain ASCII data would be rather useless, so we must live with that. -SET client_encoding TO UTF8; -create or replace function error_with_nbsp() returns void language plperl as $$ - elog(ERROR, "this message contains a no-break space"); -$$; -select error_with_nbsp(); -ERROR: this message contains a no-break space at line 2. -CONTEXT: PL/Perl function "error_with_nbsp" diff -Nru postgresql-17-17.9/src/pl/plperl/expected/plperl_elog_1.out postgresql-17-17.10/src/pl/plperl/expected/plperl_elog_1.out --- postgresql-17-17.9/src/pl/plperl/expected/plperl_elog_1.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/pl/plperl/expected/plperl_elog_1.out 2026-05-11 19:46:41.000000000 +0000 @@ -97,16 +97,3 @@ 2 (1 row) --- Test non-ASCII error messages --- --- Note: this test case is known to fail if the database encoding is --- EUC_CN, EUC_JP, EUC_KR, or EUC_TW, for lack of any equivalent to --- U+00A0 (no-break space) in those encodings. However, testing with --- plain ASCII data would be rather useless, so we must live with that. -SET client_encoding TO UTF8; -create or replace function error_with_nbsp() returns void language plperl as $$ - elog(ERROR, "this message contains a no-break space"); -$$; -select error_with_nbsp(); -ERROR: this message contains a no-break space at line 2. -CONTEXT: PL/Perl function "error_with_nbsp" diff -Nru postgresql-17-17.9/src/pl/plperl/expected/plperl_unicode.out postgresql-17-17.10/src/pl/plperl/expected/plperl_unicode.out --- postgresql-17-17.9/src/pl/plperl/expected/plperl_unicode.out 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/pl/plperl/expected/plperl_unicode.out 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,18 @@ +-- Test non-ASCII error messages +-- +-- This test case would fail if the database encoding is EUC_CN, EUC_JP, +-- EUC_KR, or EUC_TW, for lack of any equivalent to U+00A0 (no-break space) in +-- those encodings. However, testing with plain ASCII data would be rather +-- useless, so we must live with that. +SELECT getdatabaseencoding() IN ('EUC_CN', 'EUC_JP', 'EUC_KR', 'EUC_TW') + AS skip_test \gset +\if :skip_test +\quit +\endif +SET client_encoding TO UTF8; +create or replace function error_with_nbsp() returns void language plperl as $$ + elog(ERROR, "this message contains a no-break space"); +$$; +select error_with_nbsp(); +ERROR: this message contains a no-break space at line 2. +CONTEXT: PL/Perl function "error_with_nbsp" diff -Nru postgresql-17-17.9/src/pl/plperl/expected/plperl_unicode_1.out postgresql-17-17.10/src/pl/plperl/expected/plperl_unicode_1.out --- postgresql-17-17.9/src/pl/plperl/expected/plperl_unicode_1.out 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/pl/plperl/expected/plperl_unicode_1.out 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,10 @@ +-- Test non-ASCII error messages +-- +-- This test case would fail if the database encoding is EUC_CN, EUC_JP, +-- EUC_KR, or EUC_TW, for lack of any equivalent to U+00A0 (no-break space) in +-- those encodings. However, testing with plain ASCII data would be rather +-- useless, so we must live with that. +SELECT getdatabaseencoding() IN ('EUC_CN', 'EUC_JP', 'EUC_KR', 'EUC_TW') + AS skip_test \gset +\if :skip_test +\quit diff -Nru postgresql-17-17.9/src/pl/plperl/meson.build postgresql-17-17.10/src/pl/plperl/meson.build --- postgresql-17-17.9/src/pl/plperl/meson.build 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/pl/plperl/meson.build 2026-05-11 19:46:41.000000000 +0000 @@ -88,6 +88,7 @@ 'plperl_trigger', 'plperl_shared', 'plperl_elog', + 'plperl_unicode', 'plperl_util', 'plperl_init', 'plperlu', diff -Nru postgresql-17-17.9/src/pl/plperl/sql/plperl_elog.sql postgresql-17-17.10/src/pl/plperl/sql/plperl_elog.sql --- postgresql-17-17.9/src/pl/plperl/sql/plperl_elog.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/pl/plperl/sql/plperl_elog.sql 2026-05-11 19:46:41.000000000 +0000 @@ -76,18 +76,3 @@ $$; select indirect_die_caller(); - --- Test non-ASCII error messages --- --- Note: this test case is known to fail if the database encoding is --- EUC_CN, EUC_JP, EUC_KR, or EUC_TW, for lack of any equivalent to --- U+00A0 (no-break space) in those encodings. However, testing with --- plain ASCII data would be rather useless, so we must live with that. - -SET client_encoding TO UTF8; - -create or replace function error_with_nbsp() returns void language plperl as $$ - elog(ERROR, "this message contains a no-break space"); -$$; - -select error_with_nbsp(); diff -Nru postgresql-17-17.9/src/pl/plperl/sql/plperl_unicode.sql postgresql-17-17.10/src/pl/plperl/sql/plperl_unicode.sql --- postgresql-17-17.9/src/pl/plperl/sql/plperl_unicode.sql 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/pl/plperl/sql/plperl_unicode.sql 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,19 @@ +-- Test non-ASCII error messages +-- +-- This test case would fail if the database encoding is EUC_CN, EUC_JP, +-- EUC_KR, or EUC_TW, for lack of any equivalent to U+00A0 (no-break space) in +-- those encodings. However, testing with plain ASCII data would be rather +-- useless, so we must live with that. +SELECT getdatabaseencoding() IN ('EUC_CN', 'EUC_JP', 'EUC_KR', 'EUC_TW') + AS skip_test \gset +\if :skip_test +\quit +\endif + +SET client_encoding TO UTF8; + +create or replace function error_with_nbsp() returns void language plperl as $$ + elog(ERROR, "this message contains a no-break space"); +$$; + +select error_with_nbsp(); diff -Nru postgresql-17-17.9/src/pl/plpgsql/src/expected/plpgsql_trap.out postgresql-17-17.10/src/pl/plpgsql/src/expected/plpgsql_trap.out --- postgresql-17-17.9/src/pl/plpgsql/src/expected/plpgsql_trap.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/pl/plpgsql/src/expected/plpgsql_trap.out 2026-05-11 19:46:41.000000000 +0000 @@ -138,13 +138,11 @@ drop table foo; create function trap_timeout() returns void as $$ begin - declare x int; begin - -- we assume this will take longer than 1 second: - select count(*) into x from generate_series(1, 1_000_000_000_000); + perform pg_sleep(10); exception when others then - raise notice 'caught others?'; + raise notice 'caught others: %', sqlerrm; when query_canceled then raise notice 'nyeah nyeah, can''t stop me'; end; @@ -157,7 +155,7 @@ select trap_timeout(); NOTICE: nyeah nyeah, can't stop me ERROR: end of function -CONTEXT: PL/pgSQL function trap_timeout() line 15 at RAISE +CONTEXT: PL/pgSQL function trap_timeout() line 13 at RAISE rollback; -- Test for pass-by-ref values being stored in proper context create function test_variable_storage() returns text as $$ diff -Nru postgresql-17-17.9/src/pl/plpgsql/src/sql/plpgsql_trap.sql postgresql-17-17.10/src/pl/plpgsql/src/sql/plpgsql_trap.sql --- postgresql-17-17.9/src/pl/plpgsql/src/sql/plpgsql_trap.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/pl/plpgsql/src/sql/plpgsql_trap.sql 2026-05-11 19:46:41.000000000 +0000 @@ -85,13 +85,11 @@ create function trap_timeout() returns void as $$ begin - declare x int; begin - -- we assume this will take longer than 1 second: - select count(*) into x from generate_series(1, 1_000_000_000_000); + perform pg_sleep(10); exception when others then - raise notice 'caught others?'; + raise notice 'caught others: %', sqlerrm; when query_canceled then raise notice 'nyeah nyeah, can''t stop me'; end; diff -Nru postgresql-17-17.9/src/pl/plpython/expected/plpython_unicode.out postgresql-17-17.10/src/pl/plpython/expected/plpython_unicode.out --- postgresql-17-17.9/src/pl/plpython/expected/plpython_unicode.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/pl/plpython/expected/plpython_unicode.out 2026-05-11 19:46:41.000000000 +0000 @@ -1,11 +1,16 @@ -- -- Unicode handling -- --- Note: this test case is known to fail if the database encoding is --- EUC_CN, EUC_JP, EUC_KR, or EUC_TW, for lack of any equivalent to --- U+00A0 (no-break space) in those encodings. However, testing with --- plain ASCII data would be rather useless, so we must live with that. +-- This test case would fail if the database encoding is EUC_CN, EUC_JP, +-- EUC_KR, or EUC_TW, for lack of any equivalent to U+00A0 (no-break space) in +-- those encodings. However, testing with plain ASCII data would be rather +-- useless, so we must live with that. -- +SELECT getdatabaseencoding() IN ('EUC_CN', 'EUC_JP', 'EUC_KR', 'EUC_TW') + AS skip_test \gset +\if :skip_test +\quit +\endif SET client_encoding TO UTF8; CREATE TABLE unicode_test ( testvalue text NOT NULL diff -Nru postgresql-17-17.9/src/pl/plpython/expected/plpython_unicode_1.out postgresql-17-17.10/src/pl/plpython/expected/plpython_unicode_1.out --- postgresql-17-17.9/src/pl/plpython/expected/plpython_unicode_1.out 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/pl/plpython/expected/plpython_unicode_1.out 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,12 @@ +-- +-- Unicode handling +-- +-- This test case would fail if the database encoding is EUC_CN, EUC_JP, +-- EUC_KR, or EUC_TW, for lack of any equivalent to U+00A0 (no-break space) in +-- those encodings. However, testing with plain ASCII data would be rather +-- useless, so we must live with that. +-- +SELECT getdatabaseencoding() IN ('EUC_CN', 'EUC_JP', 'EUC_KR', 'EUC_TW') + AS skip_test \gset +\if :skip_test +\quit diff -Nru postgresql-17-17.9/src/pl/plpython/sql/plpython_unicode.sql postgresql-17-17.10/src/pl/plpython/sql/plpython_unicode.sql --- postgresql-17-17.9/src/pl/plpython/sql/plpython_unicode.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/pl/plpython/sql/plpython_unicode.sql 2026-05-11 19:46:41.000000000 +0000 @@ -1,11 +1,16 @@ -- -- Unicode handling -- --- Note: this test case is known to fail if the database encoding is --- EUC_CN, EUC_JP, EUC_KR, or EUC_TW, for lack of any equivalent to --- U+00A0 (no-break space) in those encodings. However, testing with --- plain ASCII data would be rather useless, so we must live with that. +-- This test case would fail if the database encoding is EUC_CN, EUC_JP, +-- EUC_KR, or EUC_TW, for lack of any equivalent to U+00A0 (no-break space) in +-- those encodings. However, testing with plain ASCII data would be rather +-- useless, so we must live with that. -- +SELECT getdatabaseencoding() IN ('EUC_CN', 'EUC_JP', 'EUC_KR', 'EUC_TW') + AS skip_test \gset +\if :skip_test +\quit +\endif SET client_encoding TO UTF8; diff -Nru postgresql-17-17.9/src/pl/tcl/expected/pltcl_unicode.out postgresql-17-17.10/src/pl/tcl/expected/pltcl_unicode.out --- postgresql-17-17.9/src/pl/tcl/expected/pltcl_unicode.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/pl/tcl/expected/pltcl_unicode.out 2026-05-11 19:46:41.000000000 +0000 @@ -1,11 +1,16 @@ -- -- Unicode handling -- --- Note: this test case is known to fail if the database encoding is --- EUC_CN, EUC_JP, EUC_KR, or EUC_TW, for lack of any equivalent to --- U+00A0 (no-break space) in those encodings. However, testing with --- plain ASCII data would be rather useless, so we must live with that. +-- This test case would fail if the database encoding is EUC_CN, EUC_JP, +-- EUC_KR, or EUC_TW, for lack of any equivalent to U+00A0 (no-break space) in +-- those encodings. However, testing with plain ASCII data would be rather +-- useless, so we must live with that. -- +SELECT getdatabaseencoding() IN ('EUC_CN', 'EUC_JP', 'EUC_KR', 'EUC_TW') + AS skip_test \gset +\if :skip_test +\quit +\endif SET client_encoding TO UTF8; CREATE TABLE unicode_test ( testvalue text NOT NULL diff -Nru postgresql-17-17.9/src/pl/tcl/expected/pltcl_unicode_1.out postgresql-17-17.10/src/pl/tcl/expected/pltcl_unicode_1.out --- postgresql-17-17.9/src/pl/tcl/expected/pltcl_unicode_1.out 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/pl/tcl/expected/pltcl_unicode_1.out 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,12 @@ +-- +-- Unicode handling +-- +-- This test case would fail if the database encoding is EUC_CN, EUC_JP, +-- EUC_KR, or EUC_TW, for lack of any equivalent to U+00A0 (no-break space) in +-- those encodings. However, testing with plain ASCII data would be rather +-- useless, so we must live with that. +-- +SELECT getdatabaseencoding() IN ('EUC_CN', 'EUC_JP', 'EUC_KR', 'EUC_TW') + AS skip_test \gset +\if :skip_test +\quit diff -Nru postgresql-17-17.9/src/pl/tcl/sql/pltcl_unicode.sql postgresql-17-17.10/src/pl/tcl/sql/pltcl_unicode.sql --- postgresql-17-17.9/src/pl/tcl/sql/pltcl_unicode.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/pl/tcl/sql/pltcl_unicode.sql 2026-05-11 19:46:41.000000000 +0000 @@ -1,11 +1,16 @@ -- -- Unicode handling -- --- Note: this test case is known to fail if the database encoding is --- EUC_CN, EUC_JP, EUC_KR, or EUC_TW, for lack of any equivalent to --- U+00A0 (no-break space) in those encodings. However, testing with --- plain ASCII data would be rather useless, so we must live with that. +-- This test case would fail if the database encoding is EUC_CN, EUC_JP, +-- EUC_KR, or EUC_TW, for lack of any equivalent to U+00A0 (no-break space) in +-- those encodings. However, testing with plain ASCII data would be rather +-- useless, so we must live with that. -- +SELECT getdatabaseencoding() IN ('EUC_CN', 'EUC_JP', 'EUC_KR', 'EUC_TW') + AS skip_test \gset +\if :skip_test +\quit +\endif SET client_encoding TO UTF8; diff -Nru postgresql-17-17.9/src/port/getopt.c postgresql-17-17.10/src/port/getopt.c --- postgresql-17-17.9/src/port/getopt.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/port/getopt.c 2026-05-11 19:46:41.000000000 +0000 @@ -71,7 +71,7 @@ getopt(int nargc, char *const *nargv, const char *ostr) { static char *place = EMSG; /* option letter processing */ - char *oli; /* option letter list index */ + const char *oli; /* option letter list index */ if (!*place) { /* update scanning pointer */ diff -Nru postgresql-17-17.9/src/port/getopt_long.c postgresql-17-17.10/src/port/getopt_long.c --- postgresql-17-17.9/src/port/getopt_long.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/port/getopt_long.c 2026-05-11 19:46:41.000000000 +0000 @@ -62,7 +62,7 @@ const struct option *longopts, int *longindex) { static char *place = EMSG; /* option letter processing */ - char *oli; /* option letter list index */ + const char *oli; /* option letter list index */ static int nonopt_start = -1; static bool force_nonopt = false; diff -Nru postgresql-17-17.9/src/port/meson.build postgresql-17-17.10/src/port/meson.build --- postgresql-17-17.9/src/port/meson.build 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/port/meson.build 2026-05-11 19:46:41.000000000 +0000 @@ -70,6 +70,7 @@ ['strlcat'], ['strlcpy'], ['strnlen'], + ['timingsafe_bcmp'], ] if host_system != 'windows' diff -Nru postgresql-17-17.9/src/port/path.c postgresql-17-17.10/src/port/path.c --- postgresql-17-17.9/src/port/path.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/port/path.c 2026-05-11 19:46:41.000000000 +0000 @@ -627,6 +627,23 @@ } /* + * Detect whether a path is safe for use during archive extraction. + * + * This applies canonicalize_path(), then it checks that the path does + * not contain any parent directory references. + */ +bool +path_is_safe_for_extraction(const char *path) +{ + char buf[MAXPGPATH]; + + strlcpy(buf, path, sizeof(buf)); + canonicalize_path(buf); + + return path_is_relative_and_below_cwd(buf); +} + +/* * Detect whether path1 is a prefix of path2 (including equality). * * This is pretty trivial, but it seems better to export a function than diff -Nru postgresql-17-17.9/src/port/timingsafe_bcmp.c postgresql-17-17.10/src/port/timingsafe_bcmp.c --- postgresql-17-17.9/src/port/timingsafe_bcmp.c 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/port/timingsafe_bcmp.c 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,43 @@ +/* + * src/port/timingsafe_bcmp.c + * + * $OpenBSD: timingsafe_bcmp.c,v 1.3 2015/08/31 02:53:57 guenther Exp $ + */ + +/* + * Copyright (c) 2010 Damien Miller. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "c.h" + +#ifdef USE_SSL +#include +#endif + +int +timingsafe_bcmp(const void *b1, const void *b2, size_t n) +{ +#ifdef USE_SSL + return CRYPTO_memcmp(b1, b2, n); +#else + const unsigned char *p1 = b1, + *p2 = b2; + int ret = 0; + + for (; n > 0; n--) + ret |= *p1++ ^ *p2++; + return (ret != 0); +#endif +} diff -Nru postgresql-17-17.9/src/port/win32setlocale.c postgresql-17-17.10/src/port/win32setlocale.c --- postgresql-17-17.9/src/port/win32setlocale.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/port/win32setlocale.c 2026-05-11 19:46:41.000000000 +0000 @@ -119,9 +119,9 @@ const char *needle_start = map[i].locale_name_start; const char *needle_end = map[i].locale_name_end; const char *replacement = map[i].replacement; - char *match; - char *match_start = NULL; - char *match_end = NULL; + const char *match; + const char *match_start = NULL; + const char *match_end = NULL; match = strstr(locale, needle_start); if (match) @@ -148,7 +148,7 @@ /* Found a match. Replace the matched string. */ int matchpos = match_start - locale; int replacementlen = strlen(replacement); - char *rest = match_end; + const char *rest = match_end; int restlen = strlen(rest); /* check that the result fits in the static buffer */ diff -Nru postgresql-17-17.9/src/test/Makefile postgresql-17-17.10/src/test/Makefile --- postgresql-17-17.9/src/test/Makefile 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/Makefile 2026-05-11 19:46:41.000000000 +0000 @@ -12,7 +12,7 @@ top_builddir = ../.. include $(top_builddir)/src/Makefile.global -SUBDIRS = perl regress isolation modules authentication recovery subscription +SUBDIRS = perl postmaster regress isolation modules authentication recovery subscription ifeq ($(with_icu),yes) SUBDIRS += icu diff -Nru postgresql-17-17.9/src/test/isolation/expected/insert-conflict-do-update-4.out postgresql-17-17.10/src/test/isolation/expected/insert-conflict-do-update-4.out --- postgresql-17-17.9/src/test/isolation/expected/insert-conflict-do-update-4.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/isolation/expected/insert-conflict-do-update-4.out 2026-05-11 19:46:41.000000000 +0000 @@ -12,11 +12,11 @@ step update2a: UPDATE upsert SET i = i + 10 WHERE i = 1; step c2: COMMIT; step insert1: <... completed> -step select1: SELECT * FROM upsert; +step select1: SELECT * FROM upsert ORDER BY i; i| j| k --+--+--- -11|10|100 1|11|111 +11|10|100 (2 rows) step c1: COMMIT; @@ -33,7 +33,7 @@ step update2b: UPDATE upsert SET i = i + 150 WHERE i = 1; step c2: COMMIT; step insert1: <... completed> -step select1: SELECT * FROM upsert; +step select1: SELECT * FROM upsert ORDER BY i; i| j| k ---+--+--- 1|11|111 @@ -54,7 +54,7 @@ step delete2: DELETE FROM upsert WHERE i = 1; step c2: COMMIT; step insert1: <... completed> -step select1: SELECT * FROM upsert; +step select1: SELECT * FROM upsert ORDER BY i; i| j| k -+--+--- 1|11|111 diff -Nru postgresql-17-17.9/src/test/isolation/expected/merge-update.out postgresql-17-17.10/src/test/isolation/expected/merge-update.out --- postgresql-17-17.9/src/test/isolation/expected/merge-update.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/isolation/expected/merge-update.out 2026-05-11 19:46:41.000000000 +0000 @@ -549,3 +549,36 @@ step pa_merge2c_dup: <... completed> ERROR: MERGE command cannot affect row a second time step a2: ABORT; + +starting permutation: merge2a c1 s1beginrr merge1 c2 +step merge2a: + MERGE INTO target t + USING (SELECT 1 as key, 'merge2a' as val) s + ON s.key = t.key + WHEN NOT MATCHED THEN + INSERT VALUES (s.key, s.val) + WHEN MATCHED THEN + UPDATE set key = t.key + 1, val = t.val || ' updated by ' || s.val + WHEN NOT MATCHED BY SOURCE THEN + UPDATE set key = t.key + 1, val = t.val || ' source not matched by merge2a' + RETURNING merge_action(), t.*; + +merge_action|key|val +------------+---+------------------------- +UPDATE | 2|setup1 updated by merge2a +(1 row) + +step c1: COMMIT; +step s1beginrr: BEGIN ISOLATION LEVEL REPEATABLE READ; +step merge1: + MERGE INTO target t + USING (SELECT 1 as key, 'merge1' as val) s + ON s.key = t.key + WHEN NOT MATCHED THEN + INSERT VALUES (s.key, s.val) + WHEN MATCHED THEN + UPDATE set key = t.key + 1, val = t.val || ' updated by ' || s.val; + +step c2: COMMIT; +step merge1: <... completed> +ERROR: could not serialize access due to concurrent update diff -Nru postgresql-17-17.9/src/test/isolation/specs/insert-conflict-do-update-4.spec postgresql-17-17.10/src/test/isolation/specs/insert-conflict-do-update-4.spec --- postgresql-17-17.9/src/test/isolation/specs/insert-conflict-do-update-4.spec 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/isolation/specs/insert-conflict-do-update-4.spec 2026-05-11 19:46:41.000000000 +0000 @@ -23,7 +23,7 @@ setup { BEGIN ISOLATION LEVEL READ COMMITTED; } step insert1 { INSERT INTO upsert VALUES (1, 11, 111) ON CONFLICT (i) DO UPDATE SET k = EXCLUDED.k; } -step select1 { SELECT * FROM upsert; } +step select1 { SELECT * FROM upsert ORDER BY i; } step c1 { COMMIT; } session s2 diff -Nru postgresql-17-17.9/src/test/isolation/specs/merge-update.spec postgresql-17-17.10/src/test/isolation/specs/merge-update.spec --- postgresql-17-17.9/src/test/isolation/specs/merge-update.spec 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/isolation/specs/merge-update.spec 2026-05-11 19:46:41.000000000 +0000 @@ -93,6 +93,7 @@ } step "c1" { COMMIT; } step "a1" { ABORT; } +step "s1beginrr" { BEGIN ISOLATION LEVEL REPEATABLE READ; } session "s2" setup @@ -223,3 +224,4 @@ permutation "pa_merge3" "pa_merge2b_when" "c1" "pa_select2" "c2" # WHEN not satisfied by updated tuple permutation "pa_merge1" "pa_merge2b_when" "c1" "pa_select2" "c2" # WHEN satisfied by updated tuple permutation "pa_merge1" "pa_merge2c_dup" "c1" "a2" +permutation "merge2a" "c1" "s1beginrr" "merge1" "c2" diff -Nru postgresql-17-17.9/src/test/meson.build postgresql-17-17.10/src/test/meson.build --- postgresql-17-17.9/src/test/meson.build 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/meson.build 2026-05-11 19:46:41.000000000 +0000 @@ -4,6 +4,7 @@ subdir('isolation') subdir('authentication') +subdir('postmaster') subdir('recovery') subdir('subscription') subdir('modules') diff -Nru postgresql-17-17.9/src/test/modules/Makefile postgresql-17-17.10/src/test/modules/Makefile --- postgresql-17-17.9/src/test/modules/Makefile 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/Makefile 2026-05-11 19:46:41.000000000 +0000 @@ -17,6 +17,7 @@ test_cloexec \ test_copy_callbacks \ test_custom_rmgrs \ + test_custom_types \ test_ddl_deparse \ test_dsa \ test_dsm_registry \ diff -Nru postgresql-17-17.9/src/test/modules/meson.build postgresql-17-17.10/src/test/modules/meson.build --- postgresql-17-17.9/src/test/modules/meson.build 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/meson.build 2026-05-11 19:46:41.000000000 +0000 @@ -16,6 +16,7 @@ subdir('test_cloexec') subdir('test_copy_callbacks') subdir('test_custom_rmgrs') +subdir('test_custom_types') subdir('test_ddl_deparse') subdir('test_dsa') subdir('test_dsm_registry') diff -Nru postgresql-17-17.9/src/test/modules/test_custom_types/.gitignore postgresql-17-17.10/src/test/modules/test_custom_types/.gitignore --- postgresql-17-17.9/src/test/modules/test_custom_types/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/test_custom_types/.gitignore 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,4 @@ +# Generated subdirectories +/log/ +/results/ +/tmp_check/ diff -Nru postgresql-17-17.9/src/test/modules/test_custom_types/Makefile postgresql-17-17.10/src/test/modules/test_custom_types/Makefile --- postgresql-17-17.9/src/test/modules/test_custom_types/Makefile 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/test_custom_types/Makefile 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,20 @@ +# src/test/modules/test_custom_types/Makefile + +MODULES = test_custom_types + +EXTENSION = test_custom_types +DATA = test_custom_types--1.0.sql +PGFILEDESC = "test_custom_types - tests for dummy custom types" + +REGRESS = test_custom_types + +ifdef USE_PGXS +PG_CONFIG = pg_config +PGXS := $(shell $(PG_CONFIG) --pgxs) +include $(PGXS) +else +subdir = src/test/modules/test_custom_types +top_builddir = ../../../.. +include $(top_builddir)/src/Makefile.global +include $(top_srcdir)/contrib/contrib-global.mk +endif diff -Nru postgresql-17-17.9/src/test/modules/test_custom_types/README postgresql-17-17.10/src/test/modules/test_custom_types/README --- postgresql-17-17.9/src/test/modules/test_custom_types/README 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/test_custom_types/README 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,9 @@ +test_custom_types +================= + +This module contains a set of custom data types, with some of the following +patterns: + +- typanalyze function registered to a custom type, returning false. +- typanalyze function registered to a custom type, registering invalid stats + data. diff -Nru postgresql-17-17.9/src/test/modules/test_custom_types/expected/test_custom_types.out postgresql-17-17.10/src/test/modules/test_custom_types/expected/test_custom_types.out --- postgresql-17-17.9/src/test/modules/test_custom_types/expected/test_custom_types.out 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/test_custom_types/expected/test_custom_types.out 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,174 @@ +-- Tests with various custom types +CREATE EXTENSION test_custom_types; +-- Test comparison functions +SELECT '42'::int_custom = '42'::int_custom AS eq_test; + eq_test +--------- + t +(1 row) + +SELECT '42'::int_custom <> '42'::int_custom AS nt_test; + nt_test +--------- + f +(1 row) + +SELECT '42'::int_custom < '100'::int_custom AS lt_test; + lt_test +--------- + t +(1 row) + +SELECT '100'::int_custom > '42'::int_custom AS gt_test; + gt_test +--------- + t +(1 row) + +SELECT '42'::int_custom <= '100'::int_custom AS le_test; + le_test +--------- + t +(1 row) + +SELECT '100'::int_custom >= '42'::int_custom AS ge_test; + ge_test +--------- + t +(1 row) + +-- Create a table with the int_custom type +CREATE TABLE test_table ( + id int, + data int_custom +); +INSERT INTO test_table VALUES (1, '42'), (2, '100'), (3, '200'); +-- Verify data was inserted correctly +SELECT * FROM test_table ORDER BY id; + id | data +----+------ + 1 | 42 + 2 | 100 + 3 | 200 +(3 rows) + +-- Dummy function used for expression evaluations. +-- Note that this function does not use a SQL-standard function body on +-- purpose, so as external statistics can be loaded from it. +CREATE OR REPLACE FUNCTION func_int_custom (p_value int_custom) + RETURNS int_custom LANGUAGE plpgsql AS $$ + BEGIN + RETURN p_value; + END; $$; +-- Switch type to use typanalyze function that always returns false. +ALTER TYPE int_custom SET (ANALYZE = int_custom_typanalyze_false); +-- Extended statistics with an attribute that cannot be analyzed. +-- This includes all statistics kinds. +CREATE STATISTICS test_stats ON data, id FROM test_table; +-- Computation of the stats fails, no data generated. +ANALYZE test_table; +WARNING: statistics object "public.test_stats" could not be computed for relation "public.test_table" +SELECT stxname, stxdexpr IS NULL as expr_stats_is_null + FROM pg_statistic_ext s + LEFT JOIN pg_statistic_ext_data d ON s.oid = d.stxoid + WHERE stxname = 'test_stats'; + stxname | expr_stats_is_null +------------+-------------------- + test_stats | t +(1 row) + +DROP STATISTICS test_stats; +-- Extended statistics with an expression that cannot be analyzed. +CREATE STATISTICS test_stats ON func_int_custom(data), (id) FROM test_table; +-- Computation of the stats fails, no data generated. +ANALYZE test_table; +WARNING: statistics object "public.test_stats" could not be computed for relation "public.test_table" +SELECT stxname, stxdexpr IS NULL as expr_stats_is_null + FROM pg_statistic_ext s + LEFT JOIN pg_statistic_ext_data d ON s.oid = d.stxoid + WHERE stxname = 'test_stats'; + stxname | expr_stats_is_null +------------+-------------------- + test_stats | t +(1 row) + +DROP STATISTICS test_stats; +-- There should be no data stored for the expression. +SELECT tablename, + statistics_name, + null_frac, + avg_width + FROM pg_stats_ext_exprs WHERE statistics_name = 'test_stats' \gx +(0 rows) + +-- Switch type to use typanalyze function that generates invalid data. +ALTER TYPE int_custom SET (ANALYZE = int_custom_typanalyze_invalid); +-- Extended statistics with an attribute that generates invalid stats. +CREATE STATISTICS test_stats ON data, id FROM test_table; +-- Computation of the stats fails, no data generated. +ANALYZE test_table; +SELECT stxname, stxdexpr IS NULL as expr_stats_is_null + FROM pg_statistic_ext s + LEFT JOIN pg_statistic_ext_data d ON s.oid = d.stxoid + WHERE stxname = 'test_stats'; + stxname | expr_stats_is_null +------------+-------------------- + test_stats | t +(1 row) + +DROP STATISTICS test_stats; +-- Extended statistics with an expression that generates invalid data. +CREATE STATISTICS test_stats ON func_int_custom(data), (id) FROM test_table; +-- Computation of the stats fails, some data generated. +ANALYZE test_table; +SELECT stxname, stxdexpr IS NULL as expr_stats_is_null + FROM pg_statistic_ext s + LEFT JOIN pg_statistic_ext_data d ON s.oid = d.stxoid + WHERE stxname = 'test_stats'; + stxname | expr_stats_is_null +------------+-------------------- + test_stats | f +(1 row) + +-- There should be some data stored for the expression, stored as NULL. +SELECT tablename, + statistics_name, + null_frac, + avg_width, + n_distinct, + most_common_vals, + most_common_freqs, + histogram_bounds, + correlation, + most_common_elems, + most_common_elem_freqs, + elem_count_histogram + FROM pg_stats_ext_exprs WHERE statistics_name = 'test_stats' \gx +-[ RECORD 1 ]----------+----------- +tablename | test_table +statistics_name | test_stats +null_frac | +avg_width | +n_distinct | +most_common_vals | +most_common_freqs | +histogram_bounds | +correlation | +most_common_elems | +most_common_elem_freqs | +elem_count_histogram | + +-- Run a query able to load the extended stats, including the NULL data. +SELECT COUNT(*) FROM test_table GROUP BY (func_int_custom(data)); + count +------- + 1 + 1 + 1 +(3 rows) + +DROP STATISTICS test_stats; +-- Cleanup +DROP FUNCTION func_int_custom; +DROP TABLE test_table; +DROP EXTENSION test_custom_types; diff -Nru postgresql-17-17.9/src/test/modules/test_custom_types/meson.build postgresql-17-17.10/src/test/modules/test_custom_types/meson.build --- postgresql-17-17.9/src/test/modules/test_custom_types/meson.build 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/test_custom_types/meson.build 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,33 @@ +# Copyright (c) 2026, PostgreSQL Global Development Group + +test_custom_types_sources = files( + 'test_custom_types.c', +) + +if host_system == 'windows' + test_custom_types_sources += rc_lib_gen.process(win32ver_rc, extra_args: [ + '--NAME', 'test_custom_types', + '--FILEDESC', 'test_custom_types - tests for dummy custom types',]) +endif + +test_custom_types = shared_module('test_custom_types', + test_custom_types_sources, + kwargs: pg_test_mod_args, +) +test_install_libs += test_custom_types + +test_install_data += files( + 'test_custom_types.control', + 'test_custom_types--1.0.sql', +) + +tests += { + 'name': 'test_custom_types', + 'sd': meson.current_source_dir(), + 'bd': meson.current_build_dir(), + 'regress': { + 'sql': [ + 'test_custom_types', + ], + }, +} diff -Nru postgresql-17-17.9/src/test/modules/test_custom_types/sql/test_custom_types.sql postgresql-17-17.10/src/test/modules/test_custom_types/sql/test_custom_types.sql --- postgresql-17-17.9/src/test/modules/test_custom_types/sql/test_custom_types.sql 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/test_custom_types/sql/test_custom_types.sql 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,104 @@ +-- Tests with various custom types + +CREATE EXTENSION test_custom_types; + +-- Test comparison functions +SELECT '42'::int_custom = '42'::int_custom AS eq_test; +SELECT '42'::int_custom <> '42'::int_custom AS nt_test; +SELECT '42'::int_custom < '100'::int_custom AS lt_test; +SELECT '100'::int_custom > '42'::int_custom AS gt_test; +SELECT '42'::int_custom <= '100'::int_custom AS le_test; +SELECT '100'::int_custom >= '42'::int_custom AS ge_test; + +-- Create a table with the int_custom type +CREATE TABLE test_table ( + id int, + data int_custom +); +INSERT INTO test_table VALUES (1, '42'), (2, '100'), (3, '200'); + +-- Verify data was inserted correctly +SELECT * FROM test_table ORDER BY id; + +-- Dummy function used for expression evaluations. +-- Note that this function does not use a SQL-standard function body on +-- purpose, so as external statistics can be loaded from it. +CREATE OR REPLACE FUNCTION func_int_custom (p_value int_custom) + RETURNS int_custom LANGUAGE plpgsql AS $$ + BEGIN + RETURN p_value; + END; $$; + +-- Switch type to use typanalyze function that always returns false. +ALTER TYPE int_custom SET (ANALYZE = int_custom_typanalyze_false); + +-- Extended statistics with an attribute that cannot be analyzed. +-- This includes all statistics kinds. +CREATE STATISTICS test_stats ON data, id FROM test_table; +-- Computation of the stats fails, no data generated. +ANALYZE test_table; +SELECT stxname, stxdexpr IS NULL as expr_stats_is_null + FROM pg_statistic_ext s + LEFT JOIN pg_statistic_ext_data d ON s.oid = d.stxoid + WHERE stxname = 'test_stats'; +DROP STATISTICS test_stats; + +-- Extended statistics with an expression that cannot be analyzed. +CREATE STATISTICS test_stats ON func_int_custom(data), (id) FROM test_table; +-- Computation of the stats fails, no data generated. +ANALYZE test_table; +SELECT stxname, stxdexpr IS NULL as expr_stats_is_null + FROM pg_statistic_ext s + LEFT JOIN pg_statistic_ext_data d ON s.oid = d.stxoid + WHERE stxname = 'test_stats'; +DROP STATISTICS test_stats; +-- There should be no data stored for the expression. +SELECT tablename, + statistics_name, + null_frac, + avg_width + FROM pg_stats_ext_exprs WHERE statistics_name = 'test_stats' \gx + +-- Switch type to use typanalyze function that generates invalid data. +ALTER TYPE int_custom SET (ANALYZE = int_custom_typanalyze_invalid); + +-- Extended statistics with an attribute that generates invalid stats. +CREATE STATISTICS test_stats ON data, id FROM test_table; +-- Computation of the stats fails, no data generated. +ANALYZE test_table; +SELECT stxname, stxdexpr IS NULL as expr_stats_is_null + FROM pg_statistic_ext s + LEFT JOIN pg_statistic_ext_data d ON s.oid = d.stxoid + WHERE stxname = 'test_stats'; +DROP STATISTICS test_stats; + +-- Extended statistics with an expression that generates invalid data. +CREATE STATISTICS test_stats ON func_int_custom(data), (id) FROM test_table; +-- Computation of the stats fails, some data generated. +ANALYZE test_table; +SELECT stxname, stxdexpr IS NULL as expr_stats_is_null + FROM pg_statistic_ext s + LEFT JOIN pg_statistic_ext_data d ON s.oid = d.stxoid + WHERE stxname = 'test_stats'; +-- There should be some data stored for the expression, stored as NULL. +SELECT tablename, + statistics_name, + null_frac, + avg_width, + n_distinct, + most_common_vals, + most_common_freqs, + histogram_bounds, + correlation, + most_common_elems, + most_common_elem_freqs, + elem_count_histogram + FROM pg_stats_ext_exprs WHERE statistics_name = 'test_stats' \gx +-- Run a query able to load the extended stats, including the NULL data. +SELECT COUNT(*) FROM test_table GROUP BY (func_int_custom(data)); +DROP STATISTICS test_stats; + +-- Cleanup +DROP FUNCTION func_int_custom; +DROP TABLE test_table; +DROP EXTENSION test_custom_types; diff -Nru postgresql-17-17.9/src/test/modules/test_custom_types/test_custom_types--1.0.sql postgresql-17-17.10/src/test/modules/test_custom_types/test_custom_types--1.0.sql --- postgresql-17-17.9/src/test/modules/test_custom_types/test_custom_types--1.0.sql 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/test_custom_types/test_custom_types--1.0.sql 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,164 @@ +/* src/test/modules/test_custom_types/test_custom_types--1.0.sql */ + +-- complain if script is sourced in psql, rather than via CREATE EXTENSION +\echo Use "CREATE EXTENSION test_custom_types" to load this file. \quit + +-- +-- Input/output functions for int_custom type +-- +CREATE FUNCTION int_custom_in(cstring) +RETURNS int_custom +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION int_custom_out(int_custom) +RETURNS cstring +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +-- +-- Typanalyze function that returns false +-- +CREATE FUNCTION int_custom_typanalyze_false(internal) +RETURNS boolean +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT; + +-- +-- Typanalyze function that returns invalid stats +-- +CREATE FUNCTION int_custom_typanalyze_invalid(internal) +RETURNS boolean +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT; + +-- +-- The int_custom type definition +-- +-- This type is identical to int4 in storage, and is used in subsequent +-- tests to have different properties. +-- +CREATE TYPE int_custom ( + INPUT = int_custom_in, + OUTPUT = int_custom_out, + LIKE = int4 +); + +-- +-- Comparison functions for int_custom +-- +-- These are required to create a btree operator class, which is needed +-- for the type to be usable in extended statistics objects. +-- +CREATE FUNCTION int_custom_eq(int_custom, int_custom) +RETURNS boolean +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION int_custom_ne(int_custom, int_custom) +RETURNS boolean +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION int_custom_lt(int_custom, int_custom) +RETURNS boolean +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION int_custom_le(int_custom, int_custom) +RETURNS boolean +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION int_custom_gt(int_custom, int_custom) +RETURNS boolean +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION int_custom_ge(int_custom, int_custom) +RETURNS boolean +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION int_custom_cmp(int_custom, int_custom) +RETURNS integer +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +-- Operators for int_custom, for btree operator class +CREATE OPERATOR = ( + LEFTARG = int_custom, + RIGHTARG = int_custom, + FUNCTION = int_custom_eq, + COMMUTATOR = =, + NEGATOR = <>, + RESTRICT = eqsel, + JOIN = eqjoinsel, + HASHES, + MERGES +); + +CREATE OPERATOR <> ( + LEFTARG = int_custom, + RIGHTARG = int_custom, + FUNCTION = int_custom_ne, + COMMUTATOR = <>, + NEGATOR = =, + RESTRICT = neqsel, + JOIN = neqjoinsel +); + +CREATE OPERATOR < ( + LEFTARG = int_custom, + RIGHTARG = int_custom, + FUNCTION = int_custom_lt, + COMMUTATOR = >, + NEGATOR = >=, + RESTRICT = scalarltsel, + JOIN = scalarltjoinsel +); + +CREATE OPERATOR <= ( + LEFTARG = int_custom, + RIGHTARG = int_custom, + FUNCTION = int_custom_le, + COMMUTATOR = >=, + NEGATOR = >, + RESTRICT = scalarlesel, + JOIN = scalarlejoinsel +); + +CREATE OPERATOR > ( + LEFTARG = int_custom, + RIGHTARG = int_custom, + FUNCTION = int_custom_gt, + COMMUTATOR = <, + NEGATOR = <=, + RESTRICT = scalargtsel, + JOIN = scalargtjoinsel +); + +CREATE OPERATOR >= ( + LEFTARG = int_custom, + RIGHTARG = int_custom, + FUNCTION = int_custom_ge, + COMMUTATOR = <=, + NEGATOR = <, + RESTRICT = scalargesel, + JOIN = scalargejoinsel +); + +-- +-- Btree operator class for int_custom +-- +-- This is required for the type to be usable in extended statistics objects, +-- for attributes and expressions. +-- +CREATE OPERATOR CLASS int_custom_ops + DEFAULT FOR TYPE int_custom USING btree AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 int_custom_cmp(int_custom, int_custom); diff -Nru postgresql-17-17.9/src/test/modules/test_custom_types/test_custom_types.c postgresql-17-17.10/src/test/modules/test_custom_types/test_custom_types.c --- postgresql-17-17.9/src/test/modules/test_custom_types/test_custom_types.c 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/test_custom_types/test_custom_types.c 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,182 @@ +/*-------------------------------------------------------------------------- + * + * test_custom_types.c + * Test module for a set of functions for custom types. + * + * The custom type used in this module is similar to int4 for simplicity, + * except that it is able to use various typanalyze functions to enforce + * check patterns with ANALYZE. + * + * Copyright (c) 1996-2026, PostgreSQL Global Development Group + * + * IDENTIFICATION + * src/test/modules/test_custom_types/test_custom_types.c + * + *-------------------------------------------------------------------------- + */ + +#include "postgres.h" + +#include "fmgr.h" +#include "commands/vacuum.h" +#include "utils/builtins.h" + +PG_MODULE_MAGIC; + +/* Function declarations */ +PG_FUNCTION_INFO_V1(int_custom_in); +PG_FUNCTION_INFO_V1(int_custom_out); +PG_FUNCTION_INFO_V1(int_custom_typanalyze_false); +PG_FUNCTION_INFO_V1(int_custom_typanalyze_invalid); +PG_FUNCTION_INFO_V1(int_custom_eq); +PG_FUNCTION_INFO_V1(int_custom_ne); +PG_FUNCTION_INFO_V1(int_custom_lt); +PG_FUNCTION_INFO_V1(int_custom_le); +PG_FUNCTION_INFO_V1(int_custom_gt); +PG_FUNCTION_INFO_V1(int_custom_ge); +PG_FUNCTION_INFO_V1(int_custom_cmp); + +/* + * int_custom_in - input function for int_custom type + * + * Converts a string to a int_custom (which is just an int32 internally). + */ +Datum +int_custom_in(PG_FUNCTION_ARGS) +{ + char *num = PG_GETARG_CSTRING(0); + + PG_RETURN_INT32(pg_strtoint32_safe(num, fcinfo->context)); +} + +/* + * int_custom_out - output function for int_custom type + * + * Converts a int_custom to a string. + */ +Datum +int_custom_out(PG_FUNCTION_ARGS) +{ + int32 arg1 = PG_GETARG_INT32(0); + char *result = (char *) palloc(12); /* sign, 10 digits, '\0' */ + + pg_ltoa(arg1, result); + PG_RETURN_CSTRING(result); +} + +/* + * int_custom_typanalyze_false - typanalyze function that returns false + * + * This function returns false, to simulate a type that cannot be analyzed. + */ +Datum +int_custom_typanalyze_false(PG_FUNCTION_ARGS) +{ + PG_RETURN_BOOL(false); +} + +/* + * Callback used to compute invalid statistics. + */ +static void +int_custom_invalid_stats(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc, + int samplerows, double totalrows) +{ + /* We are not valid, and do not want to be. */ + stats->stats_valid = false; +} + +/* + * int_custom_typanalyze_invalid + * + * This function sets some invalid stats data, letting the caller know that + * we are safe for an analyze, returning true. + */ +Datum +int_custom_typanalyze_invalid(PG_FUNCTION_ARGS) +{ + VacAttrStats *stats = (VacAttrStats *) PG_GETARG_POINTER(0); + + /* If the attstattarget column is negative, use the default value */ + if (stats->attstattarget < 0) + stats->attstattarget = default_statistics_target; + + /* Buggy number, no need to care as long as it is positive */ + stats->minrows = 300; + + /* Set callback to compute some invalid stats */ + stats->compute_stats = int_custom_invalid_stats; + + PG_RETURN_BOOL(true); +} + +/* + * Comparison functions for int_custom type + */ +Datum +int_custom_eq(PG_FUNCTION_ARGS) +{ + int32 arg1 = PG_GETARG_INT32(0); + int32 arg2 = PG_GETARG_INT32(1); + + PG_RETURN_BOOL(arg1 == arg2); +} + +Datum +int_custom_ne(PG_FUNCTION_ARGS) +{ + int32 arg1 = PG_GETARG_INT32(0); + int32 arg2 = PG_GETARG_INT32(1); + + PG_RETURN_BOOL(arg1 != arg2); +} + +Datum +int_custom_lt(PG_FUNCTION_ARGS) +{ + int32 arg1 = PG_GETARG_INT32(0); + int32 arg2 = PG_GETARG_INT32(1); + + PG_RETURN_BOOL(arg1 < arg2); +} + +Datum +int_custom_le(PG_FUNCTION_ARGS) +{ + int32 arg1 = PG_GETARG_INT32(0); + int32 arg2 = PG_GETARG_INT32(1); + + PG_RETURN_BOOL(arg1 <= arg2); +} + +Datum +int_custom_gt(PG_FUNCTION_ARGS) +{ + int32 arg1 = PG_GETARG_INT32(0); + int32 arg2 = PG_GETARG_INT32(1); + + PG_RETURN_BOOL(arg1 > arg2); +} + +Datum +int_custom_ge(PG_FUNCTION_ARGS) +{ + int32 arg1 = PG_GETARG_INT32(0); + int32 arg2 = PG_GETARG_INT32(1); + + PG_RETURN_BOOL(arg1 >= arg2); +} + +Datum +int_custom_cmp(PG_FUNCTION_ARGS) +{ + int32 arg1 = PG_GETARG_INT32(0); + int32 arg2 = PG_GETARG_INT32(1); + + if (arg1 < arg2) + PG_RETURN_INT32(-1); + else if (arg1 > arg2) + PG_RETURN_INT32(1); + else + PG_RETURN_INT32(0); +} diff -Nru postgresql-17-17.9/src/test/modules/test_custom_types/test_custom_types.control postgresql-17-17.10/src/test/modules/test_custom_types/test_custom_types.control --- postgresql-17-17.9/src/test/modules/test_custom_types/test_custom_types.control 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/test_custom_types/test_custom_types.control 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,5 @@ +# test_custom_types extension +comment = 'Tests for dummy custom types' +default_version = '1.0' +module_pathname = '$libdir/test_custom_types' +relocatable = true diff -Nru postgresql-17-17.9/src/test/modules/test_ddl_deparse/Makefile postgresql-17-17.10/src/test/modules/test_ddl_deparse/Makefile --- postgresql-17-17.9/src/test/modules/test_ddl_deparse/Makefile 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/test_ddl_deparse/Makefile 2026-05-11 19:46:41.000000000 +0000 @@ -27,6 +27,7 @@ alter_type_enum \ opfamily \ defprivs \ + textsearch \ matviews EXTRA_INSTALL = contrib/pg_stat_statements diff -Nru postgresql-17-17.9/src/test/modules/test_ddl_deparse/expected/textsearch.out postgresql-17-17.10/src/test/modules/test_ddl_deparse/expected/textsearch.out --- postgresql-17-17.9/src/test/modules/test_ddl_deparse/expected/textsearch.out 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/test_ddl_deparse/expected/textsearch.out 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,5 @@ +CREATE TEXT SEARCH CONFIGURATION evttrig_tscfg (COPY = pg_catalog.simple); +NOTICE: DDL test: type simple, tag CREATE TEXT SEARCH CONFIGURATION +ALTER TEXT SEARCH CONFIGURATION evttrig_tscfg + DROP MAPPING FOR word; +NOTICE: DDL test: type alter text search configuration, tag ALTER TEXT SEARCH CONFIGURATION diff -Nru postgresql-17-17.9/src/test/modules/test_ddl_deparse/meson.build postgresql-17-17.10/src/test/modules/test_ddl_deparse/meson.build --- postgresql-17-17.9/src/test/modules/test_ddl_deparse/meson.build 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/test_ddl_deparse/meson.build 2026-05-11 19:46:41.000000000 +0000 @@ -47,6 +47,7 @@ 'alter_type_enum', 'opfamily', 'defprivs', + 'textsearch', 'matviews', ], }, diff -Nru postgresql-17-17.9/src/test/modules/test_ddl_deparse/sql/textsearch.sql postgresql-17-17.10/src/test/modules/test_ddl_deparse/sql/textsearch.sql --- postgresql-17-17.9/src/test/modules/test_ddl_deparse/sql/textsearch.sql 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/test_ddl_deparse/sql/textsearch.sql 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,3 @@ +CREATE TEXT SEARCH CONFIGURATION evttrig_tscfg (COPY = pg_catalog.simple); +ALTER TEXT SEARCH CONFIGURATION evttrig_tscfg + DROP MAPPING FOR word; diff -Nru postgresql-17-17.9/src/test/modules/test_dsa/expected/test_dsa.out postgresql-17-17.10/src/test/modules/test_dsa/expected/test_dsa.out --- postgresql-17-17.9/src/test/modules/test_dsa/expected/test_dsa.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/test_dsa/expected/test_dsa.out 2026-05-11 19:46:41.000000000 +0000 @@ -11,3 +11,19 @@ (1 row) +-- Test allocations across a pre-defined range of pages. This covers enough +-- range to check for the case of odd-sized segments, without making the test +-- too slow. +SELECT test_dsa_allocate(1001, 2000, 100); + test_dsa_allocate +------------------- + +(1 row) + +-- Larger size with odd-sized segment. +SELECT test_dsa_allocate(6501, 6600, 100); + test_dsa_allocate +------------------- + +(1 row) + diff -Nru postgresql-17-17.9/src/test/modules/test_dsa/sql/test_dsa.sql postgresql-17-17.10/src/test/modules/test_dsa/sql/test_dsa.sql --- postgresql-17-17.9/src/test/modules/test_dsa/sql/test_dsa.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/test_dsa/sql/test_dsa.sql 2026-05-11 19:46:41.000000000 +0000 @@ -2,3 +2,10 @@ SELECT test_dsa_basic(); SELECT test_dsa_resowners(); + +-- Test allocations across a pre-defined range of pages. This covers enough +-- range to check for the case of odd-sized segments, without making the test +-- too slow. +SELECT test_dsa_allocate(1001, 2000, 100); +-- Larger size with odd-sized segment. +SELECT test_dsa_allocate(6501, 6600, 100); diff -Nru postgresql-17-17.9/src/test/modules/test_dsa/test_dsa--1.0.sql postgresql-17-17.10/src/test/modules/test_dsa/test_dsa--1.0.sql --- postgresql-17-17.9/src/test/modules/test_dsa/test_dsa--1.0.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/test_dsa/test_dsa--1.0.sql 2026-05-11 19:46:41.000000000 +0000 @@ -10,3 +10,7 @@ CREATE FUNCTION test_dsa_resowners() RETURNS pg_catalog.void AS 'MODULE_PATHNAME' LANGUAGE C; + +CREATE FUNCTION test_dsa_allocate(int, int, int) + RETURNS pg_catalog.void + AS 'MODULE_PATHNAME' LANGUAGE C; diff -Nru postgresql-17-17.9/src/test/modules/test_dsa/test_dsa.c postgresql-17-17.10/src/test/modules/test_dsa/test_dsa.c --- postgresql-17-17.9/src/test/modules/test_dsa/test_dsa.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/test_dsa/test_dsa.c 2026-05-11 19:46:41.000000000 +0000 @@ -13,8 +13,10 @@ #include "postgres.h" #include "fmgr.h" +#include "storage/dsm_registry.h" #include "storage/lwlock.h" #include "utils/dsa.h" +#include "utils/freepage.h" #include "utils/resowner.h" PG_MODULE_MAGIC; @@ -111,3 +113,42 @@ PG_RETURN_VOID(); } + +/* + * test_dsa_allocate + * + * Test DSA allocation across a range of sizes to exercise the pagemap + * sizing logic in make_new_segment(). A fresh DSA is created for each + * iteration so that each allocation triggers a new segment creation, + * including the odd-sized segment path. + */ +PG_FUNCTION_INFO_V1(test_dsa_allocate); +Datum +test_dsa_allocate(PG_FUNCTION_ARGS) +{ + int start_num_pages = PG_GETARG_INT32(0); + int end_num_pages = PG_GETARG_INT32(1); + int step = PG_GETARG_INT32(2); + size_t usable_pages; + int tranche_id; + dsa_area *a; + dsa_pointer dp; + + if (start_num_pages > end_num_pages) + elog(ERROR, "incorrect start and end parameters"); + + /* XXX: this tranche is leaked */ + tranche_id = LWLockNewTrancheId(); + LWLockRegisterTranche(tranche_id, "test_dsa"); + + for (usable_pages = start_num_pages; usable_pages < end_num_pages; usable_pages += step) + { + a = dsa_create(tranche_id); + dp = dsa_allocate(a, usable_pages * FPM_PAGE_SIZE); + + dsa_free(a, dp); + dsa_detach(a); + } + + PG_RETURN_VOID(); +} diff -Nru postgresql-17-17.9/src/test/modules/test_ginpostinglist/test_ginpostinglist.c postgresql-17-17.10/src/test/modules/test_ginpostinglist/test_ginpostinglist.c --- postgresql-17-17.9/src/test/modules/test_ginpostinglist/test_ginpostinglist.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/test_ginpostinglist/test_ginpostinglist.c 2026-05-11 19:46:41.000000000 +0000 @@ -72,12 +72,12 @@ ItemPointerGetOffsetNumber(&decoded_itemptrs[0])); if (ndecoded == 2 && - !ItemPointerEquals(&orig_itemptrs[0], &decoded_itemptrs[0])) + !ItemPointerEquals(&orig_itemptrs[1], &decoded_itemptrs[1])) { elog(ERROR, "mismatch on second itemptr: (%u, %d) vs (%u, %d)", - 0, 1, - ItemPointerGetBlockNumber(&decoded_itemptrs[0]), - ItemPointerGetOffsetNumber(&decoded_itemptrs[0])); + blk, off, + ItemPointerGetBlockNumber(&decoded_itemptrs[1]), + ItemPointerGetOffsetNumber(&decoded_itemptrs[1])); } } diff -Nru postgresql-17-17.9/src/test/modules/test_tidstore/test_tidstore.c postgresql-17-17.10/src/test/modules/test_tidstore/test_tidstore.c --- postgresql-17-17.9/src/test/modules/test_tidstore/test_tidstore.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/modules/test_tidstore/test_tidstore.c 2026-05-11 19:46:41.000000000 +0000 @@ -76,6 +76,19 @@ return 0; } +static int +offsetnumber_cmp(const void *a, const void *b) +{ + OffsetNumber l = *(const OffsetNumber *) a; + OffsetNumber r = *(const OffsetNumber *) b; + + if (l < r) + return -1; + else if (l > r) + return 1; + return 0; +} + /* * Create a TidStore. If shared is false, the tidstore is created * on TopMemoryContext, otherwise on DSA. Although the tidstore @@ -180,6 +193,9 @@ noffs = ArrayGetNItems(ARR_NDIM(ta), ARR_DIMS(ta)); offs = ((OffsetNumber *) ARR_DATA_PTR(ta)); + /* TidStoreSetBlockOffsets() requires offsets to be strictly ascending. */ + qsort(offs, noffs, sizeof(OffsetNumber), offsetnumber_cmp); + /* Set TIDs in the store */ TidStoreLockExclusive(tidstore); TidStoreSetBlockOffsets(tidstore, blkno, offs, noffs); diff -Nru postgresql-17-17.9/src/test/perl/PostgreSQL/Test/Cluster.pm postgresql-17-17.10/src/test/perl/PostgreSQL/Test/Cluster.pm --- postgresql-17-17.9/src/test/perl/PostgreSQL/Test/Cluster.pm 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/perl/PostgreSQL/Test/Cluster.pm 2026-05-11 19:46:41.000000000 +0000 @@ -284,6 +284,82 @@ =pod +=item $node->raw_connect() + +Open a raw TCP or Unix domain socket connection to the server. This is +used by low-level protocol and connection limit tests. + +=cut + +sub raw_connect +{ + my ($self) = @_; + my $pgport = $self->port; + my $pghost = $self->host; + + my $socket; + if ($PostgreSQL::Test::Utils::use_unix_sockets) + { + require IO::Socket::UNIX; + my $path = "$pghost/.s.PGSQL.$pgport"; + + $socket = IO::Socket::UNIX->new( + Type => SOCK_STREAM(), + Peer => $path, + ) or die "Cannot create socket - $IO::Socket::errstr\n"; + } + else + { + $socket = IO::Socket::INET->new( + PeerHost => $pghost, + PeerPort => $pgport, + Proto => 'tcp' + ) or die "Cannot create socket - $IO::Socket::errstr\n"; + } + return $socket; +} + +=pod + +=item $node->raw_connect_works() + +Check if raw_connect() function works on this platform. This should +be called to SKIP any tests that require raw_connect(). + +This tries to connect to the server, to test whether it works or not,, +so the server is up and running. Otherwise this can return 0 even if +there's nothing wrong with raw_connect() itself. + +Notably, raw_connect() does not work on Unix domain sockets on +Strawberry perl 5.26.3.1 on Windows, which we use in Cirrus CI images +as of this writing. It dies with "not implemented on this +architecture". + +=cut + +sub raw_connect_works +{ + my ($self) = @_; + + # If we're using Unix domain sockets, we need a working + # IO::Socket::UNIX implementation. + if ($PostgreSQL::Test::Utils::use_unix_sockets) + { + eval { + my $sock = $self->raw_connect(); + $sock->close(); + }; + if ($@ =~ /not implemented/) + { + diag "IO::Socket::UNIX does not work: $@"; + return 0; + } + } + return 1; +} + +=pod + =item $node->group_access() Does the data dir allow group access? diff -Nru postgresql-17-17.9/src/test/postmaster/.gitignore postgresql-17-17.10/src/test/postmaster/.gitignore --- postgresql-17-17.9/src/test/postmaster/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/test/postmaster/.gitignore 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,2 @@ +# Generated by test suite +/tmp_check/ diff -Nru postgresql-17-17.9/src/test/postmaster/Makefile postgresql-17-17.10/src/test/postmaster/Makefile --- postgresql-17-17.9/src/test/postmaster/Makefile 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/test/postmaster/Makefile 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,23 @@ +#------------------------------------------------------------------------- +# +# Makefile for src/test/postmaster +# +# Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group +# Portions Copyright (c) 1994, Regents of the University of California +# +# src/test/postmaster/Makefile +# +#------------------------------------------------------------------------- + +subdir = src/test/postmaster +top_builddir = ../../.. +include $(top_builddir)/src/Makefile.global + +check: + $(prove_check) + +installcheck: + $(prove_installcheck) + +clean distclean: + rm -rf tmp_check diff -Nru postgresql-17-17.9/src/test/postmaster/README postgresql-17-17.10/src/test/postmaster/README --- postgresql-17-17.9/src/test/postmaster/README 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/test/postmaster/README 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,27 @@ +src/test/postmaster/README + +Regression tests for postmaster +=============================== + +This directory contains a test suite for postmaster's handling of +connections, connection limits, and startup/shutdown sequence. + + +Running the tests +================= + +NOTE: You must have given the --enable-tap-tests argument to configure. + +Run + make check +or + make installcheck +You can use "make installcheck" if you previously did "make install". +In that case, the code in the installation tree is tested. With +"make check", a temporary installation tree is built from the current +sources and then tested. + +Either way, this test initializes, starts, and stops a test Postgres +cluster. + +See src/test/perl/README for more info about running these tests. diff -Nru postgresql-17-17.9/src/test/postmaster/meson.build postgresql-17-17.10/src/test/postmaster/meson.build --- postgresql-17-17.9/src/test/postmaster/meson.build 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/test/postmaster/meson.build 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,12 @@ +# Copyright (c) 2022-2025, PostgreSQL Global Development Group + +tests += { + 'name': 'postmaster', + 'sd': meson.current_source_dir(), + 'bd': meson.current_build_dir(), + 'tap': { + 'tests': [ + 't/004_negotiate.pl', + ], + }, +} diff -Nru postgresql-17-17.9/src/test/postmaster/t/004_negotiate.pl postgresql-17-17.10/src/test/postmaster/t/004_negotiate.pl --- postgresql-17-17.9/src/test/postmaster/t/004_negotiate.pl 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/test/postmaster/t/004_negotiate.pl 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,82 @@ +# Copyright (c) 2026, PostgreSQL Global Development Group + +# Test the negotiation of combined SSL and GSS requests. This test +# relies on both SSL and GSS requests to be rejected first, followed +# by more requests. + +use strict; +use warnings FATAL => 'all'; +use PostgreSQL::Test::Cluster; +use PostgreSQL::Test::Utils; +use Test::More; +use Time::HiRes qw(usleep); + +my $node = PostgreSQL::Test::Cluster->new('main'); +$node->init; +$node->append_conf('postgresql.conf', "log_min_messages = debug2"); +$node->append_conf('postgresql.conf', + "log_connections = 'on'"); +$node->append_conf('postgresql.conf', 'trace_connection_negotiation=on'); +$node->start; + +if (!$node->raw_connect_works()) +{ + plan skip_all => "this test requires working raw_connect()"; +} + +my $sock = $node->raw_connect(); + +# SSLRequest: packet length followed by NEGOTIATE_SSL_CODE. +my $ssl_request = pack("Nnn", 8, 1234, 5679); + +# GSSENCRequest: packet length followed by NEGOTIATE_GSS_CODE. +my $gss_request = pack("Nnn", 8, 1234, 5680); + +# Send SSLRequest, reject or bypass. +$sock->send($ssl_request); +my $reply = ""; +$sock->recv($reply, 1); +if ($reply ne 'N') +{ + $sock->close(); + plan skip_all => + "server accepted SSL; test requires SSL to be rejected"; +} + +# Send GSSENCRequest, reject or bypass test. +$sock->send($gss_request); +$reply = ""; +$sock->recv($reply, 1); +if ($reply ne 'N') +{ + $sock->close(); + plan skip_all => + "server accepted GSS; test requires GSS to be rejected"; +} + +my $log_offset = -s $node->logfile; + +# Send a second SSLRequest, now that we know that both SSL and GSS have +# been rejected for this connection. We are done with both requests, so +# extra requests will be rejected and fail with an invalid protocol +# version, and the connection should be closed by the server. +$sock->send($ssl_request); + +# Try to read a response, there should be nothing, and certainly not an +# extra 'N' message indicating a rejection. +$reply = ""; +my $bytes = $sock->recv($reply, 1024); +isnt($reply, 'N', + "server does not re-enter SSL negotiation after SSL+GSS were both tried"); + +$sock->close(); +$node->wait_for_log(qr/FATAL: .* unsupported frontend protocol 1234.5679/, + $log_offset); + +# Check extra connection with a simple query. +my $result = $node->safe_psql('postgres', 'select 1;'); +is($result, '1', 'server able to accept connection'); + +$node->stop; + +done_testing(); diff -Nru postgresql-17-17.9/src/test/recovery/t/004_timeline_switch.pl postgresql-17-17.10/src/test/recovery/t/004_timeline_switch.pl --- postgresql-17-17.9/src/test/recovery/t/004_timeline_switch.pl 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/recovery/t/004_timeline_switch.pl 2026-05-11 19:46:41.000000000 +0000 @@ -34,11 +34,10 @@ $node_primary->safe_psql('postgres', "CREATE TABLE tab_int AS SELECT generate_series(1,1000) AS a"); -# Wait until standby has replayed enough data on standby 1 -$node_primary->wait_for_catchup($node_standby_1); - -# Stop and remove primary -$node_primary->teardown_node; +# Cleanly stop and remove primary. A clean stop is required so as all +# the records generated on the primary are received and flushed by the two +# standbys. +$node_primary->stop; # promote standby 1 using "pg_promote", switching it to a new timeline my $psql_out = ''; diff -Nru postgresql-17-17.9/src/test/recovery/t/009_twophase.pl postgresql-17-17.10/src/test/recovery/t/009_twophase.pl --- postgresql-17-17.9/src/test/recovery/t/009_twophase.pl 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/recovery/t/009_twophase.pl 2026-05-11 19:46:41.000000000 +0000 @@ -222,7 +222,7 @@ SAVEPOINT s1; INSERT INTO t_009_tbl VALUES (22, 'issued to ${cur_primary_name}'); PREPARE TRANSACTION 'xact_009_10';"); -$cur_primary->teardown_node; +$cur_primary->stop; $cur_standby->promote; # change roles diff -Nru postgresql-17-17.9/src/test/regress/expected/alter_table.out postgresql-17-17.10/src/test/regress/expected/alter_table.out --- postgresql-17-17.9/src/test/regress/expected/alter_table.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/expected/alter_table.out 2026-05-11 19:46:41.000000000 +0000 @@ -3760,6 +3760,16 @@ ALTER TABLE test_add_column ADD COLUMN IF NOT EXISTS c5 SERIAL CHECK (c5 > 10); NOTICE: column "c5" of relation "test_add_column" already exists, skipping +ALTER TABLE test_add_column + ADD c6 integer; -- omit COLUMN +ALTER TABLE test_add_column + ADD IF NOT EXISTS c6 integer; +NOTICE: column "c6" of relation "test_add_column" already exists, skipping +ALTER TABLE test_add_column + DROP c6; -- omit COLUMN +ALTER TABLE test_add_column + DROP IF EXISTS c6; +NOTICE: column "c6" of relation "test_add_column" does not exist, skipping \d test_add_column* Table "public.test_add_column" Column | Type | Collation | Nullable | Default diff -Nru postgresql-17-17.9/src/test/regress/expected/collate.icu.utf8.out postgresql-17-17.10/src/test/regress/expected/collate.icu.utf8.out --- postgresql-17-17.9/src/test/regress/expected/collate.icu.utf8.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/expected/collate.icu.utf8.out 2026-05-11 19:46:41.000000000 +0000 @@ -1489,6 +1489,310 @@ {A,B,C,D,E,F,G,H,I} (1 row) +-- +-- A unique index under one collation does not prove uniqueness under +-- another, so the planner must not use such a proof for any optimization. +-- +-- Ensure that we do not use inner-unique join execution +EXPLAIN (VERBOSE, COSTS OFF) +SELECT * FROM test1cs t1, test3cs t2 +WHERE t1.x = t2.x COLLATE case_insensitive +ORDER BY 1, 2; + QUERY PLAN +---------------------------------------------------------------------- + Sort + Output: t1.x, t2.x + Sort Key: t1.x COLLATE case_sensitive, t2.x COLLATE case_sensitive + -> Hash Join + Output: t1.x, t2.x + Hash Cond: ((t2.x)::text = (t1.x)::text) + -> Seq Scan on collate_tests.test3cs t2 + Output: t2.x + -> Hash + Output: t1.x + -> Seq Scan on collate_tests.test1cs t1 + Output: t1.x +(12 rows) + +SELECT * FROM test1cs t1, test3cs t2 +WHERE t1.x = t2.x COLLATE case_insensitive +ORDER BY 1, 2; + x | x +-----+----- + abc | abc + abc | ABC + ABC | abc + ABC | ABC + def | def + ghi | ghi +(6 rows) + +-- Ensure that left-join is not removed +EXPLAIN (COSTS OFF) +SELECT t1.* FROM test3cs t1 + LEFT JOIN test3cs t2 ON t1.x = t2.x COLLATE case_insensitive +ORDER BY 1; + QUERY PLAN +------------------------------------------ + Sort + Sort Key: t1.x COLLATE case_sensitive + -> Hash Left Join + Hash Cond: (t1.x = (t2.x)::text) + -> Seq Scan on test3cs t1 + -> Hash + -> Seq Scan on test3cs t2 +(7 rows) + +SELECT t1.* FROM test3cs t1 + LEFT JOIN test3cs t2 ON t1.x = t2.x COLLATE case_insensitive +ORDER BY 1; + x +----- + abc + abc + ABC + ABC + def + ghi +(6 rows) + +-- Ensure that self-join is not removed +EXPLAIN (COSTS OFF) +SELECT * FROM test3cs t1, test3cs t2 +WHERE t1.x = t2.x COLLATE case_insensitive +ORDER BY 1, 2; + QUERY PLAN +---------------------------------------------------------------------- + Sort + Sort Key: t1.x COLLATE case_sensitive, t2.x COLLATE case_sensitive + -> Hash Join + Hash Cond: ((t1.x)::text = (t2.x)::text) + -> Seq Scan on test3cs t1 + -> Hash + -> Seq Scan on test3cs t2 +(7 rows) + +SELECT * FROM test3cs t1, test3cs t2 +WHERE t1.x = t2.x COLLATE case_insensitive +ORDER BY 1, 2; + x | x +-----+----- + abc | abc + abc | ABC + ABC | abc + ABC | ABC + def | def + ghi | ghi +(6 rows) + +-- Ensure that semijoin is not reduced to innerjoin +EXPLAIN (COSTS OFF) +SELECT * FROM test3cs t1 + WHERE EXISTS (SELECT 1 FROM test3cs t2 WHERE t1.x = t2.x COLLATE case_insensitive) +ORDER BY 1; + QUERY PLAN +-------------------------------------------------- + Sort + Sort Key: t1.x COLLATE case_sensitive + -> Hash Semi Join + Hash Cond: ((t1.x)::text = (t2.x)::text) + -> Seq Scan on test3cs t1 + -> Hash + -> Seq Scan on test3cs t2 +(7 rows) + +SELECT * FROM test3cs t1 + WHERE EXISTS (SELECT 1 FROM test3cs t2 WHERE t1.x = t2.x COLLATE case_insensitive) +ORDER BY 1; + x +----- + abc + ABC + def + ghi +(4 rows) + +-- +-- A DISTINCT / GROUP BY / set-op on a subquery does not prove uniqueness +-- under a different collation, so the planner must not use such a proof for +-- any optimization. +-- +-- Ensure that we do not use inner-unique join execution +EXPLAIN (VERBOSE, COSTS OFF) +SELECT * FROM test1cs t1, (SELECT DISTINCT x FROM test3cs) t2 +WHERE t1.x = t2.x COLLATE case_insensitive +ORDER BY 1, 2; + QUERY PLAN +--------------------------------------------------------------------------- + Sort + Output: t1.x, test3cs.x + Sort Key: t1.x COLLATE case_sensitive, test3cs.x COLLATE case_sensitive + -> Hash Join + Output: t1.x, test3cs.x + Hash Cond: ((t1.x)::text = (test3cs.x)::text) + -> Seq Scan on collate_tests.test1cs t1 + Output: t1.x + -> Hash + Output: test3cs.x + -> HashAggregate + Output: test3cs.x + Group Key: test3cs.x + -> Seq Scan on collate_tests.test3cs + Output: test3cs.x +(15 rows) + +SELECT * FROM test1cs t1, (SELECT DISTINCT x FROM test3cs) t2 +WHERE t1.x = t2.x COLLATE case_insensitive +ORDER BY 1, 2; + x | x +-----+----- + abc | abc + abc | ABC + ABC | abc + ABC | ABC + def | def + ghi | ghi +(6 rows) + +-- Same with GROUP BY +EXPLAIN (VERBOSE, COSTS OFF) +SELECT * FROM test1cs t1, (SELECT x FROM test3cs GROUP BY x) t2 +WHERE t1.x = t2.x COLLATE case_insensitive +ORDER BY 1, 2; + QUERY PLAN +--------------------------------------------------------------------------- + Sort + Output: t1.x, test3cs.x + Sort Key: t1.x COLLATE case_sensitive, test3cs.x COLLATE case_sensitive + -> Hash Join + Output: t1.x, test3cs.x + Hash Cond: ((t1.x)::text = (test3cs.x)::text) + -> Seq Scan on collate_tests.test1cs t1 + Output: t1.x + -> Hash + Output: test3cs.x + -> HashAggregate + Output: test3cs.x + Group Key: test3cs.x + -> Seq Scan on collate_tests.test3cs + Output: test3cs.x +(15 rows) + +SELECT * FROM test1cs t1, (SELECT x FROM test3cs GROUP BY x) t2 +WHERE t1.x = t2.x COLLATE case_insensitive +ORDER BY 1, 2; + x | x +-----+----- + abc | abc + abc | ABC + ABC | abc + ABC | ABC + def | def + ghi | ghi +(6 rows) + +-- Same with set-op +EXPLAIN (VERBOSE, COSTS OFF) +SELECT * FROM test1cs t1, (SELECT x FROM test3cs UNION SELECT x FROM test3cs) t2 +WHERE t1.x = t2.x COLLATE case_insensitive +ORDER BY 1, 2; + QUERY PLAN +--------------------------------------------------------------------------- + Sort + Output: t1.x, test3cs.x + Sort Key: t1.x COLLATE case_sensitive, test3cs.x COLLATE case_sensitive + -> Hash Join + Output: t1.x, test3cs.x + Hash Cond: ((test3cs.x)::text = (t1.x)::text) + -> HashAggregate + Output: test3cs.x + Group Key: test3cs.x + -> Append + -> Seq Scan on collate_tests.test3cs + Output: test3cs.x + -> Seq Scan on collate_tests.test3cs test3cs_1 + Output: test3cs_1.x + -> Hash + Output: t1.x + -> Seq Scan on collate_tests.test1cs t1 + Output: t1.x +(18 rows) + +SELECT * FROM test1cs t1, (SELECT x FROM test3cs UNION SELECT x FROM test3cs) t2 +WHERE t1.x = t2.x COLLATE case_insensitive +ORDER BY 1, 2; + x | x +-----+----- + abc | abc + abc | ABC + ABC | abc + ABC | ABC + def | def + ghi | ghi +(6 rows) + +-- Ensure that left-join is not removed +EXPLAIN (COSTS OFF) +SELECT t1.* FROM test3cs t1 + LEFT JOIN (SELECT DISTINCT x FROM test3cs) t2 ON t1.x = t2.x COLLATE case_insensitive +ORDER BY 1; + QUERY PLAN +----------------------------------------------- + Sort + Sort Key: t1.x COLLATE case_sensitive + -> Hash Left Join + Hash Cond: (t1.x = (test3cs.x)::text) + -> Seq Scan on test3cs t1 + -> Hash + -> HashAggregate + Group Key: test3cs.x + -> Seq Scan on test3cs +(9 rows) + +SELECT t1.* FROM test3cs t1 + LEFT JOIN (SELECT DISTINCT x FROM test3cs) t2 ON t1.x = t2.x COLLATE case_insensitive +ORDER BY 1; + x +----- + abc + abc + ABC + ABC + def + ghi +(6 rows) + +-- Ensure that semijoin is not reduced to innerjoin +EXPLAIN (COSTS OFF) +SELECT * FROM test3cs t1 + WHERE EXISTS (SELECT 1 FROM (SELECT DISTINCT x FROM test3cs) t2 + WHERE t1.x = t2.x COLLATE case_insensitive) +ORDER BY 1; + QUERY PLAN +------------------------------------------------------- + Sort + Sort Key: t1.x COLLATE case_sensitive + -> Hash Semi Join + Hash Cond: ((t1.x)::text = (test3cs.x)::text) + -> Seq Scan on test3cs t1 + -> Hash + -> HashAggregate + Group Key: test3cs.x + -> Seq Scan on test3cs +(9 rows) + +SELECT * FROM test3cs t1 + WHERE EXISTS (SELECT 1 FROM (SELECT DISTINCT x FROM test3cs) t2 + WHERE t1.x = t2.x COLLATE case_insensitive) +ORDER BY 1; + x +----- + abc + ABC + def + ghi +(4 rows) + CREATE TABLE test1ci (x text COLLATE case_insensitive); CREATE TABLE test2ci (x text COLLATE case_insensitive); CREATE TABLE test3ci (x text COLLATE case_insensitive); diff -Nru postgresql-17-17.9/src/test/regress/expected/compression_pglz.out postgresql-17-17.10/src/test/regress/expected/compression_pglz.out --- postgresql-17-17.9/src/test/regress/expected/compression_pglz.out 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/expected/compression_pglz.out 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,65 @@ +-- +-- Tests for PGLZ compression +-- +-- directory paths and dlsuffix are passed to us in environment variables +\getenv libdir PG_LIBDIR +\getenv dlsuffix PG_DLSUFFIX +\set regresslib :libdir '/regress' :dlsuffix +CREATE FUNCTION test_pglz_compress(bytea) + RETURNS bytea + AS :'regresslib' LANGUAGE C STRICT; +CREATE FUNCTION test_pglz_decompress(bytea, int4, bool) + RETURNS bytea + AS :'regresslib' LANGUAGE C STRICT; +-- Round-trip with pglz: compress then decompress. +SELECT test_pglz_decompress(test_pglz_compress( + decode(repeat('abcd', 100), 'escape')), 400, false) = + decode(repeat('abcd', 100), 'escape') AS roundtrip_ok; + roundtrip_ok +-------------- + t +(1 row) + +SELECT test_pglz_decompress(test_pglz_compress( + decode(repeat('abcd', 100), 'escape')), 400, true) = + decode(repeat('abcd', 100), 'escape') AS roundtrip_ok; + roundtrip_ok +-------------- + t +(1 row) + +-- Decompression with rawsize too large, fails to fill the destination +-- buffer. +SELECT test_pglz_decompress(test_pglz_compress( + decode(repeat('abcd', 100), 'escape')), 500, true); +ERROR: pglz_decompress failed +-- Decompression with rawsize too small, fails with source not fully +-- consumed. +SELECT test_pglz_decompress(test_pglz_compress( + decode(repeat('abcd', 100), 'escape')), 100, true); +ERROR: pglz_decompress failed +-- Corrupted compressed data. Set control bit with read of a match tag, +-- no data follows. +SELECT length(test_pglz_decompress('\x01'::bytea, 1024, false)) AS ctrl_only_len; + ctrl_only_len +--------------- + 0 +(1 row) + +SELECT test_pglz_decompress('\x01'::bytea, 1024, true); +ERROR: pglz_decompress failed +-- Corrupted compressed data. Set control bit with read of a match tag, +-- 1 byte follows. +SELECT test_pglz_decompress('\x01ff'::bytea, 1024, false); +ERROR: pglz_decompress failed +SELECT test_pglz_decompress('\x01ff'::bytea, 1024, true); +ERROR: pglz_decompress failed +-- Corrupted compressed data. Set control bit with match tag where length +-- nibble is 3 bytes (extended length), no data follows. +SELECT test_pglz_decompress('\x010f01'::bytea, 1024, false); +ERROR: pglz_decompress failed +SELECT test_pglz_decompress('\x010f01'::bytea, 1024, true); +ERROR: pglz_decompress failed +-- Clean up +DROP FUNCTION test_pglz_compress; +DROP FUNCTION test_pglz_decompress; diff -Nru postgresql-17-17.9/src/test/regress/expected/create_index.out postgresql-17-17.10/src/test/regress/expected/create_index.out --- postgresql-17-17.9/src/test/regress/expected/create_index.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/expected/create_index.out 2026-05-11 19:46:41.000000000 +0000 @@ -32,6 +32,20 @@ ERROR: relation "six_wrong" does not exist COMMENT ON INDEX six IS 'good index'; COMMENT ON INDEX six IS NULL; +SELECT obj_description('six'::regclass, 'pg_class') IS NULL AS six_comment_is_null; + six_comment_is_null +--------------------- + t +(1 row) + +COMMENT ON INDEX six IS 'add the comment back'; +COMMENT ON INDEX six IS ''; -- empty string removes the comment, same as NULL +SELECT obj_description('six'::regclass, 'pg_class') IS NULL AS six_comment_is_null; + six_comment_is_null +--------------------- + t +(1 row) + -- -- BTREE partial indices -- diff -Nru postgresql-17-17.9/src/test/regress/expected/create_role.out postgresql-17-17.10/src/test/regress/expected/create_role.out --- postgresql-17-17.9/src/test/regress/expected/create_role.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/expected/create_role.out 2026-05-11 19:46:41.000000000 +0000 @@ -102,6 +102,33 @@ CREATE ROLE regress_hasprivs CREATEROLE LOGIN INHERIT CONNECTION LIMIT 5; -- ok, we should be able to modify a role we created COMMENT ON ROLE regress_hasprivs IS 'some comment'; +SELECT shobj_description('regress_hasprivs'::regrole, 'pg_authid') IS NOT NULL AS has_comment; + has_comment +------------- + t +(1 row) + +COMMENT ON ROLE regress_hasprivs IS NULL; +SELECT shobj_description('regress_hasprivs'::regrole, 'pg_authid') IS NULL AS no_comment; + no_comment +------------ + t +(1 row) + +COMMENT ON ROLE regress_hasprivs IS 'add the comment back'; +SELECT shobj_description('regress_hasprivs'::regrole, 'pg_authid') IS NOT NULL AS has_comment; + has_comment +------------- + t +(1 row) + +COMMENT ON ROLE regress_hasprivs IS ''; -- empty string removes the comment, same as NULL +SELECT shobj_description('regress_hasprivs'::regrole, 'pg_authid') IS NULL AS no_comment; + no_comment +------------ + t +(1 row) + ALTER ROLE regress_hasprivs RENAME TO regress_tenant; ALTER ROLE regress_tenant NOINHERIT NOLOGIN CONNECTION LIMIT 7; -- fail, we should be unable to modify a role we did not create diff -Nru postgresql-17-17.9/src/test/regress/expected/create_table_like.out postgresql-17-17.10/src/test/regress/expected/create_table_like.out --- postgresql-17-17.9/src/test/regress/expected/create_table_like.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/expected/create_table_like.out 2026-05-11 19:46:41.000000000 +0000 @@ -533,3 +533,34 @@ DROP VIEW ctlv1; DROP TABLE IF EXISTS ctlt4, ctlt10, ctlt11, ctlt11a, ctlt12; NOTICE: table "ctlt10" does not exist, skipping +-- LIKE ... INCLUDING STATISTICS with dropped columns in the parent, +-- so stxkeys attnums are not contiguous. +CREATE TABLE ctl_stats3_parent (a int, b int, c int); +ALTER TABLE ctl_stats3_parent DROP COLUMN b; +CREATE STATISTICS ctl_stats3_stat ON a, c FROM ctl_stats3_parent; +CREATE TABLE ctl_stats3_child (LIKE ctl_stats3_parent INCLUDING STATISTICS); +CREATE TABLE ctl_stats4_parent (a int, b int, c int, d int); +ALTER TABLE ctl_stats4_parent DROP COLUMN b; +CREATE STATISTICS ctl_stats4_stat ON a, c FROM ctl_stats4_parent; +CREATE TABLE ctl_stats4_child (LIKE ctl_stats4_parent INCLUDING STATISTICS); +SELECT s.stxrelid::regclass AS relation, + array_agg(a.attname ORDER BY u.ord) AS stats_columns +FROM pg_statistic_ext s +CROSS JOIN LATERAL + unnest(s.stxkeys::int2[]) WITH ORDINALITY AS u(attnum, ord) +JOIN pg_attribute a + ON a.attrelid = s.stxrelid AND a.attnum = u.attnum +WHERE s.stxrelid IN ('ctl_stats3_child'::regclass, + 'ctl_stats4_child'::regclass) +GROUP BY s.stxrelid +ORDER BY s.stxrelid::regclass::text; + relation | stats_columns +------------------+--------------- + ctl_stats3_child | {a,c} + ctl_stats4_child | {a,c} +(2 rows) + +DROP TABLE ctl_stats3_parent; +DROP TABLE ctl_stats3_child; +DROP TABLE ctl_stats4_parent; +DROP TABLE ctl_stats4_child; diff -Nru postgresql-17-17.9/src/test/regress/expected/expressions.out postgresql-17-17.10/src/test/regress/expected/expressions.out --- postgresql-17-17.9/src/test/regress/expected/expressions.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/expected/expressions.out 2026-05-11 19:46:41.000000000 +0000 @@ -382,42 +382,177 @@ operator 1 = (myint, myint), function 1 myinthash(myint); create table inttest (a myint); -insert into inttest values(1::myint),(null); --- try an array with enough elements to cause hashing -select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null); - a ---- - 1 - -(2 rows) - -select * from inttest where a not in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null); - a ---- -(0 rows) - -select * from inttest where a not in (0::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null); - a ---- -(0 rows) - --- ensure the result matched with the non-hashed version. We simply remove --- some array elements so that we don't reach the hashing threshold. -select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint, null); - a ---- - 1 - -(2 rows) - -select * from inttest where a not in (1::myint,2::myint,3::myint,4::myint,5::myint, null); - a ---- -(0 rows) - -select * from inttest where a not in (0::myint,2::myint,3::myint,4::myint,5::myint, null); - a ---- -(0 rows) +insert into inttest values (null), (0::myint), (1::myint); +-- Test EEOP_HASHED_SCALARARRAYOP against EEOP_SCALARARRAYOP. Ensure the +-- result of non-hashed vs hashed is the same. +select + a, + a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as not_hashed, + a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint) as hashed +from inttest; + a | not_hashed | hashed +---+------------+-------- + | | + 0 | f | f + 1 | t | t +(3 rows) + +select + a, + a in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint) as not_hashed, + a in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as hashed + from inttest; + a | not_hashed | hashed +---+------------+-------- + | t | t + 0 | | + 1 | t | t +(3 rows) + +select + a, + a not in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as not_hashed, + a not in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint) as hashed +from inttest; + a | not_hashed | hashed +---+------------+-------- + | | + 0 | t | t + 1 | f | f +(3 rows) + +select + a, + a not in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint) as not_hashed, + a not in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as hashed +from inttest; + a | not_hashed | hashed +---+------------+-------- + | f | f + 0 | | + 1 | f | f +(3 rows) + +-- Now make the equal function return false when given two NULLs +create or replace function myinteq(myint, myint) returns bool as $$ +begin + if $1 is null and $2 is null then + return false; + else + return $1::int = $2::int; + end if; +end; +$$ language plpgsql immutable; +-- And try the same again to ensure EEOP_HASHED_SCALARARRAYOP does the same +-- thing as EEOP_SCALARARRAYOP. +select + a, + a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as not_hashed, + a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint) as hashed +from inttest; + a | not_hashed | hashed +---+------------+-------- + | | + 0 | f | f + 1 | t | t +(3 rows) + +select + a, + a in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint) as not_hashed, + a in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as hashed + from inttest; + a | not_hashed | hashed +---+------------+-------- + | | + 0 | | + 1 | t | t +(3 rows) + +select + a, + a not in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as not_hashed, + a not in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint) as hashed +from inttest; + a | not_hashed | hashed +---+------------+-------- + | | + 0 | t | t + 1 | f | f +(3 rows) + +select + a, + a not in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint) as not_hashed, + a not in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as hashed +from inttest; + a | not_hashed | hashed +---+------------+-------- + | | + 0 | | + 1 | f | f +(3 rows) + +-- Try again with an equality function that treats NULLs as equal to 0. +create or replace function myinteq(myint, myint) returns bool as $$ +begin + if $1 is null and $2 is null then + return false; + else + return coalesce($1::int,0) = coalesce($2::int, 0); + end if; +end; +$$ language plpgsql immutable; +select + a, + a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as not_hashed, + a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint) as hashed, + a in (0::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint) as not_hashed_zero, + a in (0::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as hashed_zero +from inttest; + a | not_hashed | hashed | not_hashed_zero | hashed_zero +---+------------+--------+-----------------+------------- + | f | f | t | t + 0 | f | f | t | t + 1 | t | t | t | t +(3 rows) + +select + a, + a in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint) as not_hashed, + a in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as hashed + from inttest; + a | not_hashed | hashed +---+------------+-------- + | f | f + 0 | t | t + 1 | t | t +(3 rows) + +select + a, + a not in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as not_hashed, + a not in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint) as hashed, + a not in (0::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint) as not_hashed_zero, + a not in (0::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as hashed_zero +from inttest; + a | not_hashed | hashed | not_hashed_zero | hashed_zero +---+------------+--------+-----------------+------------- + | t | t | f | f + 0 | t | t | f | f + 1 | f | f | f | f +(3 rows) + +select + a, + a not in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint) as not_hashed, + a not in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as hashed +from inttest; + a | not_hashed | hashed +---+------------+-------- + | t | t + 0 | f | f + 1 | f | f +(3 rows) rollback; diff -Nru postgresql-17-17.9/src/test/regress/expected/foreign_data.out postgresql-17-17.10/src/test/regress/expected/foreign_data.out --- postgresql-17-17.9/src/test/regress/expected/foreign_data.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/expected/foreign_data.out 2026-05-11 19:46:41.000000000 +0000 @@ -106,6 +106,13 @@ LINE 1: ...GN DATA WRAPPER test_fdw HANDLER test_fdw_handler HANDLER in... ^ CREATE FOREIGN DATA WRAPPER test_fdw HANDLER test_fdw_handler; +-- should preserve dependency on test_fdw_handler +ALTER FOREIGN DATA WRAPPER test_fdw VALIDATOR postgresql_fdw_validator; +WARNING: changing the foreign-data wrapper validator can cause the options for dependent objects to become invalid +DROP FUNCTION test_fdw_handler(); -- ERROR +ERROR: cannot drop function test_fdw_handler() because other objects depend on it +DETAIL: foreign-data wrapper test_fdw depends on function test_fdw_handler() +HINT: Use DROP ... CASCADE to drop the dependent objects too. DROP FOREIGN DATA WRAPPER test_fdw; -- ALTER FOREIGN DATA WRAPPER ALTER FOREIGN DATA WRAPPER foo OPTIONS (nonexistent 'fdw'); -- ERROR @@ -826,10 +833,13 @@ ALTER FOREIGN TABLE ft1 ADD COLUMN c4 integer; ALTER FOREIGN TABLE ft1 ADD COLUMN c5 integer DEFAULT 0; ALTER FOREIGN TABLE ft1 ADD COLUMN c6 integer; +ALTER FOREIGN TABLE ft1 ADD COLUMN IF NOT EXISTS c6 integer; +NOTICE: column "c6" of relation "ft1" already exists, skipping ALTER FOREIGN TABLE ft1 ADD COLUMN c7 integer NOT NULL; ALTER FOREIGN TABLE ft1 ADD COLUMN c8 integer; ALTER FOREIGN TABLE ft1 ADD COLUMN c9 integer; ALTER FOREIGN TABLE ft1 ADD COLUMN c10 integer OPTIONS (p1 'v1'); +ALTER FOREIGN TABLE ft1 ADD c11 integer; ALTER FOREIGN TABLE ft1 ALTER COLUMN c4 SET DEFAULT 0; ALTER FOREIGN TABLE ft1 ALTER COLUMN c5 DROP DEFAULT; ALTER FOREIGN TABLE ft1 ALTER COLUMN c6 SET NOT NULL; @@ -861,6 +871,7 @@ c8 | text | | | | (p2 'V2') | plain | | c9 | integer | | | | | plain | | c10 | integer | | | | (p1 'v1') | plain | | + c11 | integer | | | | | plain | | Check constraints: "ft1_c2_check" CHECK (c2 <> ''::text) "ft1_c3_check" CHECK (c3 >= '01-01-1994'::date AND c3 <= '01-31-1994'::date) @@ -892,6 +903,7 @@ ALTER FOREIGN TABLE ft1 DROP COLUMN IF EXISTS no_column; NOTICE: column "no_column" of relation "ft1" does not exist, skipping ALTER FOREIGN TABLE ft1 DROP COLUMN c9; +ALTER FOREIGN TABLE ft1 DROP c11; ALTER FOREIGN TABLE ft1 ADD COLUMN c11 serial; ALTER FOREIGN TABLE ft1 SET SCHEMA foreign_schema; ALTER FOREIGN TABLE ft1 SET TABLESPACE ts; -- ERROR @@ -926,6 +938,8 @@ NOTICE: relation "doesnt_exist_ft1" does not exist, skipping ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 ADD COLUMN c6 integer; NOTICE: relation "doesnt_exist_ft1" does not exist, skipping +ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 ADD COLUMN IF NOT EXISTS c6 integer; +NOTICE: relation "doesnt_exist_ft1" does not exist, skipping ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 ADD COLUMN c7 integer NOT NULL; NOTICE: relation "doesnt_exist_ft1" does not exist, skipping ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 ADD COLUMN c8 integer; @@ -934,6 +948,8 @@ NOTICE: relation "doesnt_exist_ft1" does not exist, skipping ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 ADD COLUMN c10 integer OPTIONS (p1 'v1'); NOTICE: relation "doesnt_exist_ft1" does not exist, skipping +ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 ADD c11 integer; +NOTICE: relation "doesnt_exist_ft1" does not exist, skipping ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 ALTER COLUMN c6 SET NOT NULL; NOTICE: relation "doesnt_exist_ft1" does not exist, skipping ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 ALTER COLUMN c7 DROP NOT NULL; @@ -955,10 +971,14 @@ NOTICE: relation "doesnt_exist_ft1" does not exist, skipping ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 OPTIONS (DROP delimiter, SET quote '~', ADD escape '@'); NOTICE: relation "doesnt_exist_ft1" does not exist, skipping +ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 DROP COLUMN no_column; +NOTICE: relation "doesnt_exist_ft1" does not exist, skipping ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 DROP COLUMN IF EXISTS no_column; NOTICE: relation "doesnt_exist_ft1" does not exist, skipping ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 DROP COLUMN c9; NOTICE: relation "doesnt_exist_ft1" does not exist, skipping +ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 DROP c11; +NOTICE: relation "doesnt_exist_ft1" does not exist, skipping ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 SET SCHEMA foreign_schema; NOTICE: relation "doesnt_exist_ft1" does not exist, skipping ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 RENAME c1 TO foreign_column_1; diff -Nru postgresql-17-17.9/src/test/regress/expected/generated.out postgresql-17-17.10/src/test/regress/expected/generated.out --- postgresql-17-17.9/src/test/regress/expected/generated.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/expected/generated.out 2026-05-11 19:46:41.000000000 +0000 @@ -1401,3 +1401,37 @@ c | integer | | | x | integer | | | generated always as (b * 2) stored +-- rule actions referring to generated columns: +-- NEW.b in a rule action should reflect the generated column's new value +CREATE TABLE gtest_rule (a int, b int GENERATED ALWAYS AS (a * 2) STORED); +CREATE TABLE gtest_rule_log (op text, old_b int, new_b int); +CREATE RULE gtest_rule_upd AS ON UPDATE TO gtest_rule + DO ALSO INSERT INTO gtest_rule_log VALUES ('UPD', OLD.b, NEW.b); +CREATE RULE gtest_rule_ins AS ON INSERT TO gtest_rule + DO ALSO INSERT INTO gtest_rule_log VALUES ('INS', NULL, NEW.b); +INSERT INTO gtest_rule (a) VALUES (1); +UPDATE gtest_rule SET a = 10; +UPDATE gtest_rule SET a = (SELECT max(b) FROM gtest_rule); +SELECT * FROM gtest_rule_log; + op | old_b | new_b +-----+-------+------- + INS | | 2 + UPD | 2 | 20 + UPD | 20 | 40 +(3 rows) + +DROP RULE gtest_rule_upd ON gtest_rule; +DROP RULE gtest_rule_ins ON gtest_rule; +DROP TABLE gtest_rule_log; +-- rule quals referring to generated columns: +-- NEW.b in the rule qual should reflect the generated column's new value +CREATE RULE gtest_rule_qual AS ON UPDATE TO gtest_rule WHERE NEW.b > 100 + DO INSTEAD NOTHING; +UPDATE gtest_rule SET a = 100; +SELECT * FROM gtest_rule; + a | b +----+---- + 20 | 40 +(1 row) + +DROP TABLE gtest_rule; diff -Nru postgresql-17-17.9/src/test/regress/expected/indexing.out postgresql-17-17.10/src/test/regress/expected/indexing.out --- postgresql-17-17.9/src/test/regress/expected/indexing.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/expected/indexing.out 2026-05-11 19:46:41.000000000 +0000 @@ -541,6 +541,111 @@ (3 rows) drop table idxpart; +-- Verify that re-attaching an already-attached partition index can +-- validate the parent index if it was still invalid, including +-- indirect ancestors in subpartitions. +create table idxpart (a int, b int) partition by range (a); +create table idxpart1 partition of idxpart for values from (0) to (1000) partition by range (a); +create table idxpart11 partition of idxpart1 for values from (0) to (500); +-- Partitioned table with no partitions +create table idxpart2 partition of idxpart for values from (1000) to (2000) partition by range (a); +-- create parent indexes +create index on only idxpart ((a/b)); +create index on only idxpart1 ((a/b)); +create index on only idxpart2 ((a/b)); +-- fail, leaves behind an invalid index on the leaf partition +insert into idxpart11 values (1, 0); +create index concurrently on idxpart11 ((a/b)); +ERROR: division by zero +select relname, indisvalid from pg_class join pg_index on indexrelid = oid + where relname like 'idxpart%' order by relname; + relname | indisvalid +--------------------+------------ + idxpart11_expr_idx | f + idxpart1_expr_idx | f + idxpart2_expr_idx | t + idxpart_expr_idx | f +(4 rows) + +-- attach the indexes; parents stay invalid +alter index idxpart1_expr_idx attach partition idxpart11_expr_idx; +alter index idxpart_expr_idx attach partition idxpart1_expr_idx; +alter index idxpart_expr_idx attach partition idxpart2_expr_idx; +select relname, indisvalid from pg_class join pg_index on indexrelid = oid + where relname like 'idxpart%' order by relname; + relname | indisvalid +--------------------+------------ + idxpart11_expr_idx | f + idxpart1_expr_idx | f + idxpart2_expr_idx | t + idxpart_expr_idx | f +(4 rows) + +-- fix the index on the leaf partition +delete from idxpart11 where b = 0; +reindex index concurrently idxpart11_expr_idx; +-- reattach the leaf partition index; parents should now be valid +alter index idxpart1_expr_idx attach partition idxpart11_expr_idx; +select relname, indisvalid from pg_class join pg_index on indexrelid = oid + where relname like 'idxpart%' order by relname; + relname | indisvalid +--------------------+------------ + idxpart11_expr_idx | t + idxpart1_expr_idx | t + idxpart2_expr_idx | t + idxpart_expr_idx | t +(4 rows) + +drop table idxpart; +-- Verify that re-attaching does not validate the parent when another +-- child index is still invalid. +create table idxpart (a int, b int) partition by range (a); +create table idxpart1 partition of idxpart for values from (0) to (500); +create table idxpart2 partition of idxpart for values from (500) to (1000); +create index on only idxpart ((a/b)); +-- create invalid indexes on both children +insert into idxpart1 values (1, 0); +insert into idxpart2 values (501, 0); +create index concurrently on idxpart1 ((a/b)); +ERROR: division by zero +create index concurrently on idxpart2 ((a/b)); +ERROR: division by zero +select relname, indisvalid from pg_class join pg_index on indexrelid = oid + where relname like 'idxpart%' order by relname; + relname | indisvalid +-------------------+------------ + idxpart1_expr_idx | f + idxpart2_expr_idx | f + idxpart_expr_idx | f +(3 rows) + +-- attach both; parent stays invalid +alter index idxpart_expr_idx attach partition idxpart1_expr_idx; +alter index idxpart_expr_idx attach partition idxpart2_expr_idx; +select relname, indisvalid from pg_class join pg_index on indexrelid = oid + where relname like 'idxpart%' order by relname; + relname | indisvalid +-------------------+------------ + idxpart1_expr_idx | f + idxpart2_expr_idx | f + idxpart_expr_idx | f +(3 rows) + +-- fix only idxpart1's index, leave idxpart2's still invalid +delete from idxpart1 where b = 0; +reindex index concurrently idxpart1_expr_idx; +-- re-attach the fixed child; parent should stay invalid +alter index idxpart_expr_idx attach partition idxpart1_expr_idx; +select relname, indisvalid from pg_class join pg_index on indexrelid = oid + where relname like 'idxpart%' order by relname; + relname | indisvalid +-------------------+------------ + idxpart1_expr_idx | t + idxpart2_expr_idx | f + idxpart_expr_idx | f +(3 rows) + +drop table idxpart; -- verify dependency handling during ALTER TABLE DETACH PARTITION create table idxpart (a int) partition by range (a); create table idxpart1 (like idxpart); diff -Nru postgresql-17-17.9/src/test/regress/expected/join.out postgresql-17-17.10/src/test/regress/expected/join.out --- postgresql-17-17.9/src/test/regress/expected/join.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/expected/join.out 2026-05-11 19:46:41.000000000 +0000 @@ -5674,6 +5674,45 @@ -> Seq Scan on onek t4 (13 rows) +-- bug #19460: we need to clean up RestrictInfos more than we had been doing +explain (costs off) +select * from + (select 1::int as id) as lhs +full join + (select dummy_source.id + from (select null::int as id) as dummy_source + left join (select a.id from a where a.id = 42) as sub + on sub.id = dummy_source.id + ) as rhs +on lhs.id = rhs.id; + QUERY PLAN +-------------------------------------- + Hash Full Join + Hash Cond: ((1) = (NULL::integer)) + -> Result + -> Hash + -> Result +(5 rows) + +explain (costs off) +select * from + (select 1::int as id) as lhs +full join + (select dummy_source.id + from (select 2::int as id) as dummy_source + left join (select a.id from a) as sub + on sub.id = dummy_source.id + ) as rhs +on lhs.id = rhs.id; + QUERY PLAN +-------------------------- + Hash Full Join + Hash Cond: ((1) = (2)) + -> Result + -> Hash + -> Result +(5 rows) + -- More tests of correct placement of pseudoconstant quals -- simple constant-false condition explain (costs off) diff -Nru postgresql-17-17.9/src/test/regress/expected/multirangetypes.out postgresql-17-17.10/src/test/regress/expected/multirangetypes.out --- postgresql-17-17.9/src/test/regress/expected/multirangetypes.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/expected/multirangetypes.out 2026-05-11 19:46:41.000000000 +0000 @@ -3145,6 +3145,22 @@ reset role; drop role regress_multirange_owner; -- +-- CREATE TYPE checks for CREATE on multirange schema +-- +create role regress_mr; +create schema mr_sch; +set role regress_mr; +create type mytype as range (subtype=int4, multirange_type_name=mr_sch.mr_type); +ERROR: permission denied for schema mr_sch +reset role; +grant create on schema mr_sch to regress_mr; +set role regress_mr; +create type mytype as range (subtype=int4, multirange_type_name=mr_sch.mr_type); +reset role; +drop type mytype; +drop schema mr_sch; +drop role regress_mr; +-- -- Test polymorphic type system -- create function anyarray_anymultirange_func(a anyarray, r anymultirange) @@ -3297,6 +3313,9 @@ {["(5,6)","(7,8)")} | {"a":7,"b":8} (2 rows) +-- this must be rejected to avoid self-inclusion issues: +alter type two_ints add attribute c two_ints_multirange; +ERROR: composite type two_ints cannot be made a member of itself drop type two_ints cascade; NOTICE: drop cascades to type two_ints_range -- diff -Nru postgresql-17-17.9/src/test/regress/expected/prepared_xacts.out postgresql-17-17.10/src/test/regress/expected/prepared_xacts.out --- postgresql-17-17.9/src/test/regress/expected/prepared_xacts.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/expected/prepared_xacts.out 2026-05-11 19:46:41.000000000 +0000 @@ -1,3 +1,7 @@ +SELECT current_setting('max_prepared_transactions')::integer < 2 AS skip_test \gset +\if :skip_test +\quit +\endif -- -- PREPARED TRANSACTIONS (two-phase commit) -- @@ -263,8 +267,37 @@ ----- (0 rows) +-- Test row-level locks held by prepared transactions +CREATE TABLE pxtest_rowlock (id int PRIMARY KEY, data text); +INSERT INTO pxtest_rowlock VALUES (1, 'test data'); +BEGIN; +SELECT * FROM pxtest_rowlock WHERE id = 1 FOR SHARE; + id | data +----+----------- + 1 | test data +(1 row) + +PREPARE TRANSACTION 'regress_p1'; +-- Should fail because the row is locked +SELECT * FROM pxtest_rowlock WHERE id = 1 FOR UPDATE NOWAIT; +ERROR: could not obtain lock on row in relation "pxtest_rowlock" +-- Test prepared transactions that participate in multixacts. For +-- that, lock the same row again, creating a multixid. +BEGIN; +SELECT * FROM pxtest_rowlock WHERE id = 1 FOR SHARE; + id | data +----+----------- + 1 | test data +(1 row) + +PREPARE TRANSACTION 'regress_p2'; +-- Should fail because the row is locked +SELECT * FROM pxtest_rowlock WHERE id = 1 FOR UPDATE NOWAIT; +ERROR: could not obtain lock on row in relation "pxtest_rowlock" +ROLLBACK PREPARED 'regress_p1'; +ROLLBACK PREPARED 'regress_p2'; -- Clean up DROP TABLE pxtest2; -DROP TABLE pxtest3; -- will still be there if prepared xacts are disabled -ERROR: table "pxtest3" does not exist +-- pxtest3 was already dropped DROP TABLE pxtest4; +DROP TABLE pxtest_rowlock; diff -Nru postgresql-17-17.9/src/test/regress/expected/prepared_xacts_1.out postgresql-17-17.10/src/test/regress/expected/prepared_xacts_1.out --- postgresql-17-17.9/src/test/regress/expected/prepared_xacts_1.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/expected/prepared_xacts_1.out 2026-05-11 19:46:41.000000000 +0000 @@ -1,266 +1,3 @@ --- --- PREPARED TRANSACTIONS (two-phase commit) --- --- We can't readily test persistence of prepared xacts within the --- regression script framework, unfortunately. Note that a crash --- isn't really needed ... stopping and starting the postmaster would --- be enough, but we can't even do that here. --- create a simple table that we'll use in the tests -CREATE TABLE pxtest1 (foobar VARCHAR(10)); -INSERT INTO pxtest1 VALUES ('aaa'); --- Test PREPARE TRANSACTION -BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; -UPDATE pxtest1 SET foobar = 'bbb' WHERE foobar = 'aaa'; -SELECT * FROM pxtest1; - foobar --------- - bbb -(1 row) - -PREPARE TRANSACTION 'regress_foo1'; -ERROR: prepared transactions are disabled -HINT: Set "max_prepared_transactions" to a nonzero value. -SELECT * FROM pxtest1; - foobar --------- - aaa -(1 row) - --- Test pg_prepared_xacts system view -SELECT gid FROM pg_prepared_xacts WHERE gid ~ '^regress_' ORDER BY gid; - gid ------ -(0 rows) - --- Test ROLLBACK PREPARED -ROLLBACK PREPARED 'regress_foo1'; -ERROR: prepared transaction with identifier "regress_foo1" does not exist -SELECT * FROM pxtest1; - foobar --------- - aaa -(1 row) - -SELECT gid FROM pg_prepared_xacts WHERE gid ~ '^regress_' ORDER BY gid; - gid ------ -(0 rows) - --- Test COMMIT PREPARED -BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; -INSERT INTO pxtest1 VALUES ('ddd'); -SELECT * FROM pxtest1; - foobar --------- - aaa - ddd -(2 rows) - -PREPARE TRANSACTION 'regress_foo2'; -ERROR: prepared transactions are disabled -HINT: Set "max_prepared_transactions" to a nonzero value. -SELECT * FROM pxtest1; - foobar --------- - aaa -(1 row) - -COMMIT PREPARED 'regress_foo2'; -ERROR: prepared transaction with identifier "regress_foo2" does not exist -SELECT * FROM pxtest1; - foobar --------- - aaa -(1 row) - --- Test duplicate gids -BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; -UPDATE pxtest1 SET foobar = 'eee' WHERE foobar = 'ddd'; -SELECT * FROM pxtest1; - foobar --------- - aaa -(1 row) - -PREPARE TRANSACTION 'regress_foo3'; -ERROR: prepared transactions are disabled -HINT: Set "max_prepared_transactions" to a nonzero value. -SELECT gid FROM pg_prepared_xacts WHERE gid ~ '^regress_' ORDER BY gid; - gid ------ -(0 rows) - -BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; -INSERT INTO pxtest1 VALUES ('fff'); --- This should fail, because the gid foo3 is already in use -PREPARE TRANSACTION 'regress_foo3'; -ERROR: prepared transactions are disabled -HINT: Set "max_prepared_transactions" to a nonzero value. -SELECT * FROM pxtest1; - foobar --------- - aaa -(1 row) - -ROLLBACK PREPARED 'regress_foo3'; -ERROR: prepared transaction with identifier "regress_foo3" does not exist -SELECT * FROM pxtest1; - foobar --------- - aaa -(1 row) - --- Test serialization failure (SSI) -BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; -UPDATE pxtest1 SET foobar = 'eee' WHERE foobar = 'ddd'; -SELECT * FROM pxtest1; - foobar --------- - aaa -(1 row) - -PREPARE TRANSACTION 'regress_foo4'; -ERROR: prepared transactions are disabled -HINT: Set "max_prepared_transactions" to a nonzero value. -SELECT gid FROM pg_prepared_xacts WHERE gid ~ '^regress_' ORDER BY gid; - gid ------ -(0 rows) - -BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; -SELECT * FROM pxtest1; - foobar --------- - aaa -(1 row) - --- This should fail, because the two transactions have a write-skew anomaly -INSERT INTO pxtest1 VALUES ('fff'); -PREPARE TRANSACTION 'regress_foo5'; -ERROR: prepared transactions are disabled -HINT: Set "max_prepared_transactions" to a nonzero value. -SELECT gid FROM pg_prepared_xacts WHERE gid ~ '^regress_' ORDER BY gid; - gid ------ -(0 rows) - -ROLLBACK PREPARED 'regress_foo4'; -ERROR: prepared transaction with identifier "regress_foo4" does not exist -SELECT gid FROM pg_prepared_xacts WHERE gid ~ '^regress_' ORDER BY gid; - gid ------ -(0 rows) - --- Clean up -DROP TABLE pxtest1; --- Test detection of session-level and xact-level locks on same object -BEGIN; -SELECT pg_advisory_lock(1); - pg_advisory_lock ------------------- - -(1 row) - -SELECT pg_advisory_xact_lock_shared(1); - pg_advisory_xact_lock_shared ------------------------------- - -(1 row) - -PREPARE TRANSACTION 'regress_foo6'; -- fails -ERROR: prepared transactions are disabled -HINT: Set "max_prepared_transactions" to a nonzero value. --- Test subtransactions -BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; - CREATE TABLE pxtest2 (a int); - INSERT INTO pxtest2 VALUES (1); - SAVEPOINT a; - INSERT INTO pxtest2 VALUES (2); - ROLLBACK TO a; - SAVEPOINT b; - INSERT INTO pxtest2 VALUES (3); -PREPARE TRANSACTION 'regress_sub1'; -ERROR: prepared transactions are disabled -HINT: Set "max_prepared_transactions" to a nonzero value. -CREATE TABLE pxtest3(fff int); --- Test shared invalidation -BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; - DROP TABLE pxtest3; - CREATE TABLE pxtest4 (a int); - INSERT INTO pxtest4 VALUES (1); - INSERT INTO pxtest4 VALUES (2); - DECLARE foo CURSOR FOR SELECT * FROM pxtest4; - -- Fetch 1 tuple, keeping the cursor open - FETCH 1 FROM foo; - a ---- - 1 -(1 row) - -PREPARE TRANSACTION 'regress_sub2'; -ERROR: prepared transactions are disabled -HINT: Set "max_prepared_transactions" to a nonzero value. --- No such cursor -FETCH 1 FROM foo; -ERROR: cursor "foo" does not exist --- Table doesn't exist, the creation hasn't been committed yet -SELECT * FROM pxtest2; -ERROR: relation "pxtest2" does not exist -LINE 1: SELECT * FROM pxtest2; - ^ --- There should be two prepared transactions -SELECT gid FROM pg_prepared_xacts WHERE gid ~ '^regress_' ORDER BY gid; - gid ------ -(0 rows) - --- pxtest3 should be locked because of the pending DROP -begin; -lock table pxtest3 in access share mode nowait; -rollback; --- Disconnect, we will continue testing in a different backend -\c - --- There should still be two prepared transactions -SELECT gid FROM pg_prepared_xacts WHERE gid ~ '^regress_' ORDER BY gid; - gid ------ -(0 rows) - --- pxtest3 should still be locked because of the pending DROP -begin; -lock table pxtest3 in access share mode nowait; -rollback; --- Commit table creation -COMMIT PREPARED 'regress_sub1'; -ERROR: prepared transaction with identifier "regress_sub1" does not exist -\d pxtest2 -SELECT * FROM pxtest2; -ERROR: relation "pxtest2" does not exist -LINE 1: SELECT * FROM pxtest2; - ^ --- There should be one prepared transaction -SELECT gid FROM pg_prepared_xacts WHERE gid ~ '^regress_' ORDER BY gid; - gid ------ -(0 rows) - --- Commit table drop -COMMIT PREPARED 'regress_sub2'; -ERROR: prepared transaction with identifier "regress_sub2" does not exist -SELECT * FROM pxtest3; - fff ------ -(0 rows) - --- There should be no prepared transactions -SELECT gid FROM pg_prepared_xacts WHERE gid ~ '^regress_' ORDER BY gid; - gid ------ -(0 rows) - --- Clean up -DROP TABLE pxtest2; -ERROR: table "pxtest2" does not exist -DROP TABLE pxtest3; -- will still be there if prepared xacts are disabled -DROP TABLE pxtest4; -ERROR: table "pxtest4" does not exist +SELECT current_setting('max_prepared_transactions')::integer < 2 AS skip_test \gset +\if :skip_test +\quit diff -Nru postgresql-17-17.9/src/test/regress/expected/stats.out postgresql-17-17.10/src/test/regress/expected/stats.out --- postgresql-17-17.9/src/test/regress/expected/stats.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/expected/stats.out 2026-05-11 19:46:41.000000000 +0000 @@ -791,6 +791,8 @@ t (1 row) +-- stats_reset may not be set for datid=0 and shared objects in +-- pg_stat_database, so reset once. SELECT pg_stat_reset_single_table_counters('pg_shdescription'::regclass); pg_stat_reset_single_table_counters ------------------------------------- @@ -804,6 +806,22 @@ f (1 row) +SELECT stats_reset AS shared_db_reset_before + FROM pg_stat_database WHERE datid = 0 \gset +-- Second reset for comparison. +SELECT pg_stat_reset_single_table_counters('pg_shdescription'::regclass); + pg_stat_reset_single_table_counters +------------------------------------- + +(1 row) + +SELECT stats_reset > :'shared_db_reset_before'::timestamptz AS has_updated + FROM pg_stat_database WHERE datid = 0; + has_updated +------------- + t +(1 row) + -- set back comment \if :{?description_before} COMMENT ON DATABASE :"datname" IS :'description_before'; diff -Nru postgresql-17-17.9/src/test/regress/expected/tsearch.out postgresql-17-17.10/src/test/regress/expected/tsearch.out --- postgresql-17-17.9/src/test/regress/expected/tsearch.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/expected/tsearch.out 2026-05-11 19:46:41.000000000 +0000 @@ -2144,6 +2144,16 @@ foo bar (1 row) +-- Test for large values of StartSel, StopSel and FragmentDelimiter +SELECT ts_headline('english', 'foo barbar', to_tsquery('english', 'foo'), + 'StartSel=' || repeat('x', 32768)); +ERROR: value for "StartSel" is too long +SELECT ts_headline('english', 'foo barbar', to_tsquery('english', 'foo'), + 'StopSel=' || repeat('x', 32768)); +ERROR: value for "StopSel" is too long +SELECT ts_headline('english', 'foo barbar', to_tsquery('english', 'foo'), + 'FragmentDelimiter=' || repeat('x', 32768)); +ERROR: value for "FragmentDelimiter" is too long --Rewrite sub system CREATE TABLE test_tsquery (txtkeyword TEXT, txtsample TEXT); \set ECHO none diff -Nru postgresql-17-17.9/src/test/regress/expected/union.out postgresql-17-17.10/src/test/regress/expected/union.out --- postgresql-17-17.9/src/test/regress/expected/union.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/expected/union.out 2026-05-11 19:46:41.000000000 +0000 @@ -1489,3 +1489,20 @@ -> Result (6 rows) +-- Test handling of Vars with varno 0 in estimate_array_length +explain (verbose, costs off) +select null::int[] union all select null::int[] union all select null::bigint[]; + QUERY PLAN +--------------------------------------------- + Append + -> Result + Output: (NULL::integer[]) + -> Append + -> Result + Output: NULL::integer[] + -> Result + Output: NULL::integer[] + -> Result + Output: NULL::bigint[] +(10 rows) + diff -Nru postgresql-17-17.9/src/test/regress/expected/window.out postgresql-17-17.10/src/test/regress/expected/window.out --- postgresql-17-17.9/src/test/regress/expected/window.out 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/expected/window.out 2026-05-11 19:46:41.000000000 +0000 @@ -1360,6 +1360,97 @@ FROM generate_series(now(), (now() + '@ 100 days'::interval), '@ 1 hour'::interval) i(i); (1 row) +-- test overflow frame specifications +SELECT sum(unique1) over (rows between current row and 9223372036854775807 following exclude current row), + unique1, four +FROM tenk1 WHERE unique1 < 10; + sum | unique1 | four +-----+---------+------ + 41 | 4 | 0 + 39 | 2 | 2 + 38 | 1 | 1 + 32 | 6 | 2 + 23 | 9 | 1 + 15 | 8 | 0 + 10 | 5 | 1 + 7 | 3 | 3 + 0 | 7 | 3 + | 0 | 0 +(10 rows) + +SELECT sum(unique1) over (rows between 9223372036854775807 following and 1 following), + unique1, four +FROM tenk1 WHERE unique1 < 10; + sum | unique1 | four +-----+---------+------ + | 4 | 0 + | 2 | 2 + | 1 | 1 + | 6 | 2 + | 9 | 1 + | 8 | 0 + | 5 | 1 + | 3 | 3 + | 7 | 3 + | 0 | 0 +(10 rows) + +SELECT last_value(unique1) over (ORDER BY four rows between current row and 9223372036854775807 following exclude current row), + unique1, four +FROM tenk1 WHERE unique1 < 10; + last_value | unique1 | four +------------+---------+------ + 7 | 0 | 0 + 7 | 8 | 0 + 7 | 4 | 0 + 7 | 5 | 1 + 7 | 9 | 1 + 7 | 1 | 1 + 7 | 6 | 2 + 7 | 2 | 2 + 7 | 3 | 3 + | 7 | 3 +(10 rows) + +-- These test GROUPS mode with an offset large enough to cause overflow when +-- added to currentgroup. Although the overflow doesn't produce visibly wrong +-- results (due to the incremental nature of group pointer advancement), we +-- still need to protect against it as signed integer overflow is undefined +-- behavior in C. +SELECT sum(unique1) over (ORDER BY four groups between current row and 9223372036854775807 following), + unique1, four +FROM tenk1 WHERE unique1 < 10; + sum | unique1 | four +-----+---------+------ + 45 | 0 | 0 + 45 | 8 | 0 + 45 | 4 | 0 + 33 | 5 | 1 + 33 | 9 | 1 + 33 | 1 | 1 + 18 | 6 | 2 + 18 | 2 | 2 + 10 | 3 | 3 + 10 | 7 | 3 +(10 rows) + +SELECT sum(unique1) over (ORDER BY four groups between 9223372036854775807 following and unbounded following), + unique1, four +FROM tenk1 WHERE unique1 < 10; + sum | unique1 | four +-----+---------+------ + | 0 | 0 + | 8 | 0 + | 4 | 0 + | 5 | 1 + | 9 | 1 + | 1 | 1 + | 6 | 2 + | 2 | 2 + | 3 | 3 + | 7 | 3 +(10 rows) + -- RANGE offset PRECEDING/FOLLOWING tests SELECT sum(unique1) over (order by four range between 2::int8 preceding and 1::int2 preceding), unique1, four diff -Nru postgresql-17-17.9/src/test/regress/parallel_schedule postgresql-17-17.10/src/test/regress/parallel_schedule --- postgresql-17-17.9/src/test/regress/parallel_schedule 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/parallel_schedule 2026-05-11 19:46:41.000000000 +0000 @@ -123,7 +123,12 @@ # The stats test resets stats, so nothing else needing stats access can be in # this group. # ---------- -test: partition_join partition_prune reloptions hash_part indexing partition_aggregate partition_info tuplesort explain compression memoize stats predicate +test: partition_join partition_prune reloptions hash_part indexing partition_aggregate partition_info tuplesort explain memoize stats predicate + +# ---------- +# Another group of parallel tests (compression) +# ---------- +test: compression compression_pglz # event_trigger depends on create_am and cannot run concurrently with # any test that runs DDL diff -Nru postgresql-17-17.9/src/test/regress/pg_regress.c postgresql-17-17.10/src/test/regress/pg_regress.c --- postgresql-17-17.9/src/test/regress/pg_regress.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/pg_regress.c 2026-05-11 19:46:41.000000000 +0000 @@ -688,7 +688,7 @@ const char * get_expectfile(const char *testname, const char *file) { - char *file_type; + const char *file_type; _resultmap *rm; /* diff -Nru postgresql-17-17.9/src/test/regress/regress.c postgresql-17-17.10/src/test/regress/regress.c --- postgresql-17-17.9/src/test/regress/regress.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/regress.c 2026-05-11 19:46:41.000000000 +0000 @@ -28,6 +28,7 @@ #include "catalog/pg_type.h" #include "commands/sequence.h" #include "commands/trigger.h" +#include "common/pg_lzcompress.h" #include "executor/executor.h" #include "executor/spi.h" #include "funcapi.h" @@ -1436,3 +1437,68 @@ PG_RETURN_BOOL(IsBinaryCoercible(srctype, targettype)); } + +/* + * test_pglz_compress + * + * Compress the input using pglz_compress(). Only the "always" strategy is + * currently supported. + * + * Returns the compressed data, or NULL if compression fails. + */ +PG_FUNCTION_INFO_V1(test_pglz_compress); +Datum +test_pglz_compress(PG_FUNCTION_ARGS) +{ + bytea *input = PG_GETARG_BYTEA_PP(0); + char *source = VARDATA_ANY(input); + int32 slen = VARSIZE_ANY_EXHDR(input); + int32 maxout = PGLZ_MAX_OUTPUT(slen); + bytea *result; + int32 clen; + + result = (bytea *) palloc(maxout + VARHDRSZ); + clen = pglz_compress(source, slen, VARDATA(result), + PGLZ_strategy_always); + if (clen < 0) + PG_RETURN_NULL(); + + SET_VARSIZE(result, clen + VARHDRSZ); + PG_RETURN_BYTEA_P(result); +} + +/* + * test_pglz_decompress + * + * Decompress the input using pglz_decompress(). + * + * The second argument is the expected uncompressed data size. The third + * argument is here for the check_complete flag. + * + * Returns the decompressed data, or raises an error if decompression fails. + */ +PG_FUNCTION_INFO_V1(test_pglz_decompress); +Datum +test_pglz_decompress(PG_FUNCTION_ARGS) +{ + bytea *input = PG_GETARG_BYTEA_PP(0); + int32 rawsize = PG_GETARG_INT32(1); + bool check_complete = PG_GETARG_BOOL(2); + char *source = VARDATA_ANY(input); + int32 slen = VARSIZE_ANY_EXHDR(input); + bytea *result; + int32 dlen; + + if (rawsize < 0) + elog(ERROR, "rawsize must not be negative"); + + result = (bytea *) palloc(rawsize + VARHDRSZ); + + dlen = pglz_decompress(source, slen, VARDATA(result), + rawsize, check_complete); + if (dlen < 0) + elog(ERROR, "pglz_decompress failed"); + + SET_VARSIZE(result, dlen + VARHDRSZ); + PG_RETURN_BYTEA_P(result); +} diff -Nru postgresql-17-17.9/src/test/regress/sql/alter_table.sql postgresql-17-17.10/src/test/regress/sql/alter_table.sql --- postgresql-17-17.9/src/test/regress/sql/alter_table.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/sql/alter_table.sql 2026-05-11 19:46:41.000000000 +0000 @@ -2309,6 +2309,14 @@ \d test_add_column ALTER TABLE test_add_column ADD COLUMN IF NOT EXISTS c5 SERIAL CHECK (c5 > 10); +ALTER TABLE test_add_column + ADD c6 integer; -- omit COLUMN +ALTER TABLE test_add_column + ADD IF NOT EXISTS c6 integer; +ALTER TABLE test_add_column + DROP c6; -- omit COLUMN +ALTER TABLE test_add_column + DROP IF EXISTS c6; \d test_add_column* DROP TABLE test_add_column; \d test_add_column* diff -Nru postgresql-17-17.9/src/test/regress/sql/collate.icu.utf8.sql postgresql-17-17.10/src/test/regress/sql/collate.icu.utf8.sql --- postgresql-17-17.9/src/test/regress/sql/collate.icu.utf8.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/sql/collate.icu.utf8.sql 2026-05-11 19:46:41.000000000 +0000 @@ -572,6 +572,109 @@ SELECT string_to_array('ABC,DEF,GHI' COLLATE case_sensitive, ',', 'abc'); SELECT string_to_array('ABCDEFGHI' COLLATE case_sensitive, NULL, 'b'); +-- +-- A unique index under one collation does not prove uniqueness under +-- another, so the planner must not use such a proof for any optimization. +-- + +-- Ensure that we do not use inner-unique join execution +EXPLAIN (VERBOSE, COSTS OFF) +SELECT * FROM test1cs t1, test3cs t2 +WHERE t1.x = t2.x COLLATE case_insensitive +ORDER BY 1, 2; + +SELECT * FROM test1cs t1, test3cs t2 +WHERE t1.x = t2.x COLLATE case_insensitive +ORDER BY 1, 2; + +-- Ensure that left-join is not removed +EXPLAIN (COSTS OFF) +SELECT t1.* FROM test3cs t1 + LEFT JOIN test3cs t2 ON t1.x = t2.x COLLATE case_insensitive +ORDER BY 1; + +SELECT t1.* FROM test3cs t1 + LEFT JOIN test3cs t2 ON t1.x = t2.x COLLATE case_insensitive +ORDER BY 1; + +-- Ensure that self-join is not removed +EXPLAIN (COSTS OFF) +SELECT * FROM test3cs t1, test3cs t2 +WHERE t1.x = t2.x COLLATE case_insensitive +ORDER BY 1, 2; + +SELECT * FROM test3cs t1, test3cs t2 +WHERE t1.x = t2.x COLLATE case_insensitive +ORDER BY 1, 2; + +-- Ensure that semijoin is not reduced to innerjoin +EXPLAIN (COSTS OFF) +SELECT * FROM test3cs t1 + WHERE EXISTS (SELECT 1 FROM test3cs t2 WHERE t1.x = t2.x COLLATE case_insensitive) +ORDER BY 1; + +SELECT * FROM test3cs t1 + WHERE EXISTS (SELECT 1 FROM test3cs t2 WHERE t1.x = t2.x COLLATE case_insensitive) +ORDER BY 1; + +-- +-- A DISTINCT / GROUP BY / set-op on a subquery does not prove uniqueness +-- under a different collation, so the planner must not use such a proof for +-- any optimization. +-- + +-- Ensure that we do not use inner-unique join execution +EXPLAIN (VERBOSE, COSTS OFF) +SELECT * FROM test1cs t1, (SELECT DISTINCT x FROM test3cs) t2 +WHERE t1.x = t2.x COLLATE case_insensitive +ORDER BY 1, 2; + +SELECT * FROM test1cs t1, (SELECT DISTINCT x FROM test3cs) t2 +WHERE t1.x = t2.x COLLATE case_insensitive +ORDER BY 1, 2; + +-- Same with GROUP BY +EXPLAIN (VERBOSE, COSTS OFF) +SELECT * FROM test1cs t1, (SELECT x FROM test3cs GROUP BY x) t2 +WHERE t1.x = t2.x COLLATE case_insensitive +ORDER BY 1, 2; + +SELECT * FROM test1cs t1, (SELECT x FROM test3cs GROUP BY x) t2 +WHERE t1.x = t2.x COLLATE case_insensitive +ORDER BY 1, 2; + +-- Same with set-op +EXPLAIN (VERBOSE, COSTS OFF) +SELECT * FROM test1cs t1, (SELECT x FROM test3cs UNION SELECT x FROM test3cs) t2 +WHERE t1.x = t2.x COLLATE case_insensitive +ORDER BY 1, 2; + +SELECT * FROM test1cs t1, (SELECT x FROM test3cs UNION SELECT x FROM test3cs) t2 +WHERE t1.x = t2.x COLLATE case_insensitive +ORDER BY 1, 2; + +-- Ensure that left-join is not removed +EXPLAIN (COSTS OFF) +SELECT t1.* FROM test3cs t1 + LEFT JOIN (SELECT DISTINCT x FROM test3cs) t2 ON t1.x = t2.x COLLATE case_insensitive +ORDER BY 1; + +SELECT t1.* FROM test3cs t1 + LEFT JOIN (SELECT DISTINCT x FROM test3cs) t2 ON t1.x = t2.x COLLATE case_insensitive +ORDER BY 1; + +-- Ensure that semijoin is not reduced to innerjoin +EXPLAIN (COSTS OFF) +SELECT * FROM test3cs t1 + WHERE EXISTS (SELECT 1 FROM (SELECT DISTINCT x FROM test3cs) t2 + WHERE t1.x = t2.x COLLATE case_insensitive) +ORDER BY 1; + +SELECT * FROM test3cs t1 + WHERE EXISTS (SELECT 1 FROM (SELECT DISTINCT x FROM test3cs) t2 + WHERE t1.x = t2.x COLLATE case_insensitive) +ORDER BY 1; + CREATE TABLE test1ci (x text COLLATE case_insensitive); CREATE TABLE test2ci (x text COLLATE case_insensitive); CREATE TABLE test3ci (x text COLLATE case_insensitive); diff -Nru postgresql-17-17.9/src/test/regress/sql/compression_pglz.sql postgresql-17-17.10/src/test/regress/sql/compression_pglz.sql --- postgresql-17-17.9/src/test/regress/sql/compression_pglz.sql 1970-01-01 00:00:00.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/sql/compression_pglz.sql 2026-05-11 19:46:41.000000000 +0000 @@ -0,0 +1,53 @@ +-- +-- Tests for PGLZ compression +-- + +-- directory paths and dlsuffix are passed to us in environment variables +\getenv libdir PG_LIBDIR +\getenv dlsuffix PG_DLSUFFIX + +\set regresslib :libdir '/regress' :dlsuffix + +CREATE FUNCTION test_pglz_compress(bytea) + RETURNS bytea + AS :'regresslib' LANGUAGE C STRICT; +CREATE FUNCTION test_pglz_decompress(bytea, int4, bool) + RETURNS bytea + AS :'regresslib' LANGUAGE C STRICT; + +-- Round-trip with pglz: compress then decompress. +SELECT test_pglz_decompress(test_pglz_compress( + decode(repeat('abcd', 100), 'escape')), 400, false) = + decode(repeat('abcd', 100), 'escape') AS roundtrip_ok; +SELECT test_pglz_decompress(test_pglz_compress( + decode(repeat('abcd', 100), 'escape')), 400, true) = + decode(repeat('abcd', 100), 'escape') AS roundtrip_ok; + +-- Decompression with rawsize too large, fails to fill the destination +-- buffer. +SELECT test_pglz_decompress(test_pglz_compress( + decode(repeat('abcd', 100), 'escape')), 500, true); + +-- Decompression with rawsize too small, fails with source not fully +-- consumed. +SELECT test_pglz_decompress(test_pglz_compress( + decode(repeat('abcd', 100), 'escape')), 100, true); + +-- Corrupted compressed data. Set control bit with read of a match tag, +-- no data follows. +SELECT length(test_pglz_decompress('\x01'::bytea, 1024, false)) AS ctrl_only_len; +SELECT test_pglz_decompress('\x01'::bytea, 1024, true); + +-- Corrupted compressed data. Set control bit with read of a match tag, +-- 1 byte follows. +SELECT test_pglz_decompress('\x01ff'::bytea, 1024, false); +SELECT test_pglz_decompress('\x01ff'::bytea, 1024, true); + +-- Corrupted compressed data. Set control bit with match tag where length +-- nibble is 3 bytes (extended length), no data follows. +SELECT test_pglz_decompress('\x010f01'::bytea, 1024, false); +SELECT test_pglz_decompress('\x010f01'::bytea, 1024, true); + +-- Clean up +DROP FUNCTION test_pglz_compress; +DROP FUNCTION test_pglz_decompress; diff -Nru postgresql-17-17.9/src/test/regress/sql/create_index.sql postgresql-17-17.10/src/test/regress/sql/create_index.sql --- postgresql-17-17.9/src/test/regress/sql/create_index.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/sql/create_index.sql 2026-05-11 19:46:41.000000000 +0000 @@ -45,6 +45,10 @@ COMMENT ON INDEX six_wrong IS 'bad index'; COMMENT ON INDEX six IS 'good index'; COMMENT ON INDEX six IS NULL; +SELECT obj_description('six'::regclass, 'pg_class') IS NULL AS six_comment_is_null; +COMMENT ON INDEX six IS 'add the comment back'; +COMMENT ON INDEX six IS ''; -- empty string removes the comment, same as NULL +SELECT obj_description('six'::regclass, 'pg_class') IS NULL AS six_comment_is_null; -- -- BTREE partial indices diff -Nru postgresql-17-17.9/src/test/regress/sql/create_role.sql postgresql-17-17.10/src/test/regress/sql/create_role.sql --- postgresql-17-17.9/src/test/regress/sql/create_role.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/sql/create_role.sql 2026-05-11 19:46:41.000000000 +0000 @@ -92,6 +92,13 @@ -- ok, we should be able to modify a role we created COMMENT ON ROLE regress_hasprivs IS 'some comment'; +SELECT shobj_description('regress_hasprivs'::regrole, 'pg_authid') IS NOT NULL AS has_comment; +COMMENT ON ROLE regress_hasprivs IS NULL; +SELECT shobj_description('regress_hasprivs'::regrole, 'pg_authid') IS NULL AS no_comment; +COMMENT ON ROLE regress_hasprivs IS 'add the comment back'; +SELECT shobj_description('regress_hasprivs'::regrole, 'pg_authid') IS NOT NULL AS has_comment; +COMMENT ON ROLE regress_hasprivs IS ''; -- empty string removes the comment, same as NULL +SELECT shobj_description('regress_hasprivs'::regrole, 'pg_authid') IS NULL AS no_comment; ALTER ROLE regress_hasprivs RENAME TO regress_tenant; ALTER ROLE regress_tenant NOINHERIT NOLOGIN CONNECTION LIMIT 7; diff -Nru postgresql-17-17.9/src/test/regress/sql/create_table_like.sql postgresql-17-17.10/src/test/regress/sql/create_table_like.sql --- postgresql-17-17.9/src/test/regress/sql/create_table_like.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/sql/create_table_like.sql 2026-05-11 19:46:41.000000000 +0000 @@ -223,3 +223,29 @@ DROP TYPE ctlty1; DROP VIEW ctlv1; DROP TABLE IF EXISTS ctlt4, ctlt10, ctlt11, ctlt11a, ctlt12; + +-- LIKE ... INCLUDING STATISTICS with dropped columns in the parent, +-- so stxkeys attnums are not contiguous. +CREATE TABLE ctl_stats3_parent (a int, b int, c int); +ALTER TABLE ctl_stats3_parent DROP COLUMN b; +CREATE STATISTICS ctl_stats3_stat ON a, c FROM ctl_stats3_parent; +CREATE TABLE ctl_stats3_child (LIKE ctl_stats3_parent INCLUDING STATISTICS); +CREATE TABLE ctl_stats4_parent (a int, b int, c int, d int); +ALTER TABLE ctl_stats4_parent DROP COLUMN b; +CREATE STATISTICS ctl_stats4_stat ON a, c FROM ctl_stats4_parent; +CREATE TABLE ctl_stats4_child (LIKE ctl_stats4_parent INCLUDING STATISTICS); +SELECT s.stxrelid::regclass AS relation, + array_agg(a.attname ORDER BY u.ord) AS stats_columns +FROM pg_statistic_ext s +CROSS JOIN LATERAL + unnest(s.stxkeys::int2[]) WITH ORDINALITY AS u(attnum, ord) +JOIN pg_attribute a + ON a.attrelid = s.stxrelid AND a.attnum = u.attnum +WHERE s.stxrelid IN ('ctl_stats3_child'::regclass, + 'ctl_stats4_child'::regclass) +GROUP BY s.stxrelid +ORDER BY s.stxrelid::regclass::text; +DROP TABLE ctl_stats3_parent; +DROP TABLE ctl_stats3_child; +DROP TABLE ctl_stats4_parent; +DROP TABLE ctl_stats4_child; diff -Nru postgresql-17-17.9/src/test/regress/sql/expressions.sql postgresql-17-17.10/src/test/regress/sql/expressions.sql --- postgresql-17-17.9/src/test/regress/sql/expressions.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/sql/expressions.sql 2026-05-11 19:46:41.000000000 +0000 @@ -196,16 +196,108 @@ function 1 myinthash(myint); create table inttest (a myint); -insert into inttest values(1::myint),(null); +insert into inttest values (null), (0::myint), (1::myint); --- try an array with enough elements to cause hashing -select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null); -select * from inttest where a not in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null); -select * from inttest where a not in (0::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null); --- ensure the result matched with the non-hashed version. We simply remove --- some array elements so that we don't reach the hashing threshold. -select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint, null); -select * from inttest where a not in (1::myint,2::myint,3::myint,4::myint,5::myint, null); -select * from inttest where a not in (0::myint,2::myint,3::myint,4::myint,5::myint, null); +-- Test EEOP_HASHED_SCALARARRAYOP against EEOP_SCALARARRAYOP. Ensure the +-- result of non-hashed vs hashed is the same. +select + a, + a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as not_hashed, + a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint) as hashed +from inttest; + +select + a, + a in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint) as not_hashed, + a in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as hashed + from inttest; + +select + a, + a not in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as not_hashed, + a not in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint) as hashed +from inttest; + +select + a, + a not in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint) as not_hashed, + a not in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as hashed +from inttest; + +-- Now make the equal function return false when given two NULLs +create or replace function myinteq(myint, myint) returns bool as $$ +begin + if $1 is null and $2 is null then + return false; + else + return $1::int = $2::int; + end if; +end; +$$ language plpgsql immutable; + +-- And try the same again to ensure EEOP_HASHED_SCALARARRAYOP does the same +-- thing as EEOP_SCALARARRAYOP. +select + a, + a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as not_hashed, + a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint) as hashed +from inttest; + +select + a, + a in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint) as not_hashed, + a in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as hashed + from inttest; + +select + a, + a not in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as not_hashed, + a not in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint) as hashed +from inttest; + +select + a, + a not in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint) as not_hashed, + a not in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as hashed +from inttest; + +-- Try again with an equality function that treats NULLs as equal to 0. +create or replace function myinteq(myint, myint) returns bool as $$ +begin + if $1 is null and $2 is null then + return false; + else + return coalesce($1::int,0) = coalesce($2::int, 0); + end if; +end; +$$ language plpgsql immutable; + +select + a, + a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as not_hashed, + a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint) as hashed, + a in (0::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint) as not_hashed_zero, + a in (0::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as hashed_zero +from inttest; + +select + a, + a in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint) as not_hashed, + a in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as hashed + from inttest; + +select + a, + a not in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as not_hashed, + a not in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint) as hashed, + a not in (0::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint) as not_hashed_zero, + a not in (0::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as hashed_zero +from inttest; + +select + a, + a not in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint) as not_hashed, + a not in (null::myint,1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint) as hashed +from inttest; rollback; diff -Nru postgresql-17-17.9/src/test/regress/sql/foreign_data.sql postgresql-17-17.10/src/test/regress/sql/foreign_data.sql --- postgresql-17-17.9/src/test/regress/sql/foreign_data.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/sql/foreign_data.sql 2026-05-11 19:46:41.000000000 +0000 @@ -67,6 +67,11 @@ CREATE FOREIGN DATA WRAPPER test_fdw HANDLER invalid_fdw_handler; -- ERROR CREATE FOREIGN DATA WRAPPER test_fdw HANDLER test_fdw_handler HANDLER invalid_fdw_handler; -- ERROR CREATE FOREIGN DATA WRAPPER test_fdw HANDLER test_fdw_handler; + +-- should preserve dependency on test_fdw_handler +ALTER FOREIGN DATA WRAPPER test_fdw VALIDATOR postgresql_fdw_validator; +DROP FUNCTION test_fdw_handler(); -- ERROR + DROP FOREIGN DATA WRAPPER test_fdw; -- ALTER FOREIGN DATA WRAPPER @@ -383,10 +388,12 @@ ALTER FOREIGN TABLE ft1 ADD COLUMN c4 integer; ALTER FOREIGN TABLE ft1 ADD COLUMN c5 integer DEFAULT 0; ALTER FOREIGN TABLE ft1 ADD COLUMN c6 integer; +ALTER FOREIGN TABLE ft1 ADD COLUMN IF NOT EXISTS c6 integer; ALTER FOREIGN TABLE ft1 ADD COLUMN c7 integer NOT NULL; ALTER FOREIGN TABLE ft1 ADD COLUMN c8 integer; ALTER FOREIGN TABLE ft1 ADD COLUMN c9 integer; ALTER FOREIGN TABLE ft1 ADD COLUMN c10 integer OPTIONS (p1 'v1'); +ALTER FOREIGN TABLE ft1 ADD c11 integer; ALTER FOREIGN TABLE ft1 ALTER COLUMN c4 SET DEFAULT 0; ALTER FOREIGN TABLE ft1 ALTER COLUMN c5 DROP DEFAULT; @@ -419,6 +426,7 @@ ALTER FOREIGN TABLE ft1 DROP COLUMN no_column; -- ERROR ALTER FOREIGN TABLE ft1 DROP COLUMN IF EXISTS no_column; ALTER FOREIGN TABLE ft1 DROP COLUMN c9; +ALTER FOREIGN TABLE ft1 DROP c11; ALTER FOREIGN TABLE ft1 ADD COLUMN c11 serial; ALTER FOREIGN TABLE ft1 SET SCHEMA foreign_schema; ALTER FOREIGN TABLE ft1 SET TABLESPACE ts; -- ERROR @@ -430,10 +438,12 @@ -- alter noexisting table ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 ADD COLUMN c4 integer; ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 ADD COLUMN c6 integer; +ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 ADD COLUMN IF NOT EXISTS c6 integer; ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 ADD COLUMN c7 integer NOT NULL; ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 ADD COLUMN c8 integer; ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 ADD COLUMN c9 integer; ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 ADD COLUMN c10 integer OPTIONS (p1 'v1'); +ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 ADD c11 integer; ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 ALTER COLUMN c6 SET NOT NULL; ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 ALTER COLUMN c7 DROP NOT NULL; @@ -447,8 +457,10 @@ ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 DROP CONSTRAINT ft1_c1_check; ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 OWNER TO regress_test_role; ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 OPTIONS (DROP delimiter, SET quote '~', ADD escape '@'); +ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 DROP COLUMN no_column; ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 DROP COLUMN IF EXISTS no_column; ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 DROP COLUMN c9; +ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 DROP c11; ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 SET SCHEMA foreign_schema; ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 RENAME c1 TO foreign_column_1; ALTER FOREIGN TABLE IF EXISTS doesnt_exist_ft1 RENAME TO foreign_table_1; diff -Nru postgresql-17-17.9/src/test/regress/sql/generated.sql postgresql-17-17.10/src/test/regress/sql/generated.sql --- postgresql-17-17.9/src/test/regress/sql/generated.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/sql/generated.sql 2026-05-11 19:46:41.000000000 +0000 @@ -708,3 +708,27 @@ CREATE TABLE gtest28b (LIKE gtest28a INCLUDING GENERATED); \d gtest28* + +-- rule actions referring to generated columns: +-- NEW.b in a rule action should reflect the generated column's new value +CREATE TABLE gtest_rule (a int, b int GENERATED ALWAYS AS (a * 2) STORED); +CREATE TABLE gtest_rule_log (op text, old_b int, new_b int); +CREATE RULE gtest_rule_upd AS ON UPDATE TO gtest_rule + DO ALSO INSERT INTO gtest_rule_log VALUES ('UPD', OLD.b, NEW.b); +CREATE RULE gtest_rule_ins AS ON INSERT TO gtest_rule + DO ALSO INSERT INTO gtest_rule_log VALUES ('INS', NULL, NEW.b); +INSERT INTO gtest_rule (a) VALUES (1); +UPDATE gtest_rule SET a = 10; +UPDATE gtest_rule SET a = (SELECT max(b) FROM gtest_rule); +SELECT * FROM gtest_rule_log; +DROP RULE gtest_rule_upd ON gtest_rule; +DROP RULE gtest_rule_ins ON gtest_rule; +DROP TABLE gtest_rule_log; + +-- rule quals referring to generated columns: +-- NEW.b in the rule qual should reflect the generated column's new value +CREATE RULE gtest_rule_qual AS ON UPDATE TO gtest_rule WHERE NEW.b > 100 + DO INSTEAD NOTHING; +UPDATE gtest_rule SET a = 100; +SELECT * FROM gtest_rule; +DROP TABLE gtest_rule; diff -Nru postgresql-17-17.9/src/test/regress/sql/indexing.sql postgresql-17-17.10/src/test/regress/sql/indexing.sql --- postgresql-17-17.9/src/test/regress/sql/indexing.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/sql/indexing.sql 2026-05-11 19:46:41.000000000 +0000 @@ -246,6 +246,65 @@ where relname like 'idxpart%' order by relname; drop table idxpart; +-- Verify that re-attaching an already-attached partition index can +-- validate the parent index if it was still invalid, including +-- indirect ancestors in subpartitions. +create table idxpart (a int, b int) partition by range (a); +create table idxpart1 partition of idxpart for values from (0) to (1000) partition by range (a); +create table idxpart11 partition of idxpart1 for values from (0) to (500); +-- Partitioned table with no partitions +create table idxpart2 partition of idxpart for values from (1000) to (2000) partition by range (a); +-- create parent indexes +create index on only idxpart ((a/b)); +create index on only idxpart1 ((a/b)); +create index on only idxpart2 ((a/b)); +-- fail, leaves behind an invalid index on the leaf partition +insert into idxpart11 values (1, 0); +create index concurrently on idxpart11 ((a/b)); +select relname, indisvalid from pg_class join pg_index on indexrelid = oid + where relname like 'idxpart%' order by relname; +-- attach the indexes; parents stay invalid +alter index idxpart1_expr_idx attach partition idxpart11_expr_idx; +alter index idxpart_expr_idx attach partition idxpart1_expr_idx; +alter index idxpart_expr_idx attach partition idxpart2_expr_idx; +select relname, indisvalid from pg_class join pg_index on indexrelid = oid + where relname like 'idxpart%' order by relname; +-- fix the index on the leaf partition +delete from idxpart11 where b = 0; +reindex index concurrently idxpart11_expr_idx; +-- reattach the leaf partition index; parents should now be valid +alter index idxpart1_expr_idx attach partition idxpart11_expr_idx; +select relname, indisvalid from pg_class join pg_index on indexrelid = oid + where relname like 'idxpart%' order by relname; +drop table idxpart; + +-- Verify that re-attaching does not validate the parent when another +-- child index is still invalid. +create table idxpart (a int, b int) partition by range (a); +create table idxpart1 partition of idxpart for values from (0) to (500); +create table idxpart2 partition of idxpart for values from (500) to (1000); +create index on only idxpart ((a/b)); +-- create invalid indexes on both children +insert into idxpart1 values (1, 0); +insert into idxpart2 values (501, 0); +create index concurrently on idxpart1 ((a/b)); +create index concurrently on idxpart2 ((a/b)); +select relname, indisvalid from pg_class join pg_index on indexrelid = oid + where relname like 'idxpart%' order by relname; +-- attach both; parent stays invalid +alter index idxpart_expr_idx attach partition idxpart1_expr_idx; +alter index idxpart_expr_idx attach partition idxpart2_expr_idx; +select relname, indisvalid from pg_class join pg_index on indexrelid = oid + where relname like 'idxpart%' order by relname; +-- fix only idxpart1's index, leave idxpart2's still invalid +delete from idxpart1 where b = 0; +reindex index concurrently idxpart1_expr_idx; +-- re-attach the fixed child; parent should stay invalid +alter index idxpart_expr_idx attach partition idxpart1_expr_idx; +select relname, indisvalid from pg_class join pg_index on indexrelid = oid + where relname like 'idxpart%' order by relname; +drop table idxpart; + -- verify dependency handling during ALTER TABLE DETACH PARTITION create table idxpart (a int) partition by range (a); create table idxpart1 (like idxpart); diff -Nru postgresql-17-17.9/src/test/regress/sql/join.sql postgresql-17-17.10/src/test/regress/sql/join.sql --- postgresql-17-17.9/src/test/regress/sql/join.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/sql/join.sql 2026-05-11 19:46:41.000000000 +0000 @@ -2059,6 +2059,29 @@ left join onek t4 on t2.q2 < t3.unique2; +-- bug #19460: we need to clean up RestrictInfos more than we had been doing +explain (costs off) +select * from + (select 1::int as id) as lhs +full join + (select dummy_source.id + from (select null::int as id) as dummy_source + left join (select a.id from a where a.id = 42) as sub + on sub.id = dummy_source.id + ) as rhs +on lhs.id = rhs.id; + +explain (costs off) +select * from + (select 1::int as id) as lhs +full join + (select dummy_source.id + from (select 2::int as id) as dummy_source + left join (select a.id from a) as sub + on sub.id = dummy_source.id + ) as rhs +on lhs.id = rhs.id; + -- More tests of correct placement of pseudoconstant quals -- simple constant-false condition diff -Nru postgresql-17-17.9/src/test/regress/sql/multirangetypes.sql postgresql-17-17.10/src/test/regress/sql/multirangetypes.sql --- postgresql-17-17.9/src/test/regress/sql/multirangetypes.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/sql/multirangetypes.sql 2026-05-11 19:46:41.000000000 +0000 @@ -722,6 +722,22 @@ drop role regress_multirange_owner; -- +-- CREATE TYPE checks for CREATE on multirange schema +-- +create role regress_mr; +create schema mr_sch; +set role regress_mr; +create type mytype as range (subtype=int4, multirange_type_name=mr_sch.mr_type); +reset role; +grant create on schema mr_sch to regress_mr; +set role regress_mr; +create type mytype as range (subtype=int4, multirange_type_name=mr_sch.mr_type); +reset role; +drop type mytype; +drop schema mr_sch; +drop role regress_mr; + +-- -- Test polymorphic type system -- @@ -815,6 +831,9 @@ (values (two_ints_multirange(two_ints_range(row(1,2), row(3,4)))), (two_ints_multirange(two_ints_range(row(5,6), row(7,8))))) v(t); +-- this must be rejected to avoid self-inclusion issues: +alter type two_ints add attribute c two_ints_multirange; + drop type two_ints cascade; -- diff -Nru postgresql-17-17.9/src/test/regress/sql/prepared_xacts.sql postgresql-17-17.10/src/test/regress/sql/prepared_xacts.sql --- postgresql-17-17.9/src/test/regress/sql/prepared_xacts.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/sql/prepared_xacts.sql 2026-05-11 19:46:41.000000000 +0000 @@ -1,3 +1,8 @@ +SELECT current_setting('max_prepared_transactions')::integer < 2 AS skip_test \gset +\if :skip_test +\quit +\endif + -- -- PREPARED TRANSACTIONS (two-phase commit) -- @@ -158,7 +163,32 @@ -- There should be no prepared transactions SELECT gid FROM pg_prepared_xacts WHERE gid ~ '^regress_' ORDER BY gid; + +-- Test row-level locks held by prepared transactions +CREATE TABLE pxtest_rowlock (id int PRIMARY KEY, data text); +INSERT INTO pxtest_rowlock VALUES (1, 'test data'); + +BEGIN; +SELECT * FROM pxtest_rowlock WHERE id = 1 FOR SHARE; +PREPARE TRANSACTION 'regress_p1'; + +-- Should fail because the row is locked +SELECT * FROM pxtest_rowlock WHERE id = 1 FOR UPDATE NOWAIT; + +-- Test prepared transactions that participate in multixacts. For +-- that, lock the same row again, creating a multixid. +BEGIN; +SELECT * FROM pxtest_rowlock WHERE id = 1 FOR SHARE; +PREPARE TRANSACTION 'regress_p2'; + +-- Should fail because the row is locked +SELECT * FROM pxtest_rowlock WHERE id = 1 FOR UPDATE NOWAIT; + +ROLLBACK PREPARED 'regress_p1'; +ROLLBACK PREPARED 'regress_p2'; + -- Clean up DROP TABLE pxtest2; -DROP TABLE pxtest3; -- will still be there if prepared xacts are disabled +-- pxtest3 was already dropped DROP TABLE pxtest4; +DROP TABLE pxtest_rowlock; diff -Nru postgresql-17-17.9/src/test/regress/sql/stats.sql postgresql-17-17.10/src/test/regress/sql/stats.sql --- postgresql-17-17.9/src/test/regress/sql/stats.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/sql/stats.sql 2026-05-11 19:46:41.000000000 +0000 @@ -396,9 +396,17 @@ -- check that the stats are reset. SELECT (n_tup_ins + n_tup_upd) > 0 AS has_data FROM pg_stat_all_tables WHERE relid = 'pg_shdescription'::regclass; +-- stats_reset may not be set for datid=0 and shared objects in +-- pg_stat_database, so reset once. SELECT pg_stat_reset_single_table_counters('pg_shdescription'::regclass); SELECT (n_tup_ins + n_tup_upd) > 0 AS has_data FROM pg_stat_all_tables WHERE relid = 'pg_shdescription'::regclass; +SELECT stats_reset AS shared_db_reset_before + FROM pg_stat_database WHERE datid = 0 \gset +-- Second reset for comparison. +SELECT pg_stat_reset_single_table_counters('pg_shdescription'::regclass); +SELECT stats_reset > :'shared_db_reset_before'::timestamptz AS has_updated + FROM pg_stat_database WHERE datid = 0; -- set back comment \if :{?description_before} diff -Nru postgresql-17-17.9/src/test/regress/sql/tsearch.sql postgresql-17-17.10/src/test/regress/sql/tsearch.sql --- postgresql-17-17.9/src/test/regress/sql/tsearch.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/sql/tsearch.sql 2026-05-11 19:46:41.000000000 +0000 @@ -646,6 +646,14 @@ SELECT ts_headline('english', 'foo bar', to_tsquery('english', '')); +-- Test for large values of StartSel, StopSel and FragmentDelimiter +SELECT ts_headline('english', 'foo barbar', to_tsquery('english', 'foo'), + 'StartSel=' || repeat('x', 32768)); +SELECT ts_headline('english', 'foo barbar', to_tsquery('english', 'foo'), + 'StopSel=' || repeat('x', 32768)); +SELECT ts_headline('english', 'foo barbar', to_tsquery('english', 'foo'), + 'FragmentDelimiter=' || repeat('x', 32768)); + --Rewrite sub system CREATE TABLE test_tsquery (txtkeyword TEXT, txtsample TEXT); diff -Nru postgresql-17-17.9/src/test/regress/sql/union.sql postgresql-17-17.10/src/test/regress/sql/union.sql --- postgresql-17-17.9/src/test/regress/sql/union.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/sql/union.sql 2026-05-11 19:46:41.000000000 +0000 @@ -577,3 +577,7 @@ left join lateral (select t1.tenthous from tenk2 t2 union all (values(1))) on true limit 1; + +-- Test handling of Vars with varno 0 in estimate_array_length +explain (verbose, costs off) +select null::int[] union all select null::int[] union all select null::bigint[]; diff -Nru postgresql-17-17.9/src/test/regress/sql/window.sql postgresql-17-17.10/src/test/regress/sql/window.sql --- postgresql-17-17.9/src/test/regress/sql/window.sql 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/regress/sql/window.sql 2026-05-11 19:46:41.000000000 +0000 @@ -330,6 +330,32 @@ SELECT pg_get_viewdef('v_window'); +-- test overflow frame specifications +SELECT sum(unique1) over (rows between current row and 9223372036854775807 following exclude current row), + unique1, four +FROM tenk1 WHERE unique1 < 10; + +SELECT sum(unique1) over (rows between 9223372036854775807 following and 1 following), + unique1, four +FROM tenk1 WHERE unique1 < 10; + +SELECT last_value(unique1) over (ORDER BY four rows between current row and 9223372036854775807 following exclude current row), + unique1, four +FROM tenk1 WHERE unique1 < 10; + +-- These test GROUPS mode with an offset large enough to cause overflow when +-- added to currentgroup. Although the overflow doesn't produce visibly wrong +-- results (due to the incremental nature of group pointer advancement), we +-- still need to protect against it as signed integer overflow is undefined +-- behavior in C. +SELECT sum(unique1) over (ORDER BY four groups between current row and 9223372036854775807 following), + unique1, four +FROM tenk1 WHERE unique1 < 10; + +SELECT sum(unique1) over (ORDER BY four groups between 9223372036854775807 following and unbounded following), + unique1, four +FROM tenk1 WHERE unique1 < 10; + -- RANGE offset PRECEDING/FOLLOWING tests SELECT sum(unique1) over (order by four range between 2::int8 preceding and 1::int2 preceding), diff -Nru postgresql-17-17.9/src/test/subscription/t/030_origin.pl postgresql-17-17.10/src/test/subscription/t/030_origin.pl --- postgresql-17-17.9/src/test/subscription/t/030_origin.pl 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/test/subscription/t/030_origin.pl 2026-05-11 19:46:41.000000000 +0000 @@ -9,6 +9,9 @@ use PostgreSQL::Test::Utils; use Test::More; +my $tab_unquoted = q{tab'le}; +my $tab = qq{"$tab_unquoted"}; + my $subname_AB = 'tap_sub_A_B'; my $subname_AB2 = 'tap_sub_A_B_2'; my $subname_BA = 'tap_sub_B_A'; @@ -33,15 +36,15 @@ $node_B->start; # Create table on node_A -$node_A->safe_psql('postgres', "CREATE TABLE tab (a int PRIMARY KEY)"); +$node_A->safe_psql('postgres', "CREATE TABLE $tab (a int PRIMARY KEY)"); # Create the same table on node_B -$node_B->safe_psql('postgres', "CREATE TABLE tab (a int PRIMARY KEY)"); +$node_B->safe_psql('postgres', "CREATE TABLE $tab (a int PRIMARY KEY)"); # Setup logical replication # node_A (pub) -> node_B (sub) my $node_A_connstr = $node_A->connstr . ' dbname=postgres'; -$node_A->safe_psql('postgres', "CREATE PUBLICATION tap_pub_A FOR TABLE tab"); +$node_A->safe_psql('postgres', "CREATE PUBLICATION tap_pub_A FOR TABLE $tab"); $node_B->safe_psql( 'postgres', " CREATE SUBSCRIPTION $subname_BA @@ -51,7 +54,7 @@ # node_B (pub) -> node_A (sub) my $node_B_connstr = $node_B->connstr . ' dbname=postgres'; -$node_B->safe_psql('postgres', "CREATE PUBLICATION tap_pub_B FOR TABLE tab"); +$node_B->safe_psql('postgres', "CREATE PUBLICATION tap_pub_B FOR TABLE $tab"); $node_A->safe_psql( 'postgres', " CREATE SUBSCRIPTION $subname_AB @@ -71,25 +74,25 @@ ############################################################################### # insert a record -$node_A->safe_psql('postgres', "INSERT INTO tab VALUES (11);"); -$node_B->safe_psql('postgres', "INSERT INTO tab VALUES (21);"); +$node_A->safe_psql('postgres', "INSERT INTO $tab VALUES (11);"); +$node_B->safe_psql('postgres', "INSERT INTO $tab VALUES (21);"); $node_A->wait_for_catchup($subname_BA); $node_B->wait_for_catchup($subname_AB); # check that transaction was committed on subscriber(s) -$result = $node_A->safe_psql('postgres', "SELECT * FROM tab ORDER BY 1;"); +$result = $node_A->safe_psql('postgres', "SELECT * FROM $tab ORDER BY 1;"); is( $result, qq(11 21), 'Inserted successfully without leading to infinite recursion in bidirectional replication setup' ); -$result = $node_B->safe_psql('postgres', "SELECT * FROM tab ORDER BY 1;"); +$result = $node_B->safe_psql('postgres', "SELECT * FROM $tab ORDER BY 1;"); is( $result, qq(11 21), 'Inserted successfully without leading to infinite recursion in bidirectional replication setup' ); -$node_A->safe_psql('postgres', "DELETE FROM tab;"); +$node_A->safe_psql('postgres', "DELETE FROM $tab;"); $node_A->wait_for_catchup($subname_BA); $node_B->wait_for_catchup($subname_AB); @@ -98,10 +101,10 @@ # Check that remote data of node_B (that originated from node_C) is not # published to node_A. ############################################################################### -$result = $node_A->safe_psql('postgres', "SELECT * FROM tab ORDER BY 1;"); +$result = $node_A->safe_psql('postgres', "SELECT * FROM $tab ORDER BY 1;"); is($result, qq(), 'Check existing data'); -$result = $node_B->safe_psql('postgres', "SELECT * FROM tab ORDER BY 1;"); +$result = $node_B->safe_psql('postgres', "SELECT * FROM $tab ORDER BY 1;"); is($result, qq(), 'Check existing data'); # Initialize node node_C @@ -109,12 +112,12 @@ $node_C->init(allows_streaming => 'logical'); $node_C->start; -$node_C->safe_psql('postgres', "CREATE TABLE tab (a int PRIMARY KEY)"); +$node_C->safe_psql('postgres', "CREATE TABLE $tab (a int PRIMARY KEY)"); # Setup logical replication # node_C (pub) -> node_B (sub) my $node_C_connstr = $node_C->connstr . ' dbname=postgres'; -$node_C->safe_psql('postgres', "CREATE PUBLICATION tap_pub_C FOR TABLE tab"); +$node_C->safe_psql('postgres', "CREATE PUBLICATION tap_pub_C FOR TABLE $tab"); $node_B->safe_psql( 'postgres', " CREATE SUBSCRIPTION $subname_BC @@ -124,17 +127,17 @@ $node_B->wait_for_subscription_sync($node_C, $subname_BC); # insert a record -$node_C->safe_psql('postgres', "INSERT INTO tab VALUES (32);"); +$node_C->safe_psql('postgres', "INSERT INTO $tab VALUES (32);"); $node_C->wait_for_catchup($subname_BC); $node_B->wait_for_catchup($subname_AB); $node_A->wait_for_catchup($subname_BA); -$result = $node_B->safe_psql('postgres', "SELECT * FROM tab ORDER BY 1;"); +$result = $node_B->safe_psql('postgres', "SELECT * FROM $tab ORDER BY 1;"); is($result, qq(32), 'The node_C data replicated to node_B'); # check that the data published from node_C to node_B is not sent to node_A -$result = $node_A->safe_psql('postgres', "SELECT * FROM tab ORDER BY 1;"); +$result = $node_A->safe_psql('postgres', "SELECT * FROM $tab ORDER BY 1;"); is($result, qq(), 'Remote data originating from another node (not the publisher) is not replicated when origin parameter is none' ); diff -Nru postgresql-17-17.9/src/timezone/data/tzdata.zi postgresql-17-17.10/src/timezone/data/tzdata.zi --- postgresql-17-17.9/src/timezone/data/tzdata.zi 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/timezone/data/tzdata.zi 2026-05-11 19:46:41.000000000 +0000 @@ -1,4 +1,5 @@ -# version 2025c +# version 2026b +# redo posix_only # 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 - @@ -1304,8 +1305,8 @@ R MT 1975 1979 - Ap Su>=15 2 1 S R MT 1975 1980 - S Su>=15 2 0 - R MT 1980 o - Mar 31 2 1 S -R MD 1997 ma - Mar lastSu 2 1 S -R MD 1997 ma - O lastSu 3 0 - +R MD 1997 2021 - Mar lastSu 2 1 S +R MD 1997 2021 - O lastSu 3 0 - R O 1918 1919 - S 16 2s 0 - R O 1919 o - Ap 15 2s 1 S R O 1944 o - Ap 3 2s 1 S @@ -2965,7 +2966,9 @@ -5 C E%sT Z America/Vancouver -8:12:28 - LMT 1884 -8 Va P%sT 1987 --8 C P%sT +-8 C P%sT 2026 Mar 9 +-8 1 PDT 2026 N 1 2 +-7 - MST Z America/Whitehorse -9:0:12 - LMT 1900 Au 20 -9 Y Y%sT 1965 -9 Yu Y%sT 1966 F 27 @@ -3666,7 +3669,8 @@ 3 R MSK/MSD 1990 May 6 2 2 R EE%sT 1992 2 e EE%sT 1997 -2 MD EE%sT +2 MD EE%sT 2022 +2 E EE%sT Z Europe/Dublin -0:25:21 - LMT 1880 Au 2 -0:25:21 - DMT 1916 May 21 2s -0:25:21 1 IST 1916 O 1 2s diff -Nru postgresql-17-17.9/src/timezone/strftime.c postgresql-17-17.10/src/timezone/strftime.c --- postgresql-17-17.9/src/timezone/strftime.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/timezone/strftime.c 2026-05-11 19:46:41.000000000 +0000 @@ -122,6 +122,13 @@ * Convert timestamp t to string s, a caller-allocated buffer of size maxsize, * using the given format pattern. * + * Unlike standard strftime(), we guarantee to provide a null-terminated + * result even on failure, so long as maxsize > 0. If we overrun the buffer, + * return an empty string rather than risking mis-encoded multibyte output. + * (Since this module only supports C locale, you might think multibyte + * characters are impossible --- but the time zone name printed by %Z comes + * from outside and could contain such.) + * * See also timestamptz_to_str. */ size_t @@ -135,11 +142,15 @@ if (!p) { errno = EOVERFLOW; + if (maxsize > 0) + *s = '\0'; return 0; } if (p == s + maxsize) { errno = ERANGE; + if (maxsize > 0) + *s = '\0'; return 0; } *p = '\0'; diff -Nru postgresql-17-17.9/src/timezone/zic.c postgresql-17-17.10/src/timezone/zic.c --- postgresql-17-17.9/src/timezone/zic.c 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/timezone/zic.c 2026-05-11 19:46:41.000000000 +0000 @@ -2631,7 +2631,7 @@ bool isdst, zic_t save, bool doquotes) { char *cp; - char *slashp; + char const *slashp; size_t len; char const *format = zp->z_format; diff -Nru postgresql-17-17.9/src/tools/pgindent/typedefs.list postgresql-17-17.10/src/tools/pgindent/typedefs.list --- postgresql-17-17.9/src/tools/pgindent/typedefs.list 2026-02-23 21:58:47.000000000 +0000 +++ postgresql-17-17.10/src/tools/pgindent/typedefs.list 2026-05-11 19:46:41.000000000 +0000 @@ -617,6 +617,7 @@ DiscardMode DiscardStmt DistanceValue +DistinctColInfo DistinctExpr DoState DoStmt